ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

ConnectWise CPQ

โดย wyre-technologyรุ่น 1.0.4i★ –iรันบนเครื่อง
ชื่อใน registryio.github.wyre-technology/connectwise-cpq-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

MCP server for ConnectWise CPQ (Sell) — quotes, line items, customers, terms, and templates.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: อื่น ๆ
  • ต้องใส่ค่าเหล่านี้: CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, CPQ_PRIVATE_KEY

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

  • ผลตรวจเบื้องต้น: ผ่าน 1 จาก 1 ข้อ
  • รันในเครื่องคุณด้วยสิทธิ์ของผู้ใช้คุณ (ไฟล์ อินเทอร์เน็ต แอปต่าง ๆ)
  • ค่าที่คุณต้องใส่เอง: CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, CPQ_PRIVATE_KEY, MCP_TRANSPORT, AUTH_MODE, LOG_LEVEL

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • Dockerติดตั้ง Docker ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "connectwise-cpq": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "CPQ_ACCESS_KEY",
        "-e",
        "CPQ_PUBLIC_KEY",
        "-e",
        "CPQ_PRIVATE_KEY",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "AUTH_MODE",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/wyre-technology/connectwise-cpq-mcp:v1.0.4"
      ],
      "env": {
        "CPQ_ACCESS_KEY": "ใส่ค่าของคุณ",
        "CPQ_PUBLIC_KEY": "ใส่ค่าของคุณ",
        "CPQ_PRIVATE_KEY": "ใส่ค่าของคุณ",
        "MCP_TRANSPORT": "ใส่ค่าของคุณ",
        "AUTH_MODE": "ใส่ค่าของคุณ",
        "LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add connectwise-cpq --env CPQ_ACCESS_KEY='ใส่ค่าของคุณ' --env CPQ_PUBLIC_KEY='ใส่ค่าของคุณ' --env CPQ_PRIVATE_KEY='ใส่ค่าของคุณ' --env MCP_TRANSPORT='ใส่ค่าของคุณ' --env AUTH_MODE='ใส่ค่าของคุณ' --env LOG_LEVEL='ใส่ค่าของคุณ' -- docker run -i --rm -e CPQ_ACCESS_KEY -e CPQ_PUBLIC_KEY -e CPQ_PRIVATE_KEY -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/connectwise-cpq-mcp:v1.0.4

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "connectwise-cpq": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "CPQ_ACCESS_KEY",
        "-e",
        "CPQ_PUBLIC_KEY",
        "-e",
        "CPQ_PRIVATE_KEY",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "AUTH_MODE",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/wyre-technology/connectwise-cpq-mcp:v1.0.4"
      ],
      "env": {
        "CPQ_ACCESS_KEY": "ใส่ค่าของคุณ",
        "CPQ_PUBLIC_KEY": "ใส่ค่าของคุณ",
        "CPQ_PRIVATE_KEY": "ใส่ค่าของคุณ",
        "MCP_TRANSPORT": "ใส่ค่าของคุณ",
        "AUTH_MODE": "ใส่ค่าของคุณ",
        "LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "connectwise-cpq": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "CPQ_ACCESS_KEY",
        "-e",
        "CPQ_PUBLIC_KEY",
        "-e",
        "CPQ_PRIVATE_KEY",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "AUTH_MODE",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/wyre-technology/connectwise-cpq-mcp:v1.0.4"
      ],
      "env": {
        "CPQ_ACCESS_KEY": "ใส่ค่าของคุณ",
        "CPQ_PUBLIC_KEY": "ใส่ค่าของคุณ",
        "CPQ_PRIVATE_KEY": "ใส่ค่าของคุณ",
        "MCP_TRANSPORT": "ใส่ค่าของคุณ",
        "AUTH_MODE": "ใส่ค่าของคุณ",
        "LOG_LEVEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • CPQ_ACCESS_KEY ความลับ จำเป็น env
    ConnectWise CPQ tenant/site access key (from the Sell URL ...home?accesskey= )
  • CPQ_PUBLIC_KEY จำเป็น env
    ConnectWise CPQ public API key (Settings → Organization Settings → API Keys)
  • CPQ_PRIVATE_KEY ความลับ จำเป็น env
    ConnectWise CPQ private API key (shown once at creation)
  • MCP_TRANSPORT env
    Transport mode. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.
  • AUTH_MODE env
    Credential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.
  • LOG_LEVEL env
    Log verbosity: debug, info, warn, error

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub wyre-technology ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 18676 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 27% ของอีก 18676 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 18676 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

ConnectWise CPQ ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, CPQ_PRIVATE_KEY

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.4) เข้า registry 3 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Mcphost

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

