Skip to content
Agentmart
Submit a tool

ConnectWise Manage

MCP server for ConnectWise Manage PSA — companies, tickets, projects, time entries, and more.

Connector by wyre-technology · GitHub account verified by the MCP Registry

IndexedApache-2.0Local (stdio)★ 28
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/wyre-technology-connectwise-manage-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

MCP server for ConnectWise Manage PSA — companies, tickets, projects, time entries, and more.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
58 read · 20 write · 5 delete · 1 not yet classified
Secrets
3 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Docker image

Tools by what they do 84

Read from the source code; the running server may list different tools.

Read 58 · Look things up without changing anything.

  • cw_get_activity
  • cw_get_adjustment
  • cw_get_agreement
  • cw_get_agreement_additions
  • cw_get_agreement_recap
  • cw_get_catalog_item
  • cw_get_company
  • cw_get_configuration
  • cw_get_contact
  • cw_get_inventory_on_hand
  • cw_get_invoice
  • cw_get_member
Show 46 more tools
  • cw_get_opportunity
  • cw_get_procurement_product
  • cw_get_project
  • cw_get_project_ticket
  • cw_get_project_ticket_notes
  • cw_get_purchase_order
  • cw_get_purchase_order_items
  • cw_get_sales_order
  • cw_get_sales_order_products
  • cw_get_ticket
  • cw_get_ticket_configurations
  • cw_get_ticket_notes
  • cw_get_time_entry
  • cw_list_adjustment_types
  • cw_list_boards
  • cw_list_catalog_categories
  • cw_list_catalog_subcategories
  • cw_list_communication_types
  • cw_list_manufacturers
  • cw_list_priorities
  • cw_list_schedule_statuses
  • cw_list_schedule_types
  • cw_list_statuses
  • cw_list_warehouse_bins
  • cw_list_warehouses
  • cw_search_activities
  • cw_search_agreement_recaps
  • cw_search_agreements
  • cw_search_catalog_items
  • cw_search_companies
  • cw_search_configurations
  • cw_search_contacts
  • cw_search_invoices
  • cw_search_members
  • cw_search_opportunities
  • cw_search_opportunity_forecasts
  • cw_search_opportunity_notes
  • cw_search_procurement_products
  • cw_search_project_tickets
  • cw_search_projects
  • cw_search_purchase_orders
  • cw_search_sales_orders
  • cw_search_sales_stages
  • cw_search_schedule_entries
  • cw_search_tickets
  • cw_search_time_entries

Write 20 · Create, change, send or run things.

  • cw_add_adjustment_detail
  • cw_add_project_ticket_note
  • cw_add_ticket_note
  • cw_close_adjustment
  • cw_create_activity
  • cw_create_adjustment
  • cw_create_agreement_addition
  • cw_create_catalog_item
  • cw_create_company
  • cw_create_contact
  • cw_create_project
  • cw_create_schedule_entry
Show 8 more tools
  • cw_create_ticket
  • cw_create_time_entry
  • cw_update_agreement_addition
  • cw_update_catalog_item
  • cw_update_company
  • cw_update_contact
  • cw_update_ticket
  • cw_update_time_entry

Delete 5 · Delete, drop, revoke or wipe things.

  • cw_delete_time_entry
  • cw_update_contact_types
  • cw_update_invoice
  • cw_update_schedule_entry
  • cw_update_ticket_configurations

Not yet classified 1 · We could not tell from the name and description.

  • cw_test_connection

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • CW_MANAGE_CLIENT_ID
  • CW_MANAGE_PRIVATE_KEY
  • CW_MANAGE_PUBLIC_KEY

Other settings (environment variables or headers).

  • AUTH_MODE
  • CW_MANAGE_COMPANY_ID
  • CW_MANAGE_URL
  • LOG_LEVEL
  • MCP_TRANSPORT

Network hosts it talks to 8

  • api-au.myconnectwise.net · found in code
  • api-eu.myconnectwise.net · found in code
  • api-na.myconnectwise.net · found in code
  • cwm.yourcompany.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • login.microsoftonline.com · found in code
  • mcp.yourdomain.com · found in code

