ConnectWise Automate

io.github.wyre-technology由 GitHub 账号 wyre-technology 发布v1.8.2更新于 Oct 24, 2026

MCP server for ConnectWise Automate RMM — computers, clients, alerts, and scripts.

概览

AI 生成的概览

面向 ConnectWise Automate RMM 的 MCP 服务器,让助手浏览计算机、客户、告警和脚本,并在受管设备上执行脚本或重启。

可以做什么
  • 在计算机、客户、告警和脚本四个域之间按决策树导航,并可返回主菜单。
  • 列出、搜索并查看计算机详情,在 MCP Apps 宿主中显示只读交互式设备卡片。
  • 远程重启计算机并在其上运行脚本。
  • 列出、查看、创建和更新客户。
  • 列出并查看告警(Automate API 中为只读)。
  • 列出脚本、查看脚本详情并在计算机上执行脚本。
适用场景
适合托管服务提供商和 IT 团队,让助手在 ConnectWise Automate 中查询设备、客户和告警,或对受管终端触发脚本执行和重启,而无需切换到 Automate 控制台。
运行要求
以 stdio 本地运行(npx 或容器镜像)或通过 HTTP 运行。需要 CW_AUTOMATE_SERVER_URL、CW_AUTOMATE_CLIENT_ID、CW_AUTOMATE_USERNAME 和 CW_AUTOMATE_PASSWORD;CW_AUTOMATE_2FA_CODE 可选,设置后改用用户认证。npm 包位于 GitHub Packages,安装需要具备 read:packages 权限的 GitHub 令牌(NODE_AUTH_TOKEN)。HTTP 模式还需 CONDUIT_S2S_SECRET。
安装前请注意
保存可访问 RMM 平台的 ConnectWise Automate 凭据(CW_AUTOMATE_CLIENT_ID、CW_AUTOMATE_USERNAME、CW_AUTOMATE_PASSWORD,以及可选的 CW_AUTOMATE_2FA_CODE)。工具可重启机器、执行脚本以及创建或更新客户,改动会作用于真实终端。HTTP 模式需要 CONDUIT_S2S_SECRET 和网关请求头;MCP_ALLOW_INSECURE_DEV 会关闭请求认证,仅限本地开发。安装该包还需要 GitHub 令牌。

安装

在 SourceWeft 中

  1. 打开 控制台中的 ConnectWise Automate,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

ConnectWise Automate MCP Server

A Model Context Protocol (MCP) server for ConnectWise Automate with decision tree architecture for Claude.

One-Click Deployment

[!IMPORTANT] Before you click: this server depends on @wyre-ai/node-connectwise-automate, which is hosted on the GitHub Packages npm registry. GitHub Packages has no anonymous access — even though the package is public, every npm install needs a token. The cloud builder runs npm install for you, so you must give it one, or the build fails with npm error 401 Unauthorized ... npm.pkg.github.com.

  1. Create a GitHub Personal Access Token with the read:packages scope (classic token). Any GitHub account works — you do not need to be a member of the WYRE-AI org to read its public packages.
  2. Add it as a build variable when prompted by the deploy flow:
    • Cloudflare Workers → set a build variable named NODE_AUTH_TOKEN to your PAT (Workers → Settings → Build → Variables and Secrets).
    • DigitalOcean App Platform → set an encrypted env var named GITHUB_TOKEN with scope Build Time to your PAT (the .do/deploy.template.yaml already declares it).

[Deploy to DO]

[Deploy to Cloudflare Workers]

[!NOTE] The DigitalOcean target builds the full Docker image and runs the complete MCP server over HTTP — this is the recommended path for operators. Set CONDUIT_S2S_SECRET (and the CW_AUTOMATE_* secrets) before the first boot; HTTP mode exits if the S2S secret is missing. The template sets AUTH_MODE=env for that single-tenant deploy. This repo has no supported Cloudflare Workers target yet; prefer DigitalOcean or the prebuilt container image (ghcr.io/wyre-ai/connectwise-automate-mcp).