โดย formulahendryเริ่มต้น↓ 66/สัปดาห์★ 440อัปเดต 14 เดือนที่ผ่านมา

รันบนเครื่อง

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

โดย desktop-commanderกำลังโต★ 211อัปเดต 4 วันที่ผ่านมา

รันบนคลาวด์✓ desktopcommander.app

Mcphost

Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working.

โดย j0yenเริ่มต้นอัปเดต วันนี้

รันบนคลาวด์✓ mcphost.dev

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

connectwise-cpq-mcp

MCP server for ConnectWise CPQ (Sell) — quotes, line items, customers, terms, tabs, templates, tax codes, recurring revenues, and users.

Built on the MCP 2026-07-28 spec via the split v2 SDK (@modelcontextprotocol/server / /node / /client ^2.0.0-beta.5) with dual-era serving: one shared McpServerFactory behind createMcpHandler({ legacy: 'stateless' }) answers both 2025-era initialize-handshake clients (the WYRE gateway today) and modern 2026-07-28 envelope clients — with an identical, deterministic 25-tool surface for every caller. Ships as a GHCR container only (no MCPB bundle).

Tools (25, flat)

Reads: cpq_test_connection, cpq_search_quotes, cpq_get_quote, cpq_get_quote_versions, cpq_search_quote_items, cpq_get_quote_item, cpq_list_quote_customers, cpq_search_quote_tabs, cpq_list_quote_terms, cpq_list_templates, cpq_list_tax_codes, cpq_list_recurring_revenues, cpq_list_users.

Writes: cpq_create_quote_from_template, cpq_update_quote (⚠ HIGH-IMPACT), cpq_create_quote_item, cpq_update_quote_item, cpq_update_quote_customer, cpq_create_quote_term, cpq_update_quote_term, and the ⚠ DESTRUCTIVE — IRREVERSIBLE deletes: cpq_delete_quote_item, cpq_delete_quote_term, cpq_delete_quote_customer, cpq_delete_quote_version, cpq_delete_quote.

Quote creation is copy-only (/api/quotes/copyById) — the CPQ API has no create-from-scratch, publish/e-sign, order-porting, PDF, or product-catalog endpoints (pair with connectwise-psa for those).

Credentials

CPQ requires an API user and CPQ 2022.2+. Three parts, all required:

Env var (env mode)Gateway header (AUTH_MODE=gateway)Where to find it
CPQ_ACCESS_KEYX-CPQ-Access-KeySell URL: ...home?accesskey=
CPQ_PUBLIC_KEYX-CPQ-Public-KeySettings → Organization Settings → API Keys
CPQ_PRIVATE_KEYX-CPQ-Private-KeyShown once at key creation

In gateway mode a request missing any header is answered 401 (JSON-RPC error -32001) before the MCP handler runs — it never falls through to env credentials.

Copy .env.example for local configuration. Leave CONDUIT_S2S_SECRET empty in that file.

VariableRequiredDescription
CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, CPQ_PRIVATE_KEYFor stdio and AUTH_MODE=envConnectWise CPQ API user keys. The gateway Compose service does not set these.
MCP_TRANSPORTNostdio (default) or http
AUTH_MODENogateway (Docker image and Compose default) or env. Gateway mode requires the three X-CPQ-* headers on each /mcp request and never falls back to CPQ_*. env uses those variables only after S2S auth succeeds.
CONDUIT_S2S_SECRETYes for HTTPService-to-service secret. The HTTP server logs an error and exits non-zero when this is empty or a known placeholder (changeme, replace-with-a-real-secret, and the other public example values). Compose will not start without it. Never commit a real value. Generate one with openssl rand -hex 32.
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 even if MCP_HTTP_HOST is a wider address such as 0.0.0.0. A placeholder secret is still refused.
MCP_HTTP_HOSTNoBind address when MCP_TRANSPORT=http. Defaults to 127.0.0.1. Honored when CONDUIT_S2S_SECRET is set. The container image sets 0.0.0.0.
MCP_HTTP_PORTNoHTTP port. Defaults to 8080.

/health and /healthz stay unauthenticated and do not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.

HTTP authentication

With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The check is verifyS2sHeader in src/s2s-verify.ts: 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 returns 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-CPQ-Access-Key: your-access-key' \ -H 'X-CPQ-Public-Key: your-public-key' \ -H 'X-CPQ-Private-Key: your-private-key' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

