connectwise-automate-mcp
ConnectWise Automate MCP Server
A Model Context Protocol (MCP) server for ConnectWise Automate with decision tree architecture for Claude.
One-Click Deployment
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.
Create a GitHub Personal Access Token with the
read:packagesscope (classic token). Any GitHub account works — you do not need to be a member of theWYRE-AIorg to read its public packages.Add it as a build variable when prompted by the deploy flow:
Cloudflare Workers → set a build variable named
NODE_AUTH_TOKENto your PAT (Workers → Settings → Build → Variables and Secrets).DigitalOcean App Platform → set an encrypted env var named
GITHUB_TOKENwith scope Build Time to your PAT (the.do/deploy.template.yamlalready declares it).
The DigitalOcean target builds the full Docker image and runs the complete MCP
server over HTTP — this is the recommended path for operators. SetCONDUIT_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).
Related MCP server: ConnectWise API Gateway MCP Server
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_getrenders as a read-only interactive card in MCP Apps hosts (Claude Desktop/web); neutral by default, brandable viawindow.__BRAND__injection orMCP_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:
# 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-mcpThe 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.
Variable | Required | Description |
| For stdio and | ConnectWise Automate server URL (e.g. |
| For stdio and | ConnectWise Automate Client ID |
| For stdio and | Integrator username or user login |
| For stdio and | Integrator password or user password |
| No | Two-factor authentication code (forces |
| No |
|
| No |
|
| No |
|
| Yes for HTTP | Service-to-service secret. Generate with |
| No | Set to exactly |
| No | Bind address when |
| No | HTTP port. Defaults to |
/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.
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.
docker build -t connectwise-automate-mcp .
docker run \
-e CONDUIT_S2S_SECRET=your-s2s-secret \
-p 127.0.0.1:8080:8080 \
connectwise-automate-mcpCompose 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:
CONDUIT_S2S_SECRET=your-s2s-secret docker compose upSingle-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses CW_AUTOMATE_*:
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-mcpLocal 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:
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 node dist/index.jsThe 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:
{
"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:
Use
cwautomate_navigateto select a domain (computers, clients, alerts, scripts)Domain-specific tools become available
Use
cwautomate_backto 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
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Type check
npm run typecheck
# Lint
npm run lintLicense
Apache-2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables Claude to manage software development projects with complete context awareness and code execution through Docker environments.7 npm4-
- FlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that provides a comprehensive interface for interacting with the ConnectWise Manage API, simplifying API discovery, execution, and management for both developers and AI assistants.2 npm19-
- AlicenseCqualityFmaintenanceAn AI-powered Model Context Protocol server for Claude Code that provides code intelligence tools including codebase analysis, task management, component generation, and deployment configuration.2316GPL 3.0
- FlicenseNot gradedqualityDmaintenanceA comprehensive Model Context Protocol server for Claude Code that provides programmatic management of Claude Code CLI operations through a multi-agent collaborative system.2-