Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
MCP server for ConnectWise Automate RMM — computers, clients, alerts, and scripts.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
CW_AUTOMATE_SERVER_URL, CW_AUTOMATE_CLIENT_ID, CW_AUTOMATE_USERNAME, CW_AUTOMATE_PASSWORD, CW_AUTOMATE_2FA_CODE, MCP_TRANSPORT, AUTH_MODE, LOG_LEVELค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"connectwise-automate": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CW_AUTOMATE_SERVER_URL",
"-e",
"CW_AUTOMATE_CLIENT_ID",
"-e",
"CW_AUTOMATE_USERNAME",
"-e",
"CW_AUTOMATE_PASSWORD",
"-e",
"CW_AUTOMATE_2FA_CODE",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/connectwise-automate-mcp:v1.8.2"
],
"env": {
"CW_AUTOMATE_SERVER_URL": "ใส่ค่าของคุณ",
"CW_AUTOMATE_CLIENT_ID": "ใส่ค่าของคุณ",
"CW_AUTOMATE_USERNAME": "ใส่ค่าของคุณ",
"CW_AUTOMATE_PASSWORD": "ใส่ค่าของคุณ",
"CW_AUTOMATE_2FA_CODE": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"AUTH_MODE": "ใส่ค่าของคุณ",
"LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add connectwise-automate --env CW_AUTOMATE_SERVER_URL='ใส่ค่าของคุณ' --env CW_AUTOMATE_CLIENT_ID='ใส่ค่าของคุณ' --env CW_AUTOMATE_USERNAME='ใส่ค่าของคุณ' --env CW_AUTOMATE_PASSWORD='ใส่ค่าของคุณ' --env CW_AUTOMATE_2FA_CODE='ใส่ค่าของคุณ' --env MCP_TRANSPORT='ใส่ค่าของคุณ' --env AUTH_MODE='ใส่ค่าของคุณ' --env LOG_LEVEL='ใส่ค่าของคุณ' -- docker run -i --rm -e CW_AUTOMATE_SERVER_URL -e CW_AUTOMATE_CLIENT_ID -e CW_AUTOMATE_USERNAME -e CW_AUTOMATE_PASSWORD -e CW_AUTOMATE_2FA_CODE -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/connectwise-automate-mcp:v1.8.2เติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"connectwise-automate": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CW_AUTOMATE_SERVER_URL",
"-e",
"CW_AUTOMATE_CLIENT_ID",
"-e",
"CW_AUTOMATE_USERNAME",
"-e",
"CW_AUTOMATE_PASSWORD",
"-e",
"CW_AUTOMATE_2FA_CODE",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/connectwise-automate-mcp:v1.8.2"
],
"env": {
"CW_AUTOMATE_SERVER_URL": "ใส่ค่าของคุณ",
"CW_AUTOMATE_CLIENT_ID": "ใส่ค่าของคุณ",
"CW_AUTOMATE_USERNAME": "ใส่ค่าของคุณ",
"CW_AUTOMATE_PASSWORD": "ใส่ค่าของคุณ",
"CW_AUTOMATE_2FA_CODE": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"AUTH_MODE": "ใส่ค่าของคุณ",
"LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"connectwise-automate": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CW_AUTOMATE_SERVER_URL",
"-e",
"CW_AUTOMATE_CLIENT_ID",
"-e",
"CW_AUTOMATE_USERNAME",
"-e",
"CW_AUTOMATE_PASSWORD",
"-e",
"CW_AUTOMATE_2FA_CODE",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/connectwise-automate-mcp:v1.8.2"
],
"env": {
"CW_AUTOMATE_SERVER_URL": "ใส่ค่าของคุณ",
"CW_AUTOMATE_CLIENT_ID": "ใส่ค่าของคุณ",
"CW_AUTOMATE_USERNAME": "ใส่ค่าของคุณ",
"CW_AUTOMATE_PASSWORD": "ใส่ค่าของคุณ",
"CW_AUTOMATE_2FA_CODE": "ใส่ค่าของคุณ",
"MCP_TRANSPORT": "ใส่ค่าของคุณ",
"AUTH_MODE": "ใส่ค่าของคุณ",
"LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
MCP_TRANSPORT envAUTH_MODE envLOG_LEVEL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub wyre-technology ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: CW_AUTOMATE_SERVER_URL, CW_AUTOMATE_CLIENT_ID, CW_AUTOMATE_USERNAME, CW_AUTOMATE_PASSWORD, CW_AUTOMATE_2FA_CODE
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.8.2) เข้า registry 3 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, aamio rendezvous
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Meet an agent you have not met, exchange messages that expire, and prove it happened. No account.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Model Context Protocol (MCP) server for ConnectWise Automate with decision tree architecture for Claude.
[!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 installneeds a
token. The cloud builder runs
npm installfor 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:packagesscope
Any GitHub account works — you do not need to be a member of the
WYRE-AIorg 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.yamlalready declares it).
[!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 theCW_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).
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 hostsThis 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-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.
Copy .env.example and set the variables below. The stdio transport reads CW_AUTOMATE_* and does not use CONDUIT_S2S_SECRET.
| Variable | Required | Description |
|---|---|---|
CW_AUTOMATE_SERVER_URL | For stdio and AUTH_MODE=env | ConnectWise Automate server URL (e.g. https://your-server.hostedrmm.com) |
CW_AUTOMATE_CLIENT_ID | For stdio and AUTH_MODE=env | ConnectWise Automate Client ID |
CW_AUTOMATE_USERNAME | For stdio and AUTH_MODE=env | Integrator username or user login |
CW_AUTOMATE_PASSWORD | For stdio and AUTH_MODE=env | Integrator password or user password |
CW_AUTOMATE_2FA_CODE | No | Two-factor authentication code (forces user authentication) |
CW_AUTOMATE_AUTH_METHOD | No | integrator (default) or user |
MCP_TRANSPORT | No | stdio (default) or http |
AUTH_MODE | No | gateway (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_SECRET | Yes for HTTP | Service-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_DEV | No | Set 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_HOST | No | Bind 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_PORT | No | HTTP port. Defaults to 8080. |
/health stays unauthenticated and does not read credentials.
With MCP_TRANSPORT=http and a real CONDUIT_S2S_SECRET, every /mcp request must include X-Gateway-S2S. The header value is t= ,v1= , where the hex is HMAC-SHA256 of the literal string t= 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.
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-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:
CONDUIT_S2S_SECRET=your-s2s-secret docker compose up
Single-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-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:
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.
The server supports both ConnectWise Automate authentication methods:
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.
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" } } } }
The server uses a decision tree pattern. Start by navigating to a domain:
cwautomate_navigate to select a domain (computers, clients, alerts, scripts)cwautomate_back to return to the main menu# Install dependencies
npm install
npm run build
npm test
npm run typecheck
npm run lint
Apache-2.0