In AUTH_MODE=gateway those three X-CPQ-* headers are the only credential source for that request. With AUTH_MODE=env, a signed request uses CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, and CPQ_PRIVATE_KEY from the environment when the headers are absent.

Running

export NODE_AUTH_TOKEN=$(gh auth token)   # GitHub Packages auth for @wyre-ai/*

npm install npm run build node dist/index.js # stdio (default) CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" MCP_TRANSPORT=http node dist/index.js node scripts/smoke-dual-era.mjs # proves both protocol eras serve the same tools

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

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

Local-dev note: @wyre-technology/node-connectwise-cpq is declared at ^1.0.0 but is

not yet published; until the SDK's first release lands, npm ci from a fresh clone fails.

Install the locally built SDK tarball instead:

npm install /path/to/wyre-ai-node-connectwise-cpq-0.0.0-semantically-released.tgz

(then keep package.json at ^1.0.0).

Docker (linux/amd64 per fleet law):

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, CPQ credentials arrive on each request as headers; they are not read from the environment.

docker build --platform linux/amd64 --build-arg GITHUB_TOKEN=$(gh auth token) \

-t connectwise-cpq-mcp . docker run \ -e CONDUIT_S2S_SECRET \ -p 127.0.0.1:8080:8080 \ connectwise-cpq-mcp

Compose refuses to start when CONDUIT_S2S_SECRET is unset, defaults AUTH_MODE to gateway, publishes 127.0.0.1:8080:8080, and does not inject CPQ_ACCESS_KEY, CPQ_PUBLIC_KEY, or CPQ_PRIVATE_KEY:

export CONDUIT_S2S_SECRET="$(openssl rand -hex 32)"

GITHUB_TOKEN=$(gh auth token) docker compose up

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

docker run \

-e CONDUIT_S2S_SECRET \ -e AUTH_MODE=env \ -e CPQ_ACCESS_KEY=... \ -e CPQ_PUBLIC_KEY=... \ -e CPQ_PRIVATE_KEY=... \ -p 127.0.0.1:8080:8080 \ connectwise-cpq-mcp

MCP Apps quote card

cpq_get_quote advertises a read-only MCP Apps card (ui://connectwise-cpq/quote-card.html) showing the quote header, status badges, a line-item summary, and totals. The card is purely additive: hosts without MCP Apps support get the full QuoteView JSON (the _card field is extra, never a replacement), and any card build failure leaves the JSON untouched. Rebuild the embedded UI with npm run build:ui (output committed at src/generated/quote-card-html.ts). Brand at serve time via MCP_BRAND_* env vars.

Elicitation and destructive-action consent

Where the connected client supports elicitation, the server asks before acting: date range on unfiltered quote searches, template pick on ambiguous names, tab pick when adding items, and confirmation before every delete. Elicitation rides the SDK v2 MRTR seam: handlers return input_required results (embedded elicitation/create requests) that 2026-07-28 clients fulfil and retry, and that the SDK's legacy shim fulfils server-side for 2025-era stateful connections (stdio). All elicitation is MRTR-safe: no vendor mutation ever fires before an elicitation point, so a client retry of the original request cannot duplicate a write.

Callers that never declared the form-elicitation capability — including stateless legacy HTTP requests, which is how the WYRE Conduit gateway connects — cannot be prompted at all. What that means depends on the stakes:

  • Optional elicitation degrades gracefully (design.md §4): an unfiltered search falls back to a default 90-day range and says so, and the ambiguous template/tab pickers return an error listing the candidates.
  • Destructive tools fail closed. A client that cannot answer has not consented, so the five cpq_delete_* tools refuse to run and return an actionable error naming what to do. A non-interactive caller opts in per call with "confirm_destructive_action": true, declared in each destructive tool's input schema so the gate is actually satisfiable. That argument is consulted *only* when no prompt is possible — it can never skip a confirmation an interactive user would otherwise have seen.

Vendor quirks encoded here

  • Missing Authorization header → CPQ answers 500 (not 401); credentials are validated client-side before any request.
  • The real 401 body carries a vendor typo ("...has occured during basic auth validation").
  • Content-Type: application/json; version=1.0 on every request (media-type versioning).
  • List responses are bare JSON arrays — pagination terminates on a short page.
  • Condition dates must be date-only and bracketed: createDate >= [2026-07-01].
  • PATCH bodies are RFC 6902 JSON Patch arrays.

License

Apache-2.0 © WYRE Technology

ถาม PopNx