# ConnectWise Manage

This MCP server equips AI assistants with 84 tools for ConnectWise Manage PSA. Search tickets, log time, and pull client records directly inside your workspace.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 28
- Author: WYRE-AI
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/WYRE-AI/connectwise-manage-mcp
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/connectwise-manage

## What it does

The server links your coding agent to ConnectWise Manage PSA using the Model Context Protocol. It exposes 84 tools for handling ticket queues, recording billable time, querying contacts, and checking project statuses. When accessed in hosts supporting interactive cards, `cw_get_ticket` outputs an interactive interface with an in-card button for appending internal notes via `cw_add_ticket_note`.

Both cloud instances and self-hosted deployments are supported. For on-premises servers, the runtime appends the necessary `/v4_6_release/apis/3.0` path automatically if omitted from `CW_MANAGE_URL`. You can disable TLS certificate verification by setting `CW_MANAGE_REJECT_UNAUTHORIZED=false` when using custom certificates.

Running via standard I/O requires Docker or Node.js 20.0.0 or higher. For HTTP mode, omitting `CONDUIT_S2S_SECRET` forces the server to exit immediately with an error, because each request must pass HMAC-SHA256 timestamp validation via `X-Gateway-S2S`.

## Requirements
- Needs: Docker
- Environment variables: `CW_MANAGE_COMPANY_ID`, `CW_MANAGE_PUBLIC_KEY`, `CW_MANAGE_PRIVATE_KEY`, `CW_MANAGE_CLIENT_ID`, `CW_MANAGE_URL`, `MCP_TRANSPORT`, `AUTH_MODE`, `LOG_LEVEL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env CW_MANAGE_COMPANY_ID=<CW_MANAGE_COMPANY_ID> --env CW_MANAGE_PUBLIC_KEY=<CW_MANAGE_PUBLIC_KEY> --env CW_MANAGE_PRIVATE_KEY=<CW_MANAGE_PRIVATE_KEY> --env CW_MANAGE_CLIENT_ID=<CW_MANAGE_CLIENT_ID> --env CW_MANAGE_URL=<CW_MANAGE_URL> --transport stdio connectwise-manage -- docker run -i --rm -e CW_MANAGE_COMPANY_ID -e CW_MANAGE_PUBLIC_KEY -e CW_MANAGE_PRIVATE_KEY -e CW_MANAGE_CLIENT_ID -e CW_MANAGE_URL ghcr.io/wyre-ai/connectwise-manage-mcp:v1.15.11
```
Replace <…> with your own values. 3 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add connectwise-manage --env CW_MANAGE_COMPANY_ID=<CW_MANAGE_COMPANY_ID> --env CW_MANAGE_PUBLIC_KEY=<CW_MANAGE_PUBLIC_KEY> --env CW_MANAGE_PRIVATE_KEY=<CW_MANAGE_PRIVATE_KEY> --env CW_MANAGE_CLIENT_ID=<CW_MANAGE_CLIENT_ID> --env CW_MANAGE_URL=<CW_MANAGE_URL> -- docker run -i --rm -e CW_MANAGE_COMPANY_ID -e CW_MANAGE_PUBLIC_KEY -e CW_MANAGE_PRIVATE_KEY -e CW_MANAGE_CLIENT_ID -e CW_MANAGE_URL ghcr.io/wyre-ai/connectwise-manage-mcp:v1.15.11
```
Replace <…> with your own values. 3 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "connectwise-manage": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "CW_MANAGE_COMPANY_ID",
                "-e",
                "CW_MANAGE_PUBLIC_KEY",
                "-e",
                "CW_MANAGE_PRIVATE_KEY",
                "-e",
                "CW_MANAGE_CLIENT_ID",
                "-e",
                "CW_MANAGE_URL",
                "ghcr.io/wyre-ai/connectwise-manage-mcp:v1.15.11"
            ],
            "env": {
                "CW_MANAGE_COMPANY_ID": "<CW_MANAGE_COMPANY_ID>",
                "CW_MANAGE_PUBLIC_KEY": "<CW_MANAGE_PUBLIC_KEY>",
                "CW_MANAGE_PRIVATE_KEY": "<CW_MANAGE_PRIVATE_KEY>",
                "CW_MANAGE_CLIENT_ID": "<CW_MANAGE_CLIENT_ID>",
                "CW_MANAGE_URL": "<CW_MANAGE_URL>"
            }
        }
    }
}
```
Replace <…> with your own values. 3 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "connectwise-manage": {
            "type": "stdio",
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "CW_MANAGE_COMPANY_ID",
                "-e",
                "CW_MANAGE_PUBLIC_KEY",
                "-e",
                "CW_MANAGE_PRIVATE_KEY",
                "-e",
                "CW_MANAGE_CLIENT_ID",
                "-e",
                "CW_MANAGE_URL",
                "ghcr.io/wyre-ai/connectwise-manage-mcp:v1.15.11"
            ],
            "env": {
                "CW_MANAGE_COMPANY_ID": "<CW_MANAGE_COMPANY_ID>",
                "CW_MANAGE_PUBLIC_KEY": "<CW_MANAGE_PUBLIC_KEY>",
                "CW_MANAGE_PRIVATE_KEY": "<CW_MANAGE_PRIVATE_KEY>",
                "CW_MANAGE_CLIENT_ID": "<CW_MANAGE_CLIENT_ID>",
                "CW_MANAGE_URL": "<CW_MANAGE_URL>"
            }
        }
    }
}
```
Replace <…> with your own values. 3 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e CW_MANAGE_COMPANY_ID=<CW_MANAGE_COMPANY_ID> -e CW_MANAGE_PUBLIC_KEY=<CW_MANAGE_PUBLIC_KEY> -e CW_MANAGE_PRIVATE_KEY=<CW_MANAGE_PRIVATE_KEY> -e CW_MANAGE_CLIENT_ID=<CW_MANAGE_CLIENT_ID> -e CW_MANAGE_URL=<CW_MANAGE_URL> connectwise-manage docker run -i --rm -e CW_MANAGE_COMPANY_ID -e CW_MANAGE_PUBLIC_KEY -e CW_MANAGE_PRIVATE_KEY -e CW_MANAGE_CLIENT_ID -e CW_MANAGE_URL ghcr.io/wyre-ai/connectwise-manage-mcp:v1.15.11
```
Replace <…> with your own values. 3 more environment variables are in the server README

## When to use it
- Record time entries against tickets using plain text prompts
- Retrieve client details and active service tickets without the CWM interface
- Post internal analysis notes onto tickets via interactive UI cards
- Connect self-hosted ConnectWise Manage instances with self-signed SSL certs

## Example prompts
- List open service tickets for Acme Corp sorted by priority
- Log 30 minutes on ticket #5102 describing the firewall rule changes
- Fetch project status and assigned resources for the cloud migration ticket

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44874
- [screenpipe](https://affpapa.org/en/nevibecode/mcp/screenpipe.md) — MCP server · ★ 22053
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12791
- [kaneo](https://affpapa.org/en/nevibecode/mcp/kaneo.md) — MCP server · ★ 9602
- [Mindwtr](https://affpapa.org/en/nevibecode/mcp/mindwtr.md) — MCP server · ★ 2318
- [Azure DevOps (ADO)](https://affpapa.org/en/nevibecode/mcp/azure-devops-ado.md) — MCP server · ★ 2067

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
