ConnectWise PSA MCP server
ConnectWise PSA (Manage) MCP server — tickets, time entries, companies, configurations, BYOK
5 stars68 downloads/wk
Reviews
Write oneNobody has reviewed ConnectWise PSA yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
ConnectWise PSA tools (39, 7 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
cw_add_ticket_noteAdd a note to a ticket. Discussion notes are visible to the customer on portals/emails;
cw_create_ticketwrite actionCreate a new service ticket on a board for a company.
cw_create_time_entrywrite actionLog time against a service ticket. Time is attributed to the member whose API keys this session uses.
cw_delete_schedule_entrywrite actionRemove a schedule entry from the dispatch board (e.g. to cancel a scheduled visit).
cw_find_endpointDiscover which ConnectWise REST endpoint (and its filter fields) fits a task — search a curated
cw_getRead-only GET for any ConnectWise REST path (the part after /apis/3.0, e.g. /procurement/purchaseorders).
cw_get_agreementGet one agreement (contract) with its coverage limits and billing cycle. Read-only.
cw_get_boardList the statuses and types available on a service board — the exact names cw_update_ticket
cw_get_companyGet one company by ID.
cw_get_configurationGet one configuration with full details (serial, model, network, OS, warranty, notes).
cw_get_contactGet one contact with their phone numbers and email addresses (communication items).
cw_get_invoiceGet one invoice by ID. Read-only.
cw_get_memberGet one member's dispatch profile: timezone, work role, location, capacity, and their working
cw_get_ticketGet one ticket with its most recent notes (newest first).
cw_list_agreementsList service agreements (contracts), optionally filtered by company or status. Read-only.
cw_list_boardsList service boards. Use to discover exact board names for cw_search_tickets / cw_create_ticket,
cw_list_company_sitesList a company's sites (locations/addresses), with phone and timezone.
cw_list_configurationsList configurations (devices/assets) — servers, firewalls, workstations — optionally filtered by
cw_list_invoicesList invoices, optionally filtered by company, status, or invoice date range (YYYY-MM-DD). Read-only.
cw_list_membersList members (technicians) for dispatch — each with timezone, working-hours calendar name,
cw_list_my_timeList time entries for the member this session acts as, newest first, optionally within a date range.
cw_list_my_timesheetsList timesheets for the member this session acts as, newest first, with their status
cw_list_prioritiesList ticket priorities (exact names for cw_create_ticket / cw_update_ticket).
cw_list_schedule_entriesList dispatch/schedule entries, optionally filtered by member, ticket, or date range
cw_list_ticket_tasksList the task/checklist items on a ticket, with their done state.
cw_list_ticket_timeList all time entries logged against a ticket (by any member), newest first.
cw_list_unbilled_timeList billable time entries not yet on an invoice — what's ready to bill. Filter by company
cw_list_work_rolesList work roles (used when logging time). Excludes inactive by default.
cw_member_availabilityShow a member's booked vs free hours on a given day (YYYY-MM-DD): their schedule capacity
cw_my_scheduleList schedule entries assigned to the member this session acts as, optionally within a date range.
cw_my_ticketsList open tickets assigned to the member this session acts as (owner or listed in resources).
cw_schedule_ticketSchedule a service ticket to a member for a time window. Times are ISO-8601
cw_search_companiesSearch companies by name (substring). Use this to find the company ID needed by ticket and configuration tools.
cw_search_contactsSearch contacts by name, optionally within one company.
cw_search_ticketsSearch service tickets by company, board, status, summary text, or assigned member.
cw_submit_timesheetwrite actionSubmit a timesheet for approval. Get the timesheet id from cw_list_my_timesheets;
cw_update_schedule_entrywrite actionReschedule or reassign a schedule entry, or mark it done. Times are ISO-8601. Only provided fields change.
cw_update_ticketwrite actionUpdate a ticket's status, priority, summary, or owner. Only provided fields change.
cw_update_time_entrywrite actionEdit an existing time entry — its notes, start/end, billable flag, or work role. Only provided
Public scan report
scanner v0.1.9 · 2026-09-26 · same rubric, same numbers if you re-run it
- Code scan18 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 30 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year9/10
How ConnectWise PSA compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 85/100
- higher than 70% of 48,255 servers
- Tools
- 39
- the typical server has 7
- Tools that change things
- 18%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 5
- more than 83% of 28,688 servers
- Downloads a week
- 68
- more than 53% of 12,191 servers with a package
What its tools let an agent do: 32 read · 7 change
Install ConnectWise PSA in Claude Code, Cursor or VS Code
Runs npx -y mcp-connectwise-psa on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add mcp-connectwise-psa -- npx -y mcp-connectwise-psa
What the publisher says
From the ConnectWise PSA repository's README, as published. We do not edit it. Read it on GitHub
mcp-connectwise-psa
An MCP (Model Context Protocol) server for ConnectWise PSA (Manage) — curated tools across 8 toolsets covering technicians, dispatchers, and billing, plus an escape hatch for the rest of the API and a read-only SQL toolset for on-prem deployments, so an AI assistant works PSA the way each role does:
- Tickets — search / my tickets / full detail with notes, create, update status/priority/owner, add discussion/internal notes, plus board·status·priority discovery and per-ticket time & tasks. Covers service and project tickets — ConnectWise keeps them on separate resources, so the read tools query both and the by-id tools detect which one an id belongs to
- Time — log time against tickets (with work role, work type and CW's Deduct for breaks), review your own time, work-role and work-type lookup, and list & submit your timesheets
- Companies & contacts — fast lookup, contact detail (phones/emails), company sites
- Configurations — devices/assets with serials, IPs, OS, warranty (read-only)
- Dispatch (schedule) — schedule entries (list/mine/create/reschedule/cancel), and members with their timezone, working hours, and free-vs-booked availability
- Invoicing (finance, read-only) — invoices, agreements, and unbilled billable time ready to bill
- SQL (on-prem only) — read-only T-SQL straight against the cwwebapp Manage database for the cross-table reporting REST cannot express, with a searchable schema catalog and a library of saved queries the assistant can grow. Enabled by configuring CWDB_*; where it is, every session that does not narrow its toolsets has it
- Toolsets & personas — enable only what a session needs via the x-cw-toolsets header (or CWTOOLSETS); presets tech / dispatch / invoicing / all. Default is all — narrow it per session when a smaller surface is wanted. Each tool also reports its toolset as meta.group, so an aggregator (the MSPStack gateway) can group and switch tools by capability
- Per-member API keys (BYOK) — each user supplies their own ConnectWise member keys; ConnectWise enforces that member's security role, and every write is attributed to the actual person
- Transports — stdio for local use, streamable HTTP for shared deployments; Docker image included
Quick start (local, stdio)
npm install && npm run build
CW_SITE=na.myconnectwise.net \
CW_COMPANY_ID=yourcompany \
CW_CLIENT_ID=<integration clientId> \
CW_PUBLIC_KEY=xxxx CW_PRIVATE_KEY=yyyy \
CW_MEMBER_IDENTIFIER=jdoe \
node dist/index.jsClaude Desktop / Claude Code config:
{
"mcpServers": {
"connectwise": {
"command": "node",
"args": ["/path/to/mcp-connectwise-psa/dist/index.js"],
"env": {
"CW_SITE": "na.myconnectwise.net",
"CW_COMPANY_ID": "yourcompany",
"CW_CLIENT_ID": "<clientId>",
"CW_PUBLIC_KEY": "xxxx",
"CW_PRIVATE_KEY": "yyyy",
"CW_MEMBER_IDENTIFIER": "jdoe"
}
}
}
}A clientId is required by the ConnectWise API — register a (free) integration at developer.connectwise.com. API member keys are created in ConnectWise under My Account → API Keys (per member) or System → Members → API Members (integration accounts).
HTTP deployment
CW_SITE=… CW_COMPANY_ID=… CW_CLIENT_ID=… \
node dist/index.js --transport http --port 3000Or with Docker: docker build -t mcp-connectwise-psa . && docker run -p 3000:3000 -e CWSITE -e CWCOMPANYID -e CWCLIENT_ID mcp-connectwise-psa
Sessions are held in memory — run a single instance (or sticky sessions).
Access control — bring your own keys (BYOK)
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
ConnectWise PSA: common questions
- Is ConnectWise PSA MCP server safe?
- Yes, by our scan: it is graded A (85/100). Read the ConnectWise PSA safety report
- How do I install ConnectWise PSA?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does ConnectWise PSA need an API key?
- Yes. The registry entry asks for
CW_PUBLIC_KEY,CW_PRIVATE_KEY. - Is ConnectWise PSA maintained?
- The last commit was 69 days ago (2026-08-27). The latest release is v0.4.0.
- How does ConnectWise PSA compare with other MCP servers?
- safety score 85/100 (higher than 70% of 48,255 servers); tools 39 (the typical server has 7); tools that change things 18% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.