{"name":"io.github.mspstack/mcp-connectwise-psa","slug":"mspstack-mcp-connectwise-psa","title":"ConnectWise PSA","description":"ConnectWise PSA (Manage) MCP server — tickets, time entries, companies, configurations, BYOK","url":"https://mcp.market/server/mspstack-mcp-connectwise-psa","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":37,"stars":6,"forks":1,"downloads_week":167,"last_push_at":"2026-10-07T09:16:46.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mspstack/mcp-connectwise-psa","website":"https://github.com/mspstack/mcp-connectwise-psa#readme","version":"0.12.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"mcp-connectwise-psa","version":"0.12.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"ConnectWise host (e.g. na.myconnectwise.net or an on-prem host; full URLs accepted)","isRequired":true,"name":"CW_SITE"},{"description":"ConnectWise login company id","isRequired":true,"name":"CW_COMPANY_ID"},{"description":"Integration clientId from developer.connectwise.com","isRequired":true,"name":"CW_CLIENT_ID"},{"description":"API member public key","isRequired":true,"isSecret":true,"name":"CW_PUBLIC_KEY"},{"description":"API member private key","isRequired":true,"isSecret":true,"name":"CW_PRIVATE_KEY"},{"description":"Member identifier the API keys belong to — enables \"my tickets\"/\"my time\" tools","name":"CW_MEMBER_IDENTIFIER"},{"description":"Comma list of toolsets/presets (default: all). Add sql for database queries.","name":"CW_TOOLSETS"},{"description":"ConnectWise SQL Server host (on-prem only) — enables the opt-in sql toolset","name":"CW_DB_HOST"},{"description":"ConnectWise Manage database, e.g. cwwebapp_acme","name":"CW_DB_NAME"},{"description":"Dedicated read-only database login (db_datareader)","name":"CW_DB_USER"},{"description":"Password for the read-only database login","isSecret":true,"name":"CW_DB_PASSWORD"},{"description":"Path to a writable JSON file holding saved SQL queries","name":"CW_DB_QUERY_LIBRARY"}]}],"tools":[{"name":"cw_add_ticket_note","description":"Add a note to a ticket. Discussion notes are visible to the customer on portals/emails;","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_bundle_tickets","description":"Attach child tickets to a parent ticket (CW's bundling). SERVICE tickets only. Children that","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_create_ticket","description":"Create a new SERVICE ticket on a board for a company. Project tickets cannot be created here —","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_create_time_entry","description":"Log time against a ticket, service or project — the resource is detected from the id. Time is","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_db_find_query","description":"Search the saved-query library — reporting SQL that already works against this database, shipped","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_db_find_table","description":"Find which ConnectWise database table or view holds something — keyword search over a catalog of","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_db_query","description":"Run one read-only T-SQL SELECT against the on-prem ConnectWise Manage database — for cross-table","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_db_save_query","description":"Add a query to the saved-query library so later sessions can find it with cw_db_find_query.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_delete_schedule_entry","description":"Remove a schedule entry from the dispatch board (e.g. to cancel a scheduled visit).","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_find_endpoint","description":"Discover which ConnectWise REST endpoint (and its filter fields) fits a task — search a curated","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get","description":"Read-only GET for any ConnectWise REST path (the part after /apis/3.0, e.g. /procurement/purchaseorders).","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_agreement","description":"Get one agreement (contract) with its coverage limits and billing cycle. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_board","description":"List what a service board allows — statuses, types, sub-types, items and teams. These are the","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_company","description":"Get one company by ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_configuration","description":"Get one configuration with full details (serial, model, network, OS, warranty, notes).","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_contact","description":"Get one contact with their phone numbers and email addresses (communication items).","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_invoice","description":"Get one invoice by ID. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_member","description":"Get one member's dispatch profile: timezone, work role, location, capacity, and their working","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_get_ticket","description":"Get one ticket with its most recent notes (newest first). Works for service and project","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_agreements","description":"List service agreements (contracts), optionally filtered by company or status. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_boards","description":"List service boards. Use to discover exact board names for cw_search_tickets / cw_create_ticket,","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_company_sites","description":"List a company's sites (locations/addresses), with phone and timezone.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_configurations","description":"List configurations (devices/assets) — servers, firewalls, workstations — optionally filtered by","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_invoices","description":"List invoices, optionally filtered by company, status, or invoice date range (YYYY-MM-DD). Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_members","description":"List members (technicians) for dispatch — each with timezone, working-hours calendar name,","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_my_time","description":"List time entries for the member this session acts as, newest first, optionally within a date range.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_my_timesheets","description":"List timesheets for the member this session acts as, newest first, with their status","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_priorities","description":"List ticket priorities (exact names for cw_create_ticket / cw_update_ticket).","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_schedule_entries","description":"List dispatch/schedule entries, optionally filtered by member, ticket, or date range","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_ticket_tasks","description":"List the task/checklist items on a ticket, with their done state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_ticket_time","description":"List all time entries logged against a ticket (by any member), newest first. Works for service","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_unbilled_time","description":"List billable time entries not yet on an invoice — what's ready to bill. Filter by company","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_work_roles","description":"List work roles (used when logging time). Excludes inactive by default.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_list_work_types","description":"List work types (how time is classified — Remote, Onsite, …), for the work_type argument of","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_member_availability","description":"Show a member's booked vs free hours on a given day (YYYY-MM-DD): their schedule capacity","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_my_schedule","description":"List schedule entries assigned to the member this session acts as, optionally within a date range.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_my_tickets","description":"List open tickets assigned to the member this session acts as (owner or listed in resources).","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_schedule_ticket","description":"Schedule a service ticket to a member for a time window. Times are ISO-8601","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_search_companies","description":"Search companies by name (substring). Use this to find the company ID needed by ticket and configuration tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_search_contacts","description":"Search contacts by name, optionally within one company.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_search_tickets","description":"Search tickets by company, board, status, summary text, or assigned member. Covers SERVICE and","write_action":false,"price_micros":0,"input_schema":null},{"name":"cw_submit_timesheet","description":"Submit a timesheet for approval. Get the timesheet id from cw_list_my_timesheets;","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_update_schedule_entry","description":"Reschedule or reassign a schedule entry, or mark it done. Times are ISO-8601. Only provided fields change.","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_update_ticket","description":"Update a ticket's status, priority, summary, or owner. Only provided fields change.","write_action":true,"price_micros":0,"input_schema":null},{"name":"cw_update_time_entry","description":"Edit an existing time entry — notes, start/end, break, billable flag, work role or work type.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-10-30T18:17:45.859Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-30T18:17:45.795Z","components":{"code":{"score":25,"max":25,"notes":["26 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 23 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-connectwise-psa","version":"0.12.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-10-07T09:42:55.561Z","repositoryUrl":"git+https://github.com/mspstack/mcp-connectwise-psa.git","weeklyDownloads":167}],"repo":{"found":true,"owner":"mspstack","repo":"mcp-connectwise-psa","archived":false,"pushedAt":"2026-10-07T09:16:46Z","stars":6,"forks":1,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/305782245?v=4","ownerCreatedAt":"2026-07-16T09:35:34Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":6,"forks":1,"downloadsWeek":167,"license":"MIT","lastPushAt":"2026-10-07T09:16:46.000Z","score":37}}}},"grade_history":[],"reviews":[]}