connectwise-command-mcp

ConnectWise Command MCP server — exposes the ConnectWise Command (Continuum) ITSupport247 Reporting API as MCP tools.

Naming note: app.mspbots.ai calls this integration "ConnectWise Command (continuum)" (sys_integration.subject_code = CONTINUUM). ConnectWise acquired Continuum and rebranded its RMM product as "ConnectWise Command"; the underlying API is still hosted on the legacy ITSupport247 domain (itsupport247.net) and documented as the "Reporting API". This server wraps that Reporting API only — it is unrelated to ConnectWise Manage (PSA) or ConnectWise Automate.

MSPbots Connector

The MCP Gateway built for MSPs: visible, controlled, and your data stays where it belongs.

Get started at connect.mspbots.ai →

MSPbots Connector gives your AI clients one MCP URL to reach your entire MSP stack (RMM, PSA, documentation, security, finance), and gives you control over who can call which tool and a record of everything that was called.

Hosted service: connect.mspbots.ai · Free to use.

Why Connector

MSPbots Connector

Visible Every tool call is logged: who, which vendor, when. Usage dashboard, CSV export, SIEM streaming.
Controlled Role-based, per-tool allowlist. Deny by default.
Protected Credentials encrypted per record. AI clients never see your vendor passwords or tokens.
MSP-native Built for the MSP stack only: RMM, PSA, documentation, security, finance.

Quick start

  1. Sign up at connect.mspbots.ai.
  2. Connect your vendors. Pick from 150+ connectors and authorize each one on the vendor's own page, or bring your own API keys. No extra vendor accounts needed.
  3. Set access. Create roles and decide which tools each role may call. Nothing is allowed until you allow it.
  4. Add your MCP URL to your AI client. Copy the URL from your Connector dashboard into Claude, ChatGPT, Cursor, VS Code, Gemini, Codex, or any MCP-capable client.
  5. Ask your AI to do real work, and watch every call appear in the audit log.

Features

Unified gateway

  • One MCP URL for all your AI clients
  • 150+ connectors across the MSP stack
  • Custom MCP servers supported, free
  • Authorization happens on each vendor's own page; the AI never sees passwords or tokens
  • Bring your own credentials: use the vendor API keys you already have
  • Multiple accounts per app; connect once, reuse across AI clients
  • Tool search: finds the right action for the task
  • One sign-in; vendor credentials are injected behind the scenes and OAuth tokens refresh automatically

Visibility

  • Audit log for every tool call (who, which vendor, when)
  • Usage dashboard: call volume, top vendors, error rate, per-user activity
  • Export audit logs to CSV, or stream to Loki, Graylog, or LogScale (SIEM)
  • Optional recording of tool arguments and result summaries (off by default, enabled per organization)

Control

  • Per-role, per-tool allowlist, deny by default
  • owner / admin / member roles
  • SCIM provisioning with Entra ID, Okta, JumpCloud, and Google Workspace

Security

  • Credentials encrypted one record at a time (AES-256-GCM, per-record key)
  • AI clients authenticate with OAuth 2.1 + PKCE
  • Vendor responses are scanned for prompt-injection patterns and returned as structured data. This is one layer of defense, not a guarantee against every attack.
  • Static egress IP for customer firewall and API allowlisting

Pricing

Free.

Links: connect.mspbots.ai · mspbots.ai

Overview

This server implements the Model Context Protocol (Streamable HTTP/SSE transport) and wraps every resource in the official "Reporting API REST Resources" reference for ConnectWise Command / Continuum. It follows the MSPbots Vendor MCP Service SOP: stateless, no stored credentials, per-request header authentication.

The underlying API authenticates via HTTP Basic Auth (blank username, API key as password) and returns JSON. This server never stores the key — the caller passes it per-request via a header. All request/response field names below are transcribed verbatim from the official reference doc, not guessed.

Quick Start

Docker (recommended)

docker compose up --build

The server starts on http://localhost:8080.

Local (uv)

uv sync
python -m connectwise_command_mcp

Health Check

curl http://localhost:8080/health
# {"status": "ok"}

No token is required for the health endpoint.

Authentication

Every request to /mcp must include the following HTTP header:

