connectwise-command-mcp
Exposes the ConnectWise Command (Continuum) ITSupport247 Reporting API as MCP tools, enabling querying of sites, devices, patches, antivirus, performance, and more.
README
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.
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", "service": "connectwise-command-mcp", "transport": "http"}
No token is required for the health endpoint.
授权参数说明 (Authentication)
Every request to /mcp must include the following HTTP header:
| Header | 类型 | 是否必填 | 默认值 | 枚举值 | 字段描述 | Example |
|---|---|---|---|---|---|---|
X-ConnectWise-Command-Api-Key |
string | 必填 | 无 | 无(自由文本) | ConnectWise Command (Continuum) Reporting API key,在 ITSupport247 门户 Admin > Integration > Reporting API > Regenerate Key 生成。服务端收到后转换为 HTTP Basic Auth(用户名留空,该 key 作为密码)发往上游 API,不做任何存储。 | 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
41 tools — full coverage of every resource in the official "Reporting API REST Resources" doc. Most 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 | 功能 | 参数 |
|---|---|---|
connectwise_command_get_sites |
列出该 API key 可见的所有活跃站点 | 无参数 |
connectwise_command_get_devices |
列出站点下的设备,可选定位到单设备 | site_code (必填), machine_id? |
connectwise_command_get_site_summary |
站点资产与工单概况 | site_code, month, year (均必填) |
Agent / System / Software
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_agent_details |
站点内所有设备的监控代理详情(也用于获取 Machine ID) | site_code (必填) |
connectwise_command_get_system_information |
系统硬件/OS/BIOS 信息,可选定位到单设备 | site_code (必填), machine_id? |
connectwise_command_get_installed_software |
已安装软件列表,可选定位到单设备 | site_code (必填), machine_id? |
Antivirus
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_antivirus_ages |
桌面机防病毒库更新时长(天),仅支持 desktop | site_code, month, year (均必填) |
connectwise_command_get_antivirus_summary |
防病毒防护状态计数汇总 | site_code, month, year, resource_type (均必填,"Desktop"/"server") |
connectwise_command_get_antivirus_version_summary |
防病毒产品/版本,可选定位到单设备 | site_code (必填), machine_id? |
connectwise_command_get_daily_antivirus_status |
每日防病毒状态 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_missing_antivirus |
缺失防病毒防护的设备列表 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_outdated_antivirus |
病毒库过期的设备列表 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_unsupported_antivirus |
使用不受支持防病毒产品的设备列表 | site_code, month, year, resource_type (均必填) |
Patches
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_missing_patches |
桌面机缺失补丁汇总 | site_code, month, year (均必填) |
connectwise_command_get_patch_summary_by_resource |
按设备维度的补丁状态计数 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_patch_summary_by_severity |
按严重程度的补丁计数 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_patch_summary_by_state |
按状态(已装/缺失/黑名单等)的补丁总数 | site_code, month, year, resource_type (均必填) |
Performance
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_cpu_utilization |
服务器 CPU 月度最小/最大/平均值及每日均值 | site_code, month, year (均必填) |
connectwise_command_get_disk_usage |
服务器磁盘空间月度最小/最大/平均值及每日均值 | site_code, month, year (均必填) |
connectwise_command_get_disk_io_utilization |
服务器磁盘 IO 月度最小/最大/平均值及每日均值 | site_code, month, year (均必填) |
connectwise_command_get_memory_utilization |
服务器内存月度最小/最大/平均值及每日均值 | site_code, month, year (均必填) |
connectwise_command_get_pagefile_utilization |
服务器 PageFile 月度最小/最大/平均值及每日均值 | site_code, month, year (均必填) |
connectwise_command_get_disk_space_utilization |
按设备的磁盘空间使用百分比 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_server_utilization |
服务器月度平均 CPU/磁盘/内存使用率 | site_code, month, year (均必填) |
Availability
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_daily_server_availability |
站点全部服务器每日平均可用性 | site_code, month, year (均必填) |
connectwise_command_get_server_availability_monthly |
服务器可用性月度平均值 | site_code, month, year (均必填) |
connectwise_command_get_daily_server_utilization |
每日服务器综合利用率(CPU/内存/磁盘IO/磁盘空间/PageFile) | site_code, month, year (均必填) |
Warranty
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_expiring_warranties |
已过期或即将过期保修的设备列表 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_warranty_details |
设备保修详情(不需要 month/year) | site_code (必填), include_warranty_history?(默认 false) |
connectwise_command_get_warranty_summary |
保修状态(有效/过期/无数据)计数 | site_code, month, year, resource_type (均必填) |
Recover for Continuity (Backup)
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_continuity_appliances |
站点已部署的 Recover for Continuity 备份设备列表 | site_code, month, year (均必填) |
connectwise_command_get_continuity_backup_summary |
备份成功/失败百分比总览 | site_code, month, year (均必填) |
connectwise_command_get_continuity_backup_summary_by_resource |
按受保护资源的备份结果 | site_code, month, year (均必填) |
connectwise_command_get_continuity_protected_resources |
受 Recover for Continuity 保护的资源列表 | site_code, month, year (均必填) |
Misc
| Tool | 功能 | 参数 |
|---|---|---|
connectwise_command_get_noncompliant_mobile_devices |
不符合企业策略的移动设备列表 | site_code, month, year (均必填) |
connectwise_command_get_operating_system_summary |
操作系统分布与设备数 | site_code, month, year, resource_type (均必填) |
connectwise_command_get_score_summary |
站点整体健康/风险评分(多项指标,-1 表示该站点不适用) | site_code, month, year (均必填) |
connectwise_command_get_service_requests_by_month |
近6个月工单开关数量 | site_code, month, year (均必填) |
connectwise_command_get_service_requests_by_week |
近6周工单开关数量 | site_code, month, year (均必填) |
connectwise_command_get_snmp_devices |
站点下 SNMP 设备(路由器/交换机等)列表 | site_code, month, year (均必填) |
connectwise_command_get_work_summary |
技术支持工作记录汇总 | site_code, month, year (均必填) |
测试示例 (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
- 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._parsechecks both casings. - GET resources (
Sites,Devices) return a bare JSON array, not an object with anerrorkey. - Request field name
MachineID(used in the request body for Antivirus Version Summary, Installed Software, System Information) differs in casing from the response fieldMachineId— 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).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.