Features

  • Decision Tree Architecture: Navigate between domains (computers, clients, alerts, scripts) to access relevant tools
  • Lazy Loading: Client initialization and domain handlers are loaded on demand
  • Comprehensive API Coverage: Manage computers, clients, alerts, and scripts
  • Interactive Device Card (MCP Apps): cwautomate_computers_get renders as a read-only interactive card in MCP Apps hosts (Claude Desktop/web); neutral by default, brandable via window.__BRAND__ injection or MCP_BRAND_* env vars; plain-JSON behavior is unchanged in other hosts

Installation

This package is published to the GitHub Packages npm registry, which requires a token even for public packages. Authenticate once, then install:

bash
# Authenticate npm to GitHub Packages (token needs the read:packages scope)export NODE_AUTH_TOKEN=$(gh auth token)   # or a PAT with read:packages
npm install @wyre-ai/connectwise-automate-mcp

The repo's .npmrc already points the @wyre-ai scope at GitHub Packages and reads the token from NODE_AUTH_TOKEN, so no further config is needed.

Configuration

Copy .env.example and set the variables below. The stdio transport reads CW_AUTOMATE_* and does not use CONDUIT_S2S_SECRET.

VariableRequiredDescription
CW_AUTOMATE_SERVER_URLFor stdio and AUTH_MODE=envConnectWise Automate server URL (e.g. https://your-server.hostedrmm.com)
CW_AUTOMATE_CLIENT_IDFor stdio and AUTH_MODE=envConnectWise Automate Client ID
CW_AUTOMATE_USERNAMEFor stdio and AUTH_MODE=envIntegrator username or user login
CW_AUTOMATE_PASSWORDFor stdio and AUTH_MODE=envIntegrator password or user password
CW_AUTOMATE_2FA_CODENoTwo-factor authentication code (forces user authentication)
CW_AUTOMATE_AUTH_METHODNointegrator (default) or user
MCP_TRANSPORTNostdio (default) or http
AUTH_MODENogateway (Docker image and Compose default) or env. Gateway mode requires X-CWA-Server, X-CWA-Client-ID, X-CWA-Username, and X-CWA-Password on each /mcp request and never falls back to CW_AUTOMATE_*. env uses those variables only after S2S auth succeeds.
CONDUIT_S2S_SECRETYes for HTTPService-to-service secret. Generate with openssl rand -hex 32. The HTTP server logs an error and exits non-zero when this is empty or a known placeholder (replace-with-a-real-secret, changeme, and the other example values). The value is never logged. Compose will not start without it. Never commit a real value.
MCP_ALLOW_INSECURE_DEVNoSet to exactly 1 only for local development to start HTTP without CONDUIT_S2S_SECRET. The process logs a warning and does not enforce X-Gateway-S2S. The listener is forced to 127.0.0.1; a wider MCP_HTTP_HOST (including 0.0.0.0) is ignored and the override is logged. A placeholder secret still refuses to start.
MCP_HTTP_HOSTNoBind address when MCP_TRANSPORT=http and CONDUIT_S2S_SECRET is set. Defaults to 127.0.0.1. The container image sets 0.0.0.0.
MCP_HTTP_PORTNoHTTP port. Defaults to 8080.

/health stays unauthenticated and does not read credentials.

HTTP authentication

With MCP_TRANSPORT=http and a real CONDUIT_S2S_SECRET, every /mcp request must include X-Gateway-S2S. The header value is t=<unix seconds>,v1=<hex>, where the hex is HMAC-SHA256 of the literal string t=<unix seconds> keyed with CONDUIT_S2S_SECRET (64 lowercase hex characters). The timestamp must be within 300 seconds of the server clock. A missing or invalid header is HTTP 401, before vendor credentials are read.

bash
TS=$(date +%s)SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')curl -sS http://127.0.0.1:8080/mcp \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -H "X-Gateway-S2S: t=${TS},v1=${SIG}" \  -H "X-CWA-Server: https://your-server.hostedrmm.com" \  -H "X-CWA-Client-ID: your-client-id" \  -H "X-CWA-Username: your-username" \  -H "X-CWA-Password: your-password" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

In AUTH_MODE=gateway, those X-CWA-* headers are the only credential source (X-CWA-2FA and X-CWA-Auth-Method are optional). A request missing any required header is HTTP 401 and does not use CW_AUTOMATE_* from the environment. With AUTH_MODE=env, the signed request uses the CW_AUTOMATE_* variables instead.

Docker

The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass the S2S secret. In gateway mode, Automate credentials arrive on each request as headers; they are not read from the environment.

bash
docker build -t connectwise-automate-mcp .docker run \  -e CONDUIT_S2S_SECRET=your-s2s-secret \  -p 127.0.0.1:8080:8080 \  connectwise-automate-mcp

Compose refuses to start when CONDUIT_S2S_SECRET is unset, sets AUTH_MODE=gateway, does not inject CW_AUTOMATE_*, and publishes 127.0.0.1:8080:8080:

bash
CONDUIT_S2S_SECRET=your-s2s-secret docker compose up

Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses CW_AUTOMATE_*:

bash
docker run \  -e CONDUIT_S2S_SECRET=your-s2s-secret \  -e AUTH_MODE=env \  -e CW_AUTOMATE_SERVER_URL=https://your-server.hostedrmm.com \  -e CW_AUTOMATE_CLIENT_ID=your-client-id \  -e CW_AUTOMATE_USERNAME=your-username \  -e CW_AUTOMATE_PASSWORD=your-password \  -p 127.0.0.1:8080:8080 \  connectwise-automate-mcp

Local HTTP without a secret is development-only. It binds 127.0.0.1 only and logs a warning. A non-loopback MCP_HTTP_HOST is overridden to 127.0.0.1:

bash
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 node dist/index.js

The DigitalOcean App Platform template is single-tenant: it sets AUTH_MODE=env so the CW_AUTOMATE_* secrets stay the credential source, and it declares CONDUIT_S2S_SECRET. Set that secret in the App Platform UI or the container exits on boot.

Authentication methods

The server supports both ConnectWise Automate authentication methods:

  • integrator (default) – machine-to-machine integrator account. Recommended for automation. Does not use 2FA.
  • user – interactive user login, which can supply a two-factor code.

You normally don't need to set CW_AUTOMATE_AUTH_METHOD: integrator auth is used by default, and user auth is selected automatically when CW_AUTOMATE_2FA_CODE is provided.

Usage

As an MCP Server

Add to your Claude configuration:

json
{  "mcpServers": {    "connectwise-automate": {      "command": "npx",      "args": ["@wyre-ai/connectwise-automate-mcp"],      "env": {        "CW_AUTOMATE_SERVER_URL": "https://your-server.hostedrmm.com",        "CW_AUTOMATE_CLIENT_ID": "your-client-id",        "CW_AUTOMATE_USERNAME": "your-username",        "CW_AUTOMATE_PASSWORD": "your-password"      }    }  }}

Navigation

The server uses a decision tree pattern. Start by navigating to a domain:

  1. Use cwautomate_navigate to select a domain (computers, clients, alerts, scripts)
  2. Domain-specific tools become available
  3. Use cwautomate_back to return to the main menu

Available Domains

Computers
  • List computers with filtering options
  • Get computer details
  • Search computers by name
  • Reboot computers remotely
  • Run scripts on computers
Clients
  • List all clients
  • Get client details
  • Create new clients
  • Update existing clients
Alerts
  • List alerts with filtering (read-only in the Automate API)
  • Get alert details
Scripts
  • List available scripts
  • Get script details
  • Execute scripts on computers

Development

bash
# Install dependenciesnpm install
# Buildnpm run build
# Run testsnpm test
# Type checknpm run typecheck
# Lintnpm run lint

License

Apache-2.0

来源:README.md,提交 3aa588f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.8.2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分