Header Type Required Default Allowed values Description Example
X-ConnectWise-Command-Api-Key string Required None None (free text) ConnectWise Command (Continuum) Reporting API key, generated in the ITSupport247 portal under Admin > Integration > Reporting API > Regenerate Key. On receipt the server converts it to HTTP Basic Auth (empty username, the key as the password) and sends it to the upstream API, without storing anything. X-ConnectWise-Command-Api-Key: <your_reporting_api_key>

Internally, this server encodes the key as:

Authorization: Basic base64(":" + api_key)

Unlike some other RMM vendors (e.g. N-able), ConnectWise Command's Reporting API hosts are fixed public endpoints, not per-tenant — there is no "URL" field/header to configure, matching the single "API Key" field on the app.mspbots.ai integration form. Missing X-ConnectWise-Command-Api-Key returns 401 Unauthorized.

Environment Variables

Variable Default Description
MCP_HTTP_PORT 8080 Listening port
MCP_HTTP_HOST 0.0.0.0 Listening host
CONNECTWISE_COMMAND_LEGACY_BASE_URL https://itsapi.itsupport247.net/reportingapi/ReportingAPIService.svc/json Legacy report endpoints (POST)
CONNECTWISE_COMMAND_SITES_BASE_URL https://api.itsupport247.net Sites/Devices endpoints (GET)

MCP Endpoint

POST http://localhost:8080/mcp

Connect your MCP client with:

  • Transport: http (Streamable HTTP / SSE)
  • Header: X-ConnectWise-Command-Api-Key: <api_key>

Tool List

18 tools. Trimmed from an original 41-tool full-API build (2026-08-04) down to 21 tools matching MSPbots' actually-configured 19 endpoints, then a further 2026-08-26 trim removed 3 more:

  • connectwise_command_get_patch_summary_by_resource and connectwise_command_get_patch_summary_by_state — an intent-matching test pass found their descriptions were near-duplicates of each other ("Get [total] patch counts by state... [per device]", differing only by a few trailing words), a real misfire risk since a mixup silently swaps a per-device breakdown for a site-wide aggregate on the same underlying data. connectwise_command_get_patch_summary_by_severity and connectwise_command_get_missing_patches still cover patch reporting without that ambiguity.
  • connectwise_command_get_warranty_details — the same test pass found it doesn't take a device/machine filter at all (unlike its siblings), always returning every device's warranty info for the whole site; a caller asking about "this device's warranty" gets no argument to scope to just that device and has to filter the returned list itself. Removed rather than just documenting the gap — connectwise_command_get_expiring_warranties and connectwise_command_get_warranty_summary still cover warranty reporting.

If a removed tool is needed later, the official "Reporting API REST Resources" doc (linked below) still documents it and it can be re-added; git history has every removed tool's implementation verbatim.

Everything else from the original 41-tool build — Performance (7), Availability (3), Recover for Continuity/Backup (4), and 6 of 7 Misc tools (noncompliant mobile devices, OS summary, service requests by month/week, SNMP devices, work summary) — was removed on 2026-08-04 as unused by MSPbots.

Most kept tools take site_code (get one from connectwise_command_get_sites first) plus month/year (int); several also take resource_type ("desktop" or "server", per-resource restrictions noted where the doc fixes it to one value).

Sites, Devices & Summary

Tool Description Parameters
connectwise_command_get_sites List all active sites visible to this API key None
connectwise_command_get_devices List the devices under a site, optionally targeting a single device site_code (required), machine_id?
connectwise_command_get_site_summary Site asset and ticket overview site_code, month, year (all required)

Agent / System / Software

Tool Description Parameters
connectwise_command_get_agent_details Monitoring agent details for all devices in a site (also used to get the Machine ID) site_code (required)
connectwise_command_get_system_information System hardware/OS/BIOS information, optionally targeting a single device site_code (required), machine_id?
connectwise_command_get_installed_software Installed software list, optionally targeting a single device site_code (required), machine_id?

Antivirus

