ConnectWise Live MCP Server
FastMCP HTTP server wrapping the ConnectWise Manage REST API. 45 tools across Service, Operations, and Finance domains. Finance tools are gated behind CW_TIER=leadership so you can expose a restricted manifest to non-finance users.
Installation
Via uvx (recommended — no clone, no venv):
uvx connectwise-mcp
Set credentials via environment variables or a .env file in your working directory.
Via pip:
pip install connectwise-mcp
connectwise-mcp
From source:
git clone https://github.com/Mfrostbutter/connectwise-mcp
cd connectwise-mcp
cp .env.example .env
# fill in your CW_* credentials
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python3 server.py
# verify: curl http://localhost:8085/health
Transport modes
| Mode | How to set | Best for |
|---|---|---|
http (default) |
MCP_TRANSPORT=http |
Persistent server shared across sessions or team members |
stdio |
MCP_TRANSPORT=stdio |
Cursor, VS Code, Zed, Continue, or any stdio-based MCP client |
In stdio mode the server is spawned per-session by the client — no port, no persistent process.
Environment variables
| Variable | Required | Default | Notes |
|---|---|---|---|
CW_BASE_URL |
Yes | — | e.g. https://na.myconnectwise.net/v4_6_release/apis/3.0 |
CW_COMPANY_ID |
Yes | — | Your CW company ID |
CW_PUBLIC_KEY |
Yes | — | CW API public key |
CW_PRIVATE_KEY |
Yes | — | CW API private key |
CW_CLIENT_ID |
Yes | — | CW API client ID (from developer.connectwise.com) |
CW_TIER |
No | leadership |
leadership (all 31 tools) or tech (21 tools, no finance) |
MCP_AUTH_TOKEN |
No | — | Bearer token for MCP client auth; omit to run without auth |
CW_LIVE_MCP_PORT |
No | 8085 |
HTTP listen port |
Tools
Service (12): get_ticket, search_tickets, get_open_tickets, add_ticket_note, create_ticket, update_ticket_status, get_boards, get_board_statuses, get_priorities, get_ticket_time, search_cw_kb_articles, get_ticket_count
Operations (19): get_company, search_companies, get_contacts, get_configurations, get_configuration, get_projects, get_project_tickets, get_time_entries, log_time, get_members, get_company_types, get_company_statuses, get_configuration_statuses, get_work_types, get_project_statuses, create_project, update_project, add_project_phase, add_project_note
Finance (14, leadership only): get_invoices, get_invoice, get_agreements, get_agreement, get_agreement_types, create_agreement, update_agreement, add_agreement_addition, get_agreement_additions, get_agreement_count_by_type, get_client_mrr, get_aging_invoices, get_opportunities, create_opportunity
Client configuration
HTTP mode — Claude Desktop, Claude Code (server runs persistently):
claude_desktop_config.json / .claude/settings.json:
{
"mcpServers": {
"connectwise": {
"type": "http",
"url": "http://localhost:8085/mcp",
"headers": { "Authorization": "Bearer your_token_here" }
}
}
}
stdio mode — Cursor, VS Code, Zed, Continue, or any stdio client (server spawned per-session):
{
"mcpServers": {
"connectwise": {
"command": "uvx",
"args": ["connectwise-mcp"],
"env": {
"CW_BASE_URL": "https://na.myconnectwise.net/v4_6_release/apis/3.0",
"CW_COMPANY_ID": "yourcompanyid",
"CW_PUBLIC_KEY": "your_public_key",
"CW_PRIVATE_KEY": "your_private_key",
"CW_CLIENT_ID": "your_client_id",
"MCP_TRANSPORT": "stdio"
}
}
}
}
Customization
_JUNK_PRODUCTS (top of server.py): lowercase product identifiers excluded from MRR calculations. Add your own setup fees, shipping line items, discount codes, and non-recurring labor entries here so they don't inflate MRR/ARR figures.
Tier gating: set CW_TIER=tech to expose a 21-tool manifest with no finance visibility. Useful for shared environments or tech-facing deployments.
Running as a service
[Unit]
Description=ConnectWise Live MCP
After=network.target
[Service]
User=mcp
WorkingDirectory=/opt/connectwise-mcp
EnvironmentFile=/opt/connectwise-mcp/.env
ExecStart=/opt/connectwise-mcp/venv/bin/python3 server.py
Restart=always
[Install]
WantedBy=multi-user.target
ConnectWise API credentials
Generate API keys in ConnectWise Manage: System > Members > [your member] > API Keys. Get your Client ID from developer.connectwise.com.
License
MIT
Metadata
Release files for connectwise-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| connectwise_mcp-0.1.0.tar.gz | 20.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| connectwise_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.3 kB
Release files / connectwise_mcp-0.1.0.tar.gz
| Download URL | connectwise_mcp-0.1.0.tar.gz |
|---|---|
| Size | 20.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3d93e8399334931bef2252d092bb493b5696882acc8482b8e7a6d1415d5e48f6
|
|
BLAKE2b-256 checksum How to use checksums |
6470645ac6f873af91fdbdeb5a838c3504e5cc3d7caa03c8eaef42562bee1051
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.5 cpython/3.13.11 HTTPX/0.28.1
|
Release files / connectwise_mcp-0.1.0-py3-none-any.whl
| Download URL | connectwise_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 21.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c7d276c23db614e8aef313da672b9f85b11b430959425ba4d1d7b1a87cba4af
|
|
BLAKE2b-256 checksum How to use checksums |
86caaacaece57c316cd68ecb47f1d05347e0bc111fc3e607a71d6b0e10201e21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.5 cpython/3.13.11 HTTPX/0.28.1
|