Syncro
MCP server for Syncro MSP β customers, tickets, assets, invoices, and more.
Ask AI about Syncro
Powered by Claude Β· Grounded in docs
I know everything about Syncro. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Syncro MCP Server
A Model Context Protocol (MCP) server for Syncro MSP, implementing a decision tree architecture for efficient tool navigation.
One-Click Deployment
Features
- Decision Tree Architecture: Tools are organized by domain and loaded lazily
- Domain Navigation: Navigate between customers, tickets, assets, contacts, and invoices
- Lazy Loading: Domain handlers and the Syncro client are loaded on-demand
- Full Syncro API Coverage: Access to key Syncro MSP functionality
Installation
WYRE MCP servers are distributed via OCI/GHCR images and (where available) MCPB bundles. There is no npm package β
npm install @wyre-technology/syncro-mcpwill return 404.
Option 1: WYRE MCP Gateway (Recommended)
Use the hosted gateway at mcp.wyre.ai β paste your Syncro API key into the gateway UI and you're done.
{
"mcpServers": {
"syncro": {
"type": "http",
"url": "https://mcp.wyre.ai/v1/syncro/mcp",
"headers": {
"X-Syncro-Api-Key": "${SYNCRO_API_KEY}"
}
}
}
}
Option 2: Claude Code CLI (run from GitHub)
claude mcp add syncro \
-e SYNCRO_API_KEY=your-api-key \
-e SYNCRO_SUBDOMAIN=your-subdomain \
-- npx -y github:wyre-technology/syncro-mcp
Option 3: Docker (GHCR)
docker run --rm \
-e SYNCRO_API_KEY=your-api-key \
-e SYNCRO_SUBDOMAIN=your-subdomain \
ghcr.io/wyre-technology/syncro-mcp:latest
Option 4: From Source
git clone https://github.com/wyre-technology/syncro-mcp.git
cd syncro-mcp
npm ci
npm run build
node dist/index.js
Configuration
Set the following environment variables:
| Variable | Required | Description |
|---|---|---|
SYNCRO_API_KEY | Yes | Your Syncro API key |
SYNCRO_SUBDOMAIN | No | Your Syncro subdomain (if applicable) |
Getting Your API Key
- Log in to your Syncro MSP account
- Navigate to Settings > API Tokens
- Generate a new API token with appropriate permissions
Architecture
Decision Tree Navigation
The server uses a hierarchical approach to tool discovery:
- Initial State: Only navigation and status tools are exposed
- After Navigation: Domain-specific tools become available
- Back Navigation: Return to the main menu to switch domains
This reduces cognitive load and improves LLM tool selection accuracy.
Available Domains
| Domain | Description | Tools |
|---|---|---|
customers | Manage customer accounts | list, get, create, search |
tickets | Manage support tickets | list, get, create, update, add_comment |
assets | Manage configuration items | list, get, search |
contacts | Manage customer contacts | list, get, create |
invoices | View and manage billing | list, get, create, email |
Tools Reference
Navigation Tools
syncro_navigate
Navigate to a domain to access its tools.
{
"domain": "customers" | "tickets" | "assets" | "contacts" | "invoices"
}
syncro_back
Return to the main menu from any domain.
syncro_status
Show current navigation state and credential status.
Customers Domain
syncro_customers_list
List customers with optional filters.
{
"query": "search term",
"business_name": "Company Inc",
"email": "contact@example.com",
"include_disabled": false,
"page": 1,
"per_page": 25
}
syncro_customers_get
Get a specific customer by ID.
{
"customer_id": 123
}
syncro_customers_create
Create a new customer.
{
"business_name": "Acme Corp",
"firstname": "John",
"lastname": "Doe",
"email": "john@acme.com"
}
syncro_customers_search
Search customers by query string.
{
"query": "acme",
"limit": 25
}
Tickets Domain
syncro_tickets_list
List tickets with optional filters.
{
"customer_id": 123,
"status": "Open",
"user_id": 456,
"resolved": false
}
syncro_tickets_get
Get a specific ticket by ID.
{
"ticket_id": 789
}
syncro_tickets_create
Create a new ticket.
{
"customer_id": 123,
"subject": "Network Issue",
"problem_type": "Network",
"comment_body": "Initial description"
}
syncro_tickets_update
Update an existing ticket.
{
"ticket_id": 789,
"status": "Resolved",
"user_id": 456
}
syncro_tickets_add_comment
Add a comment to a ticket.
{
"ticket_id": 789,
"body": "Comment text",
"hidden": false
}
Assets Domain
syncro_assets_list
List assets with optional filters.
{
"customer_id": 123,
"asset_type": "Desktop"
}
syncro_assets_get
Get a specific asset by ID.
{
"asset_id": 456
}
syncro_assets_search
Search assets by query or serial number.
{
"query": "workstation",
"asset_serial": "SN12345"
}
Contacts Domain
syncro_contacts_list
List contacts with optional filters.
{
"customer_id": 123,
"query": "john"
}
syncro_contacts_get
Get a specific contact by ID.
{
"contact_id": 789
}
syncro_contacts_create
Create a new contact.
{
"customer_id": 123,
"name": "Jane Smith",
"email": "jane@example.com"
}
Invoices Domain
syncro_invoices_list
List invoices with optional filters.
{
"customer_id": 123,
"status": "sent",
"since_date": "2024-01-01"
}
syncro_invoices_get
Get a specific invoice by ID.
{
"invoice_id": 456
}
syncro_invoices_create
Create a new invoice.
{
"customer_id": 123,
"due_date": "2024-02-01"
}
syncro_invoices_email
Email an invoice to the customer.
{
"invoice_id": 456,
"subject": "Your Invoice"
}
Rate Limiting
Syncro API has a rate limit of 180 requests per minute. The underlying @wyre-technology/node-syncro library handles rate limiting automatically.
Development
# Install dependencies
npm install
# Build
npm run build
# Run in development
npm run dev
# Type check
npm run typecheck
# Lint
npm run lint
License
Apache-2.0
