{
  "markdown": "# ConnectWise Manage MCP Server\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)\n\n**Let your AI assistant work directly with ConnectWise Manage.** Search tickets, log time, look up companies and contacts, manage projects — through natural conversation instead of clicking through the CWM interface.\n\nThis is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that gives Claude (or any MCP-compatible AI) 51 tools covering the daily operations ConnectWise Manage shops depend on. Works with both **cloud-hosted and self-hosted** CWM instances — just point it at your server.\n\n> **Part of the [MSP Claude Plugins](https://github.com/wyre-technology/msp-claude-plugins) ecosystem** — a growing suite of AI integrations for the MSP stack including [Autotask](https://github.com/wyre-technology/autotask-mcp), [Datto RMM](https://github.com/wyre-technology/datto-rmm-mcp), [IT Glue](https://github.com/wyre-technology/itglue-mcp), [HaloPSA](https://github.com/wyre-technology/halopsa-mcp), [NinjaOne](https://github.com/wyre-technology/ninjaone-mcp), [Huntress](https://github.com/wyre-technology/huntress-mcp), and more. Built by MSPs, for MSPs.\n\n## One-Click Deployment\n\n[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/WYRE-AI/connectwise-manage-mcp/tree/main)\n\n[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/WYRE-AI/connectwise-manage-mcp)\n\n> **Note on registry auth:** This server depends only on public npm packages, so the Cloudflare and DigitalOcean cloud builders install its dependencies anonymously — no token is required for one-click deploy. (If a future release adds a private `@wyre-ai/*` dependency, you would supply a GitHub PAT with `read:packages` as a build variable — `NODE_AUTH_TOKEN` for Cloudflare Workers, a build-time `GITHUB_TOKEN` secret for DigitalOcean.)\n>\n> **Installing the published package:** The released package is published to the [GitHub Packages](https://github.com/WYRE-AI/connectwise-manage-mcp/pkgs/npm/connectwise-manage-mcp) npm registry, which requires authentication on every install (even for public packages). To install it, authenticate npm to `npm.pkg.github.com` with a GitHub PAT that has `read:packages`:\n>\n> ```bash\n> export NODE_AUTH_TOKEN=$(gh auth token)\n> npm install @wyre-ai/connectwise-manage-mcp\n> ```\n\nFor deploying to **Azure Container Apps** with Entra ID OAuth 2.1, see [AZURE_ACA_DEPLOYMENT.md](AZURE_ACA_DEPLOYMENT.md).\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `CW_MANAGE_COMPANY_ID` | Yes | Your ConnectWise company identifier |\n| `CW_MANAGE_PUBLIC_KEY` | Yes | API member public key |\n| `CW_MANAGE_PRIVATE_KEY` | Yes | API member private key |\n| `CW_MANAGE_CLIENT_ID` | Yes | Client ID from [ConnectWise Developer Portal](https://developer.connectwise.com/) |\n| `CW_MANAGE_URL` | No | API base URL (see below) |\n| `CW_MANAGE_REJECT_UNAUTHORIZED` | No | Set to `false` for self-signed certs (default: `true`) |\n| `MCP_TRANSPORT` | No | `stdio` (default) or `http` |\n| `MCP_HTTP_PORT` | No | HTTP port (default: `8080`) |\n| `AUTH_MODE` | No | `env` (default) or `gateway` for header-based auth |\n\n### API Base URL (`CW_MANAGE_URL`)\n\n| Instance Type | URL |\n|---------------|-----|\n| Cloud (North America) | `https://api-na.myconnectwise.net` (default) |\n| Cloud (Europe) | `https://api-eu.myconnectwise.net` |\n| Cloud (Australia) | `https://api-au.myconnectwise.net` |\n| **Self-hosted** | `https://cwm.yourcompany.com` |\n\nFor self-hosted instances, set `CW_MANAGE_URL` to your server's base URL. The server automatically appends `/v4_6_release/apis/3.0` unless the URL already contains that path.\n\nIf your self-hosted instance uses a self-signed certificate, also set `CW_MANAGE_REJECT_UNAUTHORIZED=false`.\n\n### Getting Your API Keys\n\n1. Log in to your ConnectWise Manage instance\n2. Navigate to **System > Members > API Members**\n3. Create a new API member with appropriate permissions\n4. Generate API keys for the member\n5. Get your Client ID from the [ConnectWise Developer Portal](https://developer.connectwise.com/)\n\n## Available Tools\n\n### Interactive Ticket Card (MCP Apps)\n\n`cw_get_ticket` renders as an interactive card in MCP Apps hosts\n(Claude Desktop/web) with an in-card \"Add note\" round-trip via\n`cw_add_ticket_note` that always posts internal-only (`internalAnalysisFlag`)\nnotes; plain-JSON behavior is unchanged in other hosts. The card is neutral by\ndefault and brandable via `window.__BRAND__` injection or `MCP_BRAND_*` env\nvars (`MCP_BRAND_NAME`, `MCP_BRAND_LOGO_URL`, `MCP_BRAND_PRIMARY_COLOR`,\n`MCP_BRAND_ACCENT_COLOR`, `MCP_BRAND_BG`, `MCP_BRAND_TEXT`) — no rebuild\nneeded.\n\n### Tickets\n- `cw_search_tickets` — Search service tickets with conditions\n- `cw_get_ticket` — Get a ticket by ID\n- `cw_create_ticket` — Create a new service ticket\n- `cw_update_ticket` — Update a ticket (JSON Patch)\n- `cw_get_ticket_notes` — Get all notes on a ticket (including child ticket notes)\n- `cw_add_ticket_note` — Add a note to a ticket (discussion, internal, or resolution)\n\n### Companies\n- `cw_search_companies` — Search companies\n- `cw_get_company` — Get a company by ID\n- `cw_create_company` — Create a new company\n- `cw_update_company` — Update a company (JSON Patch)\n\n### Contacts\n- `cw_search_contacts` — Search contacts\n- `cw_get_contact` — Get a contact by ID\n- `cw_create_contact` — Create a new contact\n\n### Projects\n- `cw_search_projects` — Search projects\n- `cw_get_project` — Get a project by ID\n- `cw_create_project` — Create a new project\n- `cw_search_project_tickets` — Search tickets under a project\n- `cw_get_project_ticket` — Get a specific project ticket by ID\n- `cw_get_project_ticket_notes` — Get all notes on a project ticket (including child ticket notes)\n- `cw_add_project_ticket_note` — Add a note to a project ticket (discussion, internal, or resolution)\n\n### Time Entries\n- `cw_search_time_entries` — Search time entries\n- `cw_get_time_entry` — Get a time entry by ID\n- `cw_create_time_entry` — Create a new time entry\n\n### Members\n- `cw_search_members` — Search members/technicians\n- `cw_get_member` — Get a member by ID\n\n### Configuration Items\n- `cw_search_configurations` — Search configuration items (assets)\n- `cw_get_configuration` — Get a configuration item by ID\n\n### Service Reference Data\n- `cw_list_boards` — List service boards\n- `cw_list_priorities` — List ticket priorities\n- `cw_list_statuses` — List statuses for a board\n\n### Activities\n- `cw_search_activities` — Search activities\n- `cw_get_activity` — Get an activity by ID\n- `cw_create_activity` — Create a new activity\n\n### Agreements\n- `cw_search_agreements` — Search agreements\n- `cw_get_agreement` — Get an agreement by ID\n- `cw_get_agreement_additions` — Get additions (line items) on an agreement\n\n### Invoices\n- `cw_search_invoices` — Search invoices\n- `cw_get_invoice` — Get an invoice by ID\n\n### Opportunities\n- `cw_search_opportunities` — Search opportunities\n- `cw_get_opportunity` — Get an opportunity by ID\n- `cw_search_opportunity_forecasts` — Search opportunity forecast lines\n- `cw_search_opportunity_notes` — Search notes on an opportunity\n- `cw_search_sales_stages` — List sales pipeline stages\n\n### Catalog (Products)\n- `cw_search_catalog_items` — Search product catalog items\n- `cw_get_catalog_item` — Get a catalog item by ID\n- `cw_create_catalog_item` — Create a new catalog item\n- `cw_update_catalog_item` — Update a catalog item (JSON Patch)\n- `cw_list_catalog_categories` — List catalog categories\n- `cw_list_catalog_subcategories` — List catalog subcategories\n- `cw_list_manufacturers` — List manufacturers\n\n### Health\n- `cw_test_connection` — Test connection (hits `/system/info`)\n\n## Usage\n\n### With Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"connectwise-manage\": {\n      \"command\": \"npx\",\n      \"args\": [\"@wyre-ai/connectwise-manage-mcp\"],\n      \"env\": {\n        \"CW_MANAGE_COMPANY_ID\": \"your-company-id\",\n        \"CW_MANAGE_PUBLIC_KEY\": \"your-public-key\",\n        \"CW_MANAGE_PRIVATE_KEY\": \"your-private-key\",\n        \"CW_MANAGE_CLIENT_ID\": \"your-client-id\"\n      }\n    }\n  }\n}\n```\n\nFor a self-hosted instance:\n\n```json\n{\n  \"mcpServers\": {\n    \"connectwise-manage\": {\n      \"command\": \"npx\",\n      \"args\": [\"@wyre-ai/connectwise-manage-mcp\"],\n      \"env\": {\n        \"CW_MANAGE_URL\": \"https://cwm.yourcompany.com\",\n        \"CW_MANAGE_COMPANY_ID\": \"your-company-id\",\n        \"CW_MANAGE_PUBLIC_KEY\": \"your-public-key\",\n        \"CW_MANAGE_PRIVATE_KEY\": \"your-private-key\",\n        \"CW_MANAGE_CLIENT_ID\": \"your-client-id\",\n        \"CW_MANAGE_REJECT_UNAUTHORIZED\": \"false\"\n      }\n    }\n  }\n}\n```\n\n### With Docker\n\n```bash\ndocker compose up -d\n```\n\n### HTTP Transport (Gateway Mode)\n\nRun with HTTP transport for multi-tenant gateway deployments:\n\n```bash\nMCP_TRANSPORT=http AUTH_MODE=gateway node dist/index.js\n```\n\nPass credentials per-request via headers: `X-CW-Company-Id`, `X-CW-Public-Key`, `X-CW-Private-Key`, `X-CW-Client-Id`, and optionally `X-CW-URL`.\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Run in development\nnpm run dev\n\n# Type check\nnpm run typecheck\n\n# Run tests\nnpm test\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nApache-2.0\n\n---\n\nBuilt by [WYRE Technology](https://github.com/wyre-technology) — part of the [MSP Claude Plugins](https://github.com/wyre-technology/msp-claude-plugins) ecosystem\n",
  "bytes": 9979,
  "sha": "ab3fd689f24e0f132db1b60922dc170942ffe91712e70bb087b02f5719808dc7",
  "repo_slug": "wyre-technology/connectwise-manage-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_wyre_technology_connectwise_ma_ba37fc9e/readme"
}