Syncro MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Syncro MCP Serverlist all open tickets for customer Acme Corp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Syncro MCP Server
An MCP server for the Syncro (SyncroMSP) REST API, the PSA + RMM platform for MSPs. It lets an AI agent read customers, contacts, tickets with their comments, assets and invoices and, on explicit request, create customers, contacts, tickets and invoices, update tickets, add ticket comments and email invoices.
Transport: MCP Streamable HTTP at
POST /mcp, health probe atGET /healthStateless and multi-tenant: credentials arrive on every request as HTTP headers and are never stored; every tool is listed from the first
tools/listPython 3.12, uv, FastMCP, httpx
License: Apache-2.0, Copyright 2026 MSPbots.ai
Authentication headers
Header | Required | Type | Default | Allowed values | Description | Example |
| Yes | string | none | account name ( | The |
|
| Yes | string | none | - | Syncro API token (a leading |
|
Where to get them:
In Syncro open Admin -> API Tokens and create a token with the permissions the agent needs: view rights on Customers, Contacts, Tickets, Assets and Invoices for the read tools; create / edit rights only for the areas it should change.
The subdomain is the first part of the address you log in to Syncro with.
How the key is sent to Syncro: as Authorization: Bearer <token> to
https://{subdomain}.syncromsp.com/api/v1/..., never as a query parameter, so it does not
appear in URLs or access logs. Values that look like unresolved templates (${...}) are
treated as missing.
A request to /mcp without both headers gets HTTP 401 listing them; a subdomain that is not a
plain account name gets HTTP 400.
Related MCP server: SyncroMSP MCP Server
Tools
All tools return a JSON string. Syncro returns list results in pages of 25 with
{total_entries, total_pages, page}; pass page for more and per_page (at most 25) to
return fewer. A few filters the Syncro API does not offer are applied by this server over up
to 5 pages; those results report scanned_pages and next_page instead of totals.
Tool | Purpose | Parameters (required in bold) |
| Describe the tools of one area (changes nothing) | domain ( |
| Check the connection: subdomain, API user and permissions | - |
| List customers with contact details | query, business_name, email, phone, include_disabled, page, per_page |
| One customer with addresses, contacts and properties | customer_id |
| Find customers by name, business, email or phone | query, limit |
| Create a customer (write) | business_name, firstname, lastname, email, phone, mobile, address, address_2, city, state, zip, notes |
| List tickets | customer_id, contact_id, status, user_id, problem_type*, resolved*, query, since, page, per_page |
| One ticket with its comments | ticket_id |
| Create a ticket, optionally with a first comment (write) | customer_id, subject, problem_type, status, contact_id, user_id, due_date, comment_body, comment_subject |
| Change subject, problem type, status, technician or due date (write) | ticket_id, subject, problem_type, status, user_id, due_date |
| Add a comment; public comments may email the customer (write) | ticket_id, body, subject, hidden, do_not_email |
| List assets (devices) | customer_id, asset_type*, asset_serial*, query, page, per_page |
| One asset with type, serial and RMM properties | asset_id |
| Find assets by name or exact serial | query, asset_serial, customer_id, limit |
| List contacts | customer_id, query*, page, per_page |
| One contact | contact_id |
| Add a contact to a customer (write) | customer_id, name, email, phone, mobile, address1, address2, city, state, zip, notes |
| List invoices | customer_id*, status ( |
| One invoice with line items, totals and balance | invoice_id |
| Create an empty invoice numbered by Syncro (write) | customer_id, date (default today), due_date, notes |
| Email an invoice to its customer (write) | invoice_id |
* applied by this server, as described above.
Errors come back as a JSON envelope instead of an exception:
{"error": {"code": "unauthorized", "message": "Syncro returned HTTP 401 for me: the API key was rejected ...", "retryable": false}}code is one of not_configured, unauthorized, not_found, invalid_argument,
rate_limited, upstream_error. Syncro allows 180 requests per minute per source IP
address, so every account served from the same egress IP shares that budget; reads are
retried with backoff on 429 (honouring Retry-After), 5xx and network errors, writes only on
429.
Run locally
uv sync
uv run python -m syncro_mcp # listens on 0.0.0.0:8080or with Docker:
docker build --platform linux/amd64 -t syncro-mcp:dev .
docker run --rm -p 8080:8080 syncro-mcp:devConfiguration (environment variables, all optional): MCP_HTTP_HOST (default 0.0.0.0),
MCP_HTTP_PORT (default 8080), LOG_LEVEL (default INFO). Credentials are never read
from the environment.
Testing example
# list tools
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Syncro-Subdomain: acme" \
-H "X-Syncro-API-Key: your-syncro-api-key" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# open tickets of one customer
curl -s http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Syncro-Subdomain: acme" \
-H "X-Syncro-API-Key: your-syncro-api-key" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"syncro_tickets_list","arguments":{"customer_id":123,"resolved":false}}}'Unit tests (no network access needed):
uv run pytestDelivery notes
Built on the published API reference. Every call follows Syncro's OpenAPI document (
api-docs.syncromsp.com). Where the older version sent filters that endpoint does not have, they are now mapped to the documented ones (since->since_updated_at, invoicepaid/unpaid) or applied by this server and flagged withscanned_pages.Tool count (21). Tool names and required parameters are unchanged.
Invoice states. Syncro exposes paid / unpaid amounts, not draft / sent / viewed / void states; those values now return a clear
invalid_argumentinstead of being ignored.Removed no-op parameters.
syncro_invoices_emailno longer takescc_emails,subjectormessage: the endpoint has no such options (it uses the account's invoice email settings).per_pageis capped at Syncro's fixed page size of 25.Write tools. The 7 tools marked write change records or contact the customer; their descriptions tell the agent to use them only on explicit request. There are no delete tools.
No interactive prompts. Older versions asked the user for a date range before an unfiltered ticket list, which a stateless gateway cannot relay; lists now page instead.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect any AI assistant to Syncro: manage tickets, invoices, customers, assets, and more.
Read Synchroteam jobs, customers, sites, equipment and parts; create, schedule and complete jobs.
- PlixanaOAuthcom.plixana
Operate the Plixana CRM from any AI: contacts, deals, quotes, WhatsApp and metrics.
Manage Invoice Ninja clients, invoices, quotes, expenses, tasks and projects.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides AI assistants with direct access to Autotask PSA for MSP operations. Enables natural language interaction for ticket management, time logging, company lookups, project tracking, and billing review through 39 comprehensive tools.10018 npmApache 2.0
- AlicenseCqualityBmaintenanceEnables AI assistants to fully access and manage SyncroMSP resources including tickets, customers, assets, invoices, and over 30 resource types through 180+ API endpoints.19029 npm10MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with Simpro accounts, allowing natural language queries and updates to quotes, jobs, customers, and other data through the full Simpro API.53 npm1-
- AlicenseAqualityAmaintenanceEnables AI agents to read and create customers, jobs, estimates, invoices, calendar tasks, equipment, technicians, and reference data through the documented Service Fusion REST API, handling OAuth 2.0 and pagination automatically.243 npmMIT