
SyncroVerifiedFeatured
@Syncro Technologies, Inc
About Syncro
Syncro is a Remote Monitoring and Management (RMM) and Professional Services Automation (PSA) platform. Connect Claude to your Syncro instance for live access to tickets, alerts, customers, contacts, assets, products, appointments, and invoices. Ask Claude to update a ticket, prep for a site visit, book a follow-up, or find work that never got billed. Turn a support call transcript into a ticket with the summary and next steps already populated. Build automation on the same tools. Requires a Syncro account. The connector reads, writes and updates data in your Syncro instance; it does not delete data. Access follows your own Syncro permissions and Claude can only do what your Syncro role allows.
Connection details
https://mcp.services.syncromsp.com/mcp/streamSetup
claude mcp add syncro --transport http https://mcp.services.syncromsp.com/mcp/streamTools
46Create an RMM alert for a customer. NOT idempotent — a retry creates a duplicate alert, so dedupe before retrying. Example: create_alert({ customer_id: 5, description: 'Disk almost full', formatted_output: 'C: at 95%' }). Requires scope: mcp-server.
Get a single RMM alert by its Syncro alert id. Read-only. Example: get_alert({ alert_id: 5 }). Requires scope: mcp-server.
List RMM alerts, optionally filtered by asset or status. Read-only. Example: list_alerts({ asset_id: 5, status: 'active' }). Requires scope: mcp-server.
Create an appointment over a start/end window. NOT idempotent — a retry creates a duplicate appointment, so dedupe before retrying. Example: create_appointment({ summary: 'On-site visit', start_at: '2026-07-01T15:00:00Z', end_at: '2026-07-01T16:00:00Z', customer_id: 5 }). Requires scope: mcp-server.
Get a single appointment by its Syncro appointment id. Read-only. Example: get_appointment({ appointment_id: 5 }). Requires scope: mcp-server.
List appointments, optionally filtered by date range. When date_from/date_to are omitted the API defaults to roughly the last week through two months ahead, so pass an explicit range to look outside that window. Read-only. Example: list_appointments({ date_from: '2026-01-01', date_to: '2026-03-31' }). Requires scope: mcp-server.
Update fields on an existing appointment. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_appointment({ appointment_id: 3, start_at: '2026-07-01T16:00:00Z' }). Requires scope: mcp-server.
Create an asset under a customer. Provide either asset_type_name or asset_type_id. NOT idempotent — a retry creates a duplicate asset, so dedupe before retrying. Example: create_asset({ customer_id: 5, name: 'Front desk PC', asset_type_name: 'Computer' }). Requires scope: mcp-server.
Get a single customer asset by its Syncro asset id. Read-only. Example: get_asset({ asset_id: 5 }). Requires scope: mcp-server.
List customer assets, optionally filtered by customer, asset type, SNMP status, or a free-text query. Read-only. Example: list_assets({ customer_id: 5, asset_type_id: 2 }). Requires scope: mcp-server.
Update fields on an existing asset. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_asset({ asset_id: 12, name: 'Reception PC' }). Requires scope: mcp-server.
Create a contact under a customer. NOT idempotent — a retry creates a duplicate contact, so dedupe before retrying. Example: create_contact({ customer_id: 5, name: 'Grace Hopper', email: '[email protected]' }). Requires scope: mcp-server.
Get a single contact by its Syncro contact id. Read-only. Example: get_contact({ contact_id: 5 }). Requires scope: mcp-server.
List contacts, optionally filtered by customer. Read-only. Example: list_contacts({ customer_id: 5 }). Requires scope: mcp-server.
Update fields on an existing contact. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_contact({ contact_id: 9, phone: '555-0167' }). Requires scope: mcp-server.
Create a customer. NOT idempotent — a retry creates a duplicate customer, so dedupe before retrying (e.g. search by email first). Example: create_customer({ firstname: 'Ada', lastname: 'Lovelace', email: '[email protected]', phone: '555-0100' }). Requires scope: mcp-server.
Get details of a single customer by id. Read-only. Example: get_customer({ customer_id: 5 }). Requires scope: mcp-server.
List customers, optionally filtered by name, email, or free-text query. Read-only. Example: list_customers({ query: 'Acme', include_disabled: false }). Requires scope: mcp-server.
Update fields on an existing customer. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_customer({ customer_id: 5, phone: '555-0142' }). Requires scope: mcp-server.
Fetch the full text of one Syncro documentation article as markdown, for quoting exact step-by-step instructions. Use after search_docs, passing a result's url, and cite the article URL in your answer. Read-only. Example: get_docs_article({ url: '/creating-tickets/create-ticket-manual' }). Requires scope: mcp-server.
Search the official Syncro product documentation for how-to guides, feature explanations, and setup/configuration instructions. ALWAYS use this instead of answering from memory when the user asks how to do something in Syncro, where a setting lives, or how a feature works. Returns ranked snippets with links. The snippets are short previews, NOT the answer: to answer a how-to question you MUST then call get_docs_article on the best match's url to read the full step-by-step content, and cite that url. Never answer from a snippet alone or hand the user a bare link. If this tool errors, tell the user the documentation is temporarily unavailable rather than guessing. Read-only. Example: search_docs({ query: 'create ticket manually' }). Requires scope: mcp-server.
List invoices whose total falls within an amount range (inclusive). The API has no amount filter, so every invoice is fetched (all pages) and filtered on `total` here, returning the complete matching set. Read-only. Example: list_invoices_by_amount({ min_amount: 100, max_amount: 500 }). Requires scope: mcp-server.
List invoices by payment status ('paid', 'unpaid', or 'all') across every page (the complete set, not a single page). Read-only. Example: list_invoices_by_status({ status: 'unpaid' }). Requires scope: mcp-server.
Create an invoice for a customer. NOT idempotent — a retry creates a duplicate invoice, so dedupe before retrying. Example: create_invoice({ customer_id: 5, date: '2026-07-01' }). Requires scope: mcp-server.
List all invoices for a specific customer across every page (the complete set, not a single page). Read-only. Example: list_customer_invoices({ customer_id: 5 }). Requires scope: mcp-server.
Email an existing invoice to the customer. Success means the email was queued for sending upstream, NOT that it was delivered. NOT idempotent — a retry sends another email, so dedupe before retrying. Example: email_invoice({ invoice_id: 20 }). Requires scope: mcp-server.
Get a single invoice by its invoice id. Read-only. Example: get_invoice({ invoice_id: 42 }). Requires scope: mcp-server.
Add a line item to an existing invoice. NOT idempotent — a retry adds a duplicate line item, so dedupe before retrying. Example: add_invoice_line_item({ invoice_id: 20, item: 'CABLE', name: 'CAT6 Cable', quantity: 2, price: 9.99 }). Requires scope: mcp-server.
List invoices, returned newest first (by id). This is the default, general invoice-listing tool — use it for browsing or for the most recent invoices unless a more specific view is required. Optionally filtered by customer, ticket, paid/unpaid state, or date. Read-only. Example: list_invoices({ customer_id: 5, unpaid: true }). Requires scope: mcp-server.
List unpaid invoices that are past their due date. Every unpaid invoice is fetched (all pages) and filtered here, returning the complete overdue set. Read-only. Example: list_overdue_invoices(). Requires scope: mcp-server.
List all paid invoices across every page (the complete set, not a single page). Read-only. Example: list_paid_invoices(). Requires scope: mcp-server.
Queue an existing invoice for printing. Success means the print job was queued upstream, NOT that anything was printed. NOT idempotent — a retry queues another print job, so dedupe before retrying. Example: print_invoice({ invoice_id: 20 }). Requires scope: mcp-server.
Update fields on an existing invoice. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_invoice({ invoice_id: 20, note: 'Net 30 terms' }). Requires scope: mcp-server.
Get information about the current user (the authenticated account), including name, email, user id, admin flag, subdomain, and permissions. Read-only. Example: get_current_user(). Requires scope: mcp-server.
List the users in the account as [id, name] pairs. Users are the staff members (technicians), so this is also how to list technicians; returns enabled users only. The index currently returns every enabled user in a single page, so one call is usually enough. Use it to resolve the user_id accepted by tools such as list_tickets. Read-only. Example: list_users(). Requires scope: mcp-server.
Create a product in the catalog. NOT idempotent — a retry creates a duplicate product, so dedupe before retrying. Example: create_product({ name: 'CAT6 Cable', price_retail: 9.99 }). Requires scope: mcp-server.
Get a single product by its product id. Read-only. Example: get_product({ product_id: 5 }). Requires scope: mcp-server.
List products, optionally filtered by category or a free-text search. Read-only. Example: list_products({ query: 'laptop', category_id: 3 }). Requires scope: mcp-server.
Update fields on an existing product. NOT idempotent in effect — a retry re-applies the same field changes. Example: update_product({ product_id: 8, price_retail: 12.5 }). Requires scope: mcp-server.
Search the SyncroMSP global search API (GET /search) across multiple entity types: tickets, customers, assets, invoices, products, contacts. Read-only. Example: search({ query: 'acme' }). Requires scope: mcp-server.
Add a comment (timeline note) to an existing ticket. A non-hidden comment may email the customer, but whether it does depends on account and customer settings this tool can't see, and the response doesn't confirm delivery — so don't tell the user the customer was emailed. NOT idempotent — a retry adds a duplicate comment, so dedupe before retrying. Example: add_ticket_comment({ ticket_id: 42, subject: 'Update', body: 'Replaced the toner cartridge.' }). Requires scope: mcp-server.
Create a ticket for a customer. The `body` becomes the ticket's Issue Description (stored as the initial 'Initial Issue' comment), not a public reply — use add_ticket_comment for later timeline comments. Creating a ticket does not reliably email the customer (the initial comment is subject to the account's ticket-creation email default), so don't promise customer email from this tool. NOT idempotent — a retry creates a duplicate ticket, so dedupe before retrying (e.g. confirm no matching open ticket first). Example: create_ticket({ customer_id: 5, subject: 'Printer offline', body: 'HP on the 3rd floor will not print.' }). Requires scope: mcp-server.
Get a single ticket by its ticket id (the database id, not the ticket number). Read-only. Example: get_ticket({ ticket_id: 5 }). Requires scope: mcp-server.
List tickets, optionally filtered by customer, assignee, status, ticket number, created/resolved/updated timestamps, or a free-text search across the subject. Read-only. Example: list_tickets({ customer_id: 5, status: 'Not Closed' }) or list_tickets({ query: 'Iphone' }). Requires scope: mcp-server.
Add a worked-time timer entry to a ticket. Requires a start/end window: when start_at is omitted it defaults to now, and when neither end_at nor duration_minutes is given the end is derived from hours. NOT idempotent — a retry adds a duplicate timer entry, so dedupe before retrying. Example: add_timer_entry({ ticket_id: 42, hours: 1.5, description: 'On-site repair.' }). Requires scope: mcp-server.
Update fields on an existing ticket, such as status, priority, assignment, scheduling, tags, or custom field values. NOT idempotent — a retry re-applies the field changes. Example: update_ticket({ ticket_id: 42, status: 'Resolved' }). Requires scope: mcp-server.
Overview
Syncro is a Remote Monitoring and Management (RMM) and Professional Services Automation (PSA) platform. Connect Claude to your Syncro instance for live access to tickets, alerts, customers, contacts, assets, products, appointments, and invoices. Ask Claude to update a ticket, prep for a site visit, book a follow-up, or find work that never got billed. Turn a support call transcript into a ticket with the summary and next steps already populated. Build automation on the same tools. Requires a Syncro account. The connector reads, writes and updates data in your Syncro instance; it does not delete data. Access follows your own Syncro permissions and Claude can only do what your Syncro role allows.
You can use the Syncro connector to: Search: "Find everything in Syncro tied to Acme Corp: tickets, contacts, and open invoices." Manage tickets: "Update ticket #482 to Resolved and add a comment explaining the fix." Look up customers and contacts: "Pull every contact tied to Acme Corp and flag anyone missing a phone number." Track assets: "List every asset we have on file for Acme Corp before I head over." Handle invoicing and billing: "Show me every overdue invoice and email the top three to their customers." Log time: "Log 45 minutes of on-site work against ticket #482." Monitor alerts: "List every active alert so I know what needs attention today." Schedule appointments: "Book a follow-up visit for Acme Corp next Tuesday from 2 to 3 PM." Manage products: "Add a new product for our annual license renewal priced at $199."
Frequently asked questions
What is the Syncro remote MCP server?
The Syncro remote MCP server is a hosted Model Context Protocol endpoint at https://mcp.services.syncromsp.com/mcp/stream, so AI assistants can connect to it without installing or running anything locally.
How do I connect to the Syncro MCP server?
Add the endpoint https://mcp.services.syncromsp.com/mcp/stream to any MCP-compatible client such as Claude Code, Cursor, or VS Code. The setup snippets on this page configure each client in one step.
Does the Syncro MCP server require authentication?
Yes. Syncro uses OAuth: the first time you connect, your MCP client opens a browser window to sign in and authorize access, then reuses the credentials for future sessions.
Which transport does the Syncro MCP server use?
Syncro exposes a Streamable HTTP endpoint, the transport used by remote MCP servers and supported by all major MCP clients.
Basic information
Transport
Streamable HTTP
Authentication
OAuth
Category
Productivity
Author
Syncro Technologies, Inc
Submitted by
Richard Dean
More remote MCP servers
Apollo.io
Contacts, companies, sales engagement
AI Video MCP by AITuber
AI Video MCP by AITuber is a hosted MCP server that lets AI agents create and publish video. You connect it once, then ask your agent for a video in plain language. It writes the script, picks a voice, generates the visu
AWS Marketplace
Discover, evaluate, and buy solutions for the cloud
Agent Utility MCP
Production remote MCP server with exactly 100 bounded tools: 85 paid tools and 15 free tools for text, JSON, encoding, identifiers, numbers, dates, URLs, validation, and secure web intelligence. Paid calls are charged on
Aiwyn Tax
Estimate your federal & state taxes with Aiwyn's tax engine
Comments