{"id":44880648,"url":"https://github.com/wyre-technology/connectwise-manage-mcp","last_synced_at":"2026-04-23T00:01:42.334Z","repository":{"id":338314340,"uuid":"1157269112","full_name":"wyre-technology/connectwise-manage-mcp","owner":"wyre-technology","description":"MCP server for ConnectWise Manage (PSA) — tickets, companies, contacts, projects, and time entry tools for AI assistants","archived":false,"fork":false,"pushed_at":"2026-04-15T16:54:15.000Z","size":189,"stargazers_count":2,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-15T18:34:47.048Z","etag":null,"topics":["ai-tools","claude","connectwise-manage","mcp","mcp-server","model-context-protocol","msp","typescript","wyre-technology"],"latest_commit_sha":null,"homepage":"https://mcp.wyretechnology.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wyre-technology.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-13T16:18:48.000Z","updated_at":"2026-04-15T16:52:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wyre-technology/connectwise-manage-mcp","commit_stats":null,"previous_names":["wyre-technology/connectwise-manage-mcp"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/wyre-technology/connectwise-manage-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wyre-technology%2Fconnectwise-manage-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wyre-technology%2Fconnectwise-manage-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wyre-technology%2Fconnectwise-manage-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wyre-technology%2Fconnectwise-manage-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wyre-technology","download_url":"https://codeload.github.com/wyre-technology/connectwise-manage-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wyre-technology%2Fconnectwise-manage-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32159962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"ssl_error","status_checked_at":"2026-04-22T17:06:19.037Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-tools","claude","connectwise-manage","mcp","mcp-server","model-context-protocol","msp","typescript","wyre-technology"],"created_at":"2026-02-17T16:04:39.866Z","updated_at":"2026-04-23T00:01:42.312Z","avatar_url":"https://github.com/wyre-technology.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 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) 34 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\u003e **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-technology/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-technology/connectwise-manage-mcp)\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 \u003e Members \u003e 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### 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### 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-technology/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-technology/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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwyre-technology%2Fconnectwise-manage-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwyre-technology%2Fconnectwise-manage-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwyre-technology%2Fconnectwise-manage-mcp/lists"}