Skip to main content

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)

Source distribution for connectwise-mcp 0.1.0
File Size Uploaded
connectwise_mcp-0.1.0.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for connectwise-mcp 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page