MCP.Market

ConnectWise PSA MCP server

by mspstack·io.github.mspstack/mcp-connectwise-psa·v0.12.0·6 stars

ConnectWise PSA (Manage) MCP server — tickets, time entries, companies, configurations, BYOK

B82/100grade B
What users say
No reviews yet
Be the first
Safety scan
B82/100

full report

Adoption
Growing

6 stars167 downloads/wk

Reviews

Write one

Nobody has reviewed ConnectWise PSA yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

ConnectWise PSA tools (45, 8 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • cw_add_ticket_note

    Add a note to a ticket. Discussion notes are visible to the customer on portals/emails;

  • cw_bundle_tickets

    Attach child tickets to a parent ticket (CW's bundling). SERVICE tickets only. Children that

  • cw_create_ticketwrite action

    Create a new SERVICE ticket on a board for a company. Project tickets cannot be created here —

  • cw_create_time_entrywrite action

    Log time against a ticket, service or project — the resource is detected from the id. Time is

  • cw_db_find_query

    Search the saved-query library — reporting SQL that already works against this database, shipped

  • cw_db_find_table

    Find which ConnectWise database table or view holds something — keyword search over a catalog of

  • cw_db_querywrite action

    Run one read-only T-SQL SELECT against the on-prem ConnectWise Manage database — for cross-table

  • cw_db_save_query

    Add a query to the saved-query library so later sessions can find it with cw_db_find_query.

  • cw_delete_schedule_entrywrite action

    Remove a schedule entry from the dispatch board (e.g. to cancel a scheduled visit).

  • cw_find_endpoint

    Discover which ConnectWise REST endpoint (and its filter fields) fits a task — search a curated

  • cw_get

    Read-only GET for any ConnectWise REST path (the part after /apis/3.0, e.g. /procurement/purchaseorders).

  • cw_get_agreement

    Get one agreement (contract) with its coverage limits and billing cycle. Read-only.

  • cw_get_board

    List what a service board allows — statuses, types, sub-types, items and teams. These are the

  • cw_get_company

    Get one company by ID.

  • cw_get_configuration

    Get one configuration with full details (serial, model, network, OS, warranty, notes).

  • cw_get_contact

    Get one contact with their phone numbers and email addresses (communication items).

  • cw_get_invoice

    Get one invoice by ID. Read-only.

  • cw_get_member

    Get one member's dispatch profile: timezone, work role, location, capacity, and their working

  • cw_get_ticket

    Get one ticket with its most recent notes (newest first). Works for service and project

  • cw_list_agreements

    List service agreements (contracts), optionally filtered by company or status. Read-only.

  • cw_list_boards

    List service boards. Use to discover exact board names for cw_search_tickets / cw_create_ticket,

  • cw_list_company_sites

    List a company's sites (locations/addresses), with phone and timezone.

  • cw_list_configurations

    List configurations (devices/assets) — servers, firewalls, workstations — optionally filtered by

  • cw_list_invoices

    List invoices, optionally filtered by company, status, or invoice date range (YYYY-MM-DD). Read-only.

  • cw_list_members

    List members (technicians) for dispatch — each with timezone, working-hours calendar name,

  • cw_list_my_time

    List time entries for the member this session acts as, newest first, optionally within a date range.

  • cw_list_my_timesheets

    List timesheets for the member this session acts as, newest first, with their status

  • cw_list_priorities

    List ticket priorities (exact names for cw_create_ticket / cw_update_ticket).

  • cw_list_schedule_entries

    List dispatch/schedule entries, optionally filtered by member, ticket, or date range

  • cw_list_ticket_tasks

    List the task/checklist items on a ticket, with their done state.

  • cw_list_ticket_time

    List all time entries logged against a ticket (by any member), newest first. Works for service

  • cw_list_unbilled_time

    List billable time entries not yet on an invoice — what's ready to bill. Filter by company

  • cw_list_work_roles

    List work roles (used when logging time). Excludes inactive by default.

  • cw_list_work_types

    List work types (how time is classified — Remote, Onsite, …), for the work_type argument of

  • cw_member_availability

    Show a member's booked vs free hours on a given day (YYYY-MM-DD): their schedule capacity

  • cw_my_schedule

    List schedule entries assigned to the member this session acts as, optionally within a date range.

  • cw_my_tickets

    List open tickets assigned to the member this session acts as (owner or listed in resources).

  • cw_schedule_ticket

    Schedule a service ticket to a member for a time window. Times are ISO-8601

  • cw_search_companies

    Search companies by name (substring). Use this to find the company ID needed by ticket and configuration tools.

  • cw_search_contacts

    Search contacts by name, optionally within one company.

  • cw_search_tickets

    Search tickets by company, board, status, summary text, or assigned member. Covers SERVICE and

  • cw_submit_timesheetwrite action

    Submit a timesheet for approval. Get the timesheet id from cw_list_my_timesheets;

  • cw_update_schedule_entrywrite action

    Reschedule or reassign a schedule entry, or mark it done. Times are ISO-8601. Only provided fields change.

  • cw_update_ticketwrite action

    Update a ticket's status, priority, summary, or owner. Only provided fields change.

  • cw_update_time_entrywrite action

    Edit an existing time entry — notes, start/end, break, billable flag, work role or work type.

Public scan report

scanner v0.1.10 · 2026-10-30 · same rubric, same numbers if you re-run it

no findings
  • Code scan26 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 23 days ago15/15
  • Maintainer identityregistry namespace matches repository owner7/10
Overall 82/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How ConnectWise PSA compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
82/100
higher than 63% of 48,255 servers
Tools
45
the typical server has 7
Tools that change things
18%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
6
more than 85% of 28,688 servers
Downloads a week
167
more than 72% of 12,191 servers with a package

What its tools let an agent do: 37 read · 8 change

Release history: 2 versions in the registry since 2026-08-27, latest 2026-10-07, typically one every 41 days.

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
Add to Cursor

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.js

Claude 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 3000

Or 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?
Mostly: it is graded B (82/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, CW_DB_PASSWORD.
Is ConnectWise PSA maintained?
The last commit was 28 days ago (2026-10-07). The latest release is v0.12.0.
How does ConnectWise PSA compare with other MCP servers?
safety score 82/100 (higher than 63% of 48,255 servers); tools 45 (the typical server has 7); tools that change things 18% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

More from mspstack →