Tools (84)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • cw_add_adjustment_detail

    Add one line to an open inventory adjustment. quantityAdjusted is signed and applied to the current on-hand, so pass a negative number to remove stock: zeroing a bin holding 7 units means quantityAdjusted = -7. ConnectWise takes whole units only on this field. Both warehouseId and warehouseBinId are required by the API, not just the bin. Adding a line still moves no stock: nothing posts until cw_close_adjustment. For a serialised item, pass the exact serial numbers being adjusted in serialNumbers; ConnectWise stores them as one comma-joined string capped at 1000 characters, and a negative adju…

  • cw_add_project_ticket_note

    Add a note to a project ticket. Use internalAnalysisFlag for internal-only notes or resolutionFlag for resolution notes. Defaults to a plain discussion note. emailContactFlag, emailResourceFlag, and emailCcFlag are not note fields, are not sent, and never default to true. memberId is sent as member.id only when set.

  • cw_add_ticket_note

    Add a note to a service ticket. Use detailDescriptionFlag for a discussion note, internalAnalysisFlag for an internal-only note, or resolutionFlag for a resolution note. Defaults to a plain discussion note. Nothing is emailed unless processNotifications is true. emailContactFlag, emailResourceFlag, and emailCcFlag never default to true and are not sent: POST /service/tickets/{id}/notes (ServiceNote) does not have those fields (they belong to TimeEntry and to the ticket automaticEmail* fields). Sending them is what returns 400. A true flag only turns on processNotifications, unless you set proc…

  • cw_close_adjustment

    Post an inventory adjustment by setting closedFlag to true. THIS IS THE WRITE THAT MOVES STOCK: closing the adjustment applies every detail line to on-hand quantities and writes the matching general ledger entries. It is not reversible except by a counter-adjustment. ConnectWise will not let a closed adjustment be reopened, edited or deleted, so the only way back is a second adjustment posting the opposite quantities. Call cw_get_adjustment and check every line first, and confirm with the user before calling this.

  • cw_create_activity

    Create a new activity.

  • cw_create_adjustment

    Create an inventory adjustment header in ConnectWise Manage and return its ID. This writes the header only and moves no stock: add lines with cw_add_adjustment_detail, then post it with cw_close_adjustment. The open header stays open until someone deletes it in the ConnectWise UI. This server has no delete tool. Do not call cw_close_adjustment unless the user intends to post stock. ConnectWise has no 'summary' field on an adjustment: the free-text fields are reason (max 100 characters, which is what shows in the adjustment list) and notes (unbounded).

  • cw_create_agreement_addition

    Create a new addition (recurring line item) on an agreement (Manage POST /finance/agreements/{agreementId}/additions). Requires a catalog item (productId) and billCustomer. NOTE: field coverage here was verified against a community-maintained ConnectWise Manage type reference, not the official REST docs directly -- if Manage rejects the create with a validation error on a field not listed here, that field is real but missing from this tool's schema.

  • cw_create_catalog_item

    Create a new catalog item (product SKU) in ConnectWise. Surfaces the common MSP fields directly; use 'extraFields' for anything else supported by POST /procurement/catalog (e.g. manufacturerPartNumber, unitOfMeasure, ianCode, upc, minStockLevel).

  • cw_create_company

    Create a new company.

  • cw_create_contact

    Create a new contact. Communication type names vary per ConnectWise tenant (some have no type named "Email" or "Direct"), so the email and phone types are looked up from GET /company/communicationTypes (emailFlag / phoneFlag) unless you pass emailTypeId / emailTypeName / phoneTypeId / phoneTypeName. An id wins over a name; a name is matched case-insensitively and an unknown name returns the available types. Use cw_list_communication_types to see the ids.

  • cw_create_project

    Create a new project.

  • cw_create_schedule_entry

    Book resource time by creating a schedule entry against a ticket, activity or project ticket. This is the forward booking, not the record of work done: use cw_create_time_entry for that. The entry syncs to the member's Outlook calendar, so there is no need to book the same work in Outlook separately. memberId is required and never assumed, so confirm who the booking is for before calling. ConnectWise interprets dateStart and dateEnd as UTC (trailing 'Z'). Perth (AWST) is UTC+8 with no daylight saving, so 10:00 Perth is 02:00Z and a Perth time before 08:00 lands on the previous UTC date.

  • cw_create_ticket

    Create a new service ticket.

  • cw_create_time_entry

    Create a new time entry. ConnectWise ignores emailContactFlag, emailResourceFlag and emailCcFlag on create and copies the ticket's automaticEmailContactFlag, automaticEmailResourceFlag and automaticEmailCcFlag onto the new entry, so sending false alone does not stop the email. For ServiceTicket and ProjectTicket, this tool turns off each ticket flag whose entry flag is false (the default) for the instant of the create, then turns it back on. If it cannot read or turn off a flag, the entry is not created. Turning the flags back on is tried up to 3 times. If every try fails, the entry WAS create…

  • cw_delete_time_entry

    Delete a time entry (Manage DELETE /time/entries/{id}). Use this to remove a mistaken entry before it is billed. Manage rejects deletes of entries that are already billed.