Tool Description Parameters
connectwise_command_get_antivirus_ages Age in days of desktop antivirus definitions, desktop only site_code, month, year (all required)
connectwise_command_get_antivirus_summary Antivirus protection status count summary site_code, month, year, resource_type (all required,"Desktop"/"server")
connectwise_command_get_antivirus_version_summary Antivirus product/version, optionally targeting a single device site_code (required), machine_id?
connectwise_command_get_daily_antivirus_status Daily antivirus status site_code, month, year, resource_type (all required)
connectwise_command_get_missing_antivirus List of devices missing antivirus protection site_code, month, year, resource_type (all required)
connectwise_command_get_outdated_antivirus List of devices with outdated antivirus definitions site_code, month, year, resource_type (all required)
connectwise_command_get_unsupported_antivirus List of devices using unsupported antivirus products site_code, month, year, resource_type (all required)

Patches

Tool Description Parameters
connectwise_command_get_missing_patches Summary of missing patches on desktops site_code, month, year (all required)
connectwise_command_get_patch_summary_by_severity Patch counts by severity site_code, month, year, resource_type (all required)

Warranty

Tool Description Parameters
connectwise_command_get_expiring_warranties List of devices with expired or soon-to-expire warranties site_code, month, year, resource_type (all required)
connectwise_command_get_warranty_summary Warranty status (active/expired/no data) counts site_code, month, year, resource_type (all required)

Misc

Tool Description Parameters
connectwise_command_get_score_summary Overall site health/risk score (multiple metrics; -1 means not applicable to the site) site_code, month, year (all required)

Test Example

List all sites, then get devices for one:

{
  "method": "tools/call",
  "params": { "name": "connectwise_command_get_sites", "arguments": {} }
}

Equivalent curl against the running server (streamable HTTP MCP endpoint):

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "X-ConnectWise-Command-Api-Key: <api_key>" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "connectwise_command_get_sites", "arguments": {} }
  }'

A month/year-based resource:

{
  "method": "tools/call",
  "params": {
    "name": "connectwise_command_get_cpu_utilization",
    "arguments": { "site_code": "AGTSolutions", "month": 4, "year": 2015 }
  }
}

API Reference

  • Official docs (ITSupport247 portal, Admin > Integration > Reporting API):
    • "Getting Started with the Reporting API"
    • "Reporting API REST Resources" (full per-resource request/response schemas — source of every field name in this server)

Implementation Notes

  • Trimmed twice: 41 tools (full API) → 21 tools on 2026-08-04 (MSPbots'actually-configured 19 endpoints plus the small always-kept Sites/Devices/Agent/System categories) → 18 tools on 2026-08-26 (removedget_patch_summary_by_resource/get_patch_summary_by_state/get_warranty_details — see Tool List above for why). See the Tool Listsection for the full rationale each time. If a removed tool is neededlater, the official Reporting API doc (linked below) still documents itand it can be re-added the same way the kept tools were generated; githistory has every removed tool'simplementation verbatim.
  • Error shape varies by resource — some responses use "Error" (capital, e.g. Agent Details), most use "error" (lowercase, e.g. Antivirus Summary), and the position in the response varies (top, bottom, or nested per-item). ContinuumClient._parse checks both casings.
  • GET resources (Sites, Devices) return a bare JSON array, not an object with an error key.
  • Request field name MachineID (used in the request body for Antivirus Version Summary, Installed Software, System Information) differs in casing from the response field MachineId — both confirmed verbatim from the official doc.
  • get_site_installation_package-equivalent functionality does not exist for this API; not applicable here (unlike N-able RMM).

MCP Server · Populars

MCP Server · New

    bex-co

    Beancount.io Backend

    💰 Double-entry bookkeeping made easy — plain-text accounting for humans and AI agents. Polished iOS & Android app built with React Native + Expo.

    Community bex-co
    nkapila6

    mcpsurfr

    Local web search MCP server, formerly mcp-local-rag. Multi-engine deep research with on-device re-ranking. ✨ no API keys ✨

    Community nkapila6
    convex

    mcp.ts

    The open-source reactive database for app developers

    Community convex
    convex

    convex-backend

    The open-source reactive database for app developers

    Community convex
    Tripo-Developer

    Tripo MCP Server

    Official MCP server for Tripo

    Community Tripo-Developer