Show 69 more tools
  • cw_get_activity

    Get a specific activity by ID.

  • cw_get_adjustment

    Get an inventory adjustment header together with every one of its detail lines. Use this to check an adjustment before posting it with cw_close_adjustment, and to read back the unitCost ConnectWise applied to each line. The header's closedFlag tells you whether it has already posted.

  • cw_get_agreement

    Get a specific finance agreement by ID.

  • cw_get_agreement_additions

    Get additions (line items) for a specific agreement.

  • cw_get_agreement_recap

    Get the billing recap for a specific agreement by agreement ID.

  • cw_get_catalog_item

    Get a specific catalog item by ID.

  • cw_get_company

    Get a specific company by ID.

  • cw_get_configuration

    Get a specific configuration item (asset/CI) by ID.

  • cw_get_contact

    Get a specific contact by ID.

  • cw_get_inventory_on_hand

    Report every catalog item holding non-zero stock, one row per warehouse bin. Negative on-hand is reported too, because a negative balance is exactly what an adjustment usually has to correct. ConnectWise exposes on-hand only per bin, so this walks every bin and pages each one fully, which makes a whole-instance scan slow: pass warehouseId or binIds to narrow it. Each row gives the catalog item ID, identifier and description, the warehouse and bin, the on-hand quantity, the unit cost and the extended value, plus any serial numbers held in that bin. Read the cost with care: the ConnectWise API e…

  • cw_get_invoice

    Get a specific invoice by ID.

  • cw_get_member

    Get a specific member by ID.

  • cw_get_opportunity

    Get a specific sales opportunity by ID.

  • cw_get_procurement_product

    Get a specific procurement product item by ID.

  • cw_get_project

    Get a specific project by ID.

  • cw_get_project_ticket

    Get a specific project ticket by ID.

  • cw_get_project_ticket_notes

    Get all notes on a project ticket, including notes from any child tickets.

  • cw_get_purchase_order

    Get a specific purchase order by ID.

  • cw_get_purchase_order_items

    Get the line items on a specific purchase order, including unit cost, extended cost, quantity received, and receipt status.

  • cw_get_sales_order

    Get a specific sales order by ID.

  • cw_get_sales_order_products

    Get the procurement product items on a specific sales order. Always scoped to the given order; any extra 'conditions' are ANDed with that scope.

  • cw_get_ticket

    Get a specific service ticket by ID.

  • cw_get_ticket_configurations

    Get configuration references associated with a service ticket, one page at a time (default: page 1, 25 results). Request additional pages as needed. Returns id, deviceIdentifier, and _info when provided by Manage; use cw_get_configuration for full configuration details.

  • cw_get_ticket_notes

    Get all notes/discussions on a service ticket, including notes from any child tickets.

  • cw_get_time_entry

    Get a specific time entry by ID.

  • cw_list_adjustment_types

    List inventory adjustment types in ConnectWise Manage. Every adjustment header names one, so call this before creating an adjustment. Each type carries an identifier, a name and an auditTrailFlag. The type is what tells ConnectWise which general ledger account the adjustment posts against, so pick it deliberately rather than taking the first row.

  • cw_list_boards

    List service boards in ConnectWise Manage.

  • cw_list_catalog_categories

    List product categories from the ConnectWise catalog.

  • cw_list_catalog_subcategories

    List product subcategories from the ConnectWise catalog.

  • cw_list_communication_types

    List the communication types configured in this ConnectWise tenant (GET /company/communicationTypes). Records include id, description, emailFlag, phoneFlag, faxFlag, and defaultFlag. Use the ids as emailTypeId / phoneTypeId on cw_create_contact, or as type { "id": <id> } in communicationItems on cw_update_contact.

  • cw_list_manufacturers

    List manufacturers referenced by catalog items.

  • cw_list_priorities

    List ticket priorities in ConnectWise Manage.

  • cw_list_schedule_statusesread-only

    List schedule statuses in ConnectWise Manage. Statuses are usually 'Tentative' and 'Firm', one of which is flagged as the instance default.

  • cw_list_schedule_typesread-only

    List schedule types in ConnectWise Manage. The type decides what kind of object the entry books against, so call this before creating an entry. Typical identifiers are 'S' for Service (a service ticket), 'P' for Project, 'C' for Sales and 'N' for Meeting.

  • cw_list_statuses

    List ticket statuses for a specific service board in ConnectWise Manage.

  • cw_list_warehouse_bins

    List warehouse bins in ConnectWise Manage. A bin is the location stock actually sits in, and every inventory adjustment line names one. Pass warehouseId to list only the bins of a single warehouse. The quantityOnHand on a bin is a rollup across every item in it, so use cw_get_inventory_on_hand for per-item stock.

  • cw_list_warehouses

    List inventory warehouses in ConnectWise Manage. A warehouse groups the bins that actually hold stock, so start here before reading on-hand quantities or building an adjustment. Each warehouse carries name, location, department, currency and the inactiveFlag / lockedFlag pair: a locked warehouse rejects adjustments.

  • cw_search_activities

    Search schedule activities in ConnectWise Manage.

  • cw_search_agreement_recaps

    Search agreement recaps — the billing rollup ConnectWise computes per agreement: starting, used, remaining, available and overrun amounts, unbilled periods, and the last and next invoice amount and date. Use this to answer agreement burn-down and overage questions without adding up additions by hand.

  • cw_search_agreements

    Search finance agreements (recurring revenue contracts) in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "cancelledFlag = false", "company/name = 'Acme'").

  • cw_search_catalog_items

    Search the ConnectWise product catalog. Use 'conditions' for CW query syntax (e.g. "identifier like '%SKU-%'" or "manufacturer/id=5").

  • cw_search_companies

    Search companies in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "name like '%Acme%'").

  • cw_search_configurations

    Search configuration items (assets/CIs) in ConnectWise Manage.

  • cw_search_contacts

    Search contacts in ConnectWise Manage. Parent fields go in conditions with double-quoted strings (e.g. firstName = "John" or company/id = 5). There is no contact field named name — use firstName and lastName (a bare name = "..." is rewritten to those). Contact type is a child collection: do not put types or types/name in conditions (Manage returns 400 ApiFindCondition). Filter type with typeName, typeId, or childConditions such as types/name = "Primary". Single quotes are accepted and sent as double quotes.

  • cw_search_invoices

    Search invoices in ConnectWise Manage.

  • cw_search_members

    Search members (technicians/users) in ConnectWise Manage.

  • cw_search_opportunities

    Search sales opportunities in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "status/name = '1. Open'", "closedFlag = false").

  • cw_search_opportunity_forecasts

    Search opportunity forecasts/revenue items for a specific opportunity.

  • cw_search_opportunity_notes

    Get notes on a specific sales opportunity.

  • cw_search_procurement_products

    Search procurement product items — catalog SKUs placed on a ticket, project, sales order or opportunity, with their own price, cost and margin. For the catalog SKU definitions themselves use cw_search_catalog_items instead. Use 'conditions' for CW query syntax (e.g. "company/id = 42", "invoice/id = 1001").

  • cw_search_project_tickets

    Search tickets under a project. Use projectId to filter by project, or conditions for CW query syntax.

  • cw_search_projects

    Search projects in ConnectWise Manage.

  • cw_search_purchase_orders

    Search purchase orders (the buy side) in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "closedFlag = false", "vendorCompany/name = 'Ingram'", "poDate > [2026-01-01T00:00:00Z]").

  • cw_search_sales_orders

    Search sales orders (the sell side) in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "status/name = 'Open'", "company/name = 'Acme'"). For purchase orders use cw_search_purchase_orders instead.

  • cw_search_sales_stages

    List sales pipeline stages in ConnectWise Manage.

  • cw_search_schedule_entriesread-only

    Search schedule entries (booked resource time) in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "member/id = 147 and type/id = 4"). Each entry carries objectId (the ticket, activity or project ticket it is booked against), member, dateStart, dateEnd, type, status, reminder, doneFlag and hours. ConnectWise interprets dateStart and dateEnd as UTC (trailing 'Z'). Perth (AWST) is UTC+8 with no daylight saving, so 10:00 Perth is 02:00Z and a Perth time before 08:00 lands on the previous UTC date.

  • cw_search_tickets

    Search service tickets in ConnectWise Manage. Use 'conditions' for CW query syntax (e.g. "status/name != 'Closed'" or "company/name = 'Acme'").

  • cw_search_time_entries

    Search time entries in ConnectWise Manage.

  • cw_test_connection

    Test the connection to ConnectWise Manage.

  • cw_update_agreement_addition

    Update an agreement addition (recurring line item) with JSON Patch (Manage PATCH /finance/agreements/{agreementId}/additions/{additionId}). Use this for seat-count reconciliation and similar corrections. Common paths: quantity, effectiveDate, cancelledDate, billCustomer ('Billable' | 'DoNotBill' | 'NoCharge'), description, invoiceDescription, unitPrice, unitCost. Set dryRun to preview the result without saving.

  • cw_update_catalog_item

    Update an existing catalog item using JSON Patch operations.

  • cw_update_company

    Update an existing company using JSON Patch operations.

  • cw_update_contact

    Update an existing contact with JSON Patch (Manage PATCH /company/contacts/{id}). Operations use the same shape as cw_update_ticket and cw_update_company: op (replace, add, or remove), path, and value. Add and replace require value. Common paths: firstName, lastName, title, inactiveFlag, site (value is { "id": <siteId> }), communicationItems (email and phone — replacing the array replaces every item, so include items to keep; each item is { "type": { "id": <communicationTypeId> }, "value": "...", "communicationType": "Email" } or communicationType "Phone". Communication type names vary per ten…

  • cw_update_contact_types

    Add or remove a contact type association (Manage POST or DELETE /company/contacts/{id}/typeAssociations). Use this instead of cw_update_contact when tagging a contact, for example as Decision Maker after they authorize someone in a ticket note. action "add" takes typeName or typeId. typeName is resolved with GET /company/contacts/types. Adding a type the contact already has returns the existing association and does not create a duplicate. action "remove" takes associationId, or typeName / typeId to find the association and delete it.

  • cw_update_invoicecan change or delete data

    Update a single finance invoice with JSON Patch (Manage PATCH /finance/invoices/{id}); returns the updated invoice (same shape as cw_get_invoice). Allowed paths (with or without leading slash): status/id (numeric id) or status ({ id }); attention, dueDate, date, reference, customerPO, internalNotes; billToCompany and billingSite (as { id }) or their /id subpaths (billToSite is accepted as an alias for billingSite). Manage invoices have no billToContact field; use attention for the contact name. Any other path (custom fields, payment fields, etc.) is rejected before Manage is called. Scout bill…

  • cw_update_schedule_entrycan change or delete data

    Update an existing schedule entry using JSON Patch operations. Use this to move a booking, change its status, or mark it done. There is deliberately no delete tool: removing booked time stays a manual action in ConnectWise. ConnectWise interprets dateStart and dateEnd as UTC (trailing 'Z'). Perth (AWST) is UTC+8 with no daylight saving, so 10:00 Perth is 02:00Z and a Perth time before 08:00 lands on the previous UTC date.

  • cw_update_ticket

    Update an existing service ticket using JSON Patch operations.

  • cw_update_ticket_configurations

    Add or remove configuration associations on a service ticket. Operations run sequentially in the supplied order, including repeated configuration IDs. Removing an association leaves the configuration object intact. Continues after individual failures without rollback or automatic retries; returns every operation's outcome and sets isError if any fail. Duplicate-add and missing-association errors are reported as failures.

  • cw_update_time_entry

    Update a time entry with JSON Patch (Manage PATCH /time/entries/{id}). Use this to correct a mistaken entry, including actualHours on a metered agreement (those hours round to 0.25). Paths are field names such as actualHours, notes, internalNotes, timeStart, timeEnd, or billableOption. Billed entries may be rejected by Manage.

Signals

Stars
28
Forks
44
Open issues
1
Contributors
14
Last commit
Oct 22, 2026 (6 days ago)
Last release
Oct 22, 2026 (6 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.wyre-technology/connectwise-manage-mcp
Version
1.8.6
Auth
API key
Packages
oci ghcr.io/wyre-technology/connectwise-manage-mcp:v1.8.6
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from wyre-technology

Cite this page

ConnectWise Manage MCP server. Agent Mart. https://agentmart.dev/connectors/wyre-technology-connectwise-manage-mcp (last updated 2026-10-24)