Kaseya Quote Manager

io.github.wyre-technology由 GitHub 帳號 wyre-technology 發布v1.0.10更新於 Oct 24, 2026

Read-only MCP server for Kaseya Quote Manager (Datto Commerce): quotes, orders, purchasing.

發布方自己的服務:Quote.Trade MCP Adapter

已驗證STDIO僅桌面資料與分析商業與電商

概覽

AI 產生的概覽

唯讀 MCP 伺服器,讓 AI 助理瀏覽 Kaseya Quote Manager(Datto Commerce)的報價、銷售訂單、採購、產品目錄與客戶資料。

可以做什麼
透過導覽與狀態工具探索各領域並檢視伺服器狀態,了解 sales、procurement、catalog、crm、org 各領域可用的實體工具。列出並取得報價、報價區段、報價明細、銷售訂單、訂單明細與訂單付款。列出並取得採購單、採購明細、成本、供應商與產品供應商關聯。列出並取得產品、產品圖片、類別與品牌。列出並取得客戶、客戶地址、聯絡人、員工與倉庫,支援分頁及依報價編號、客戶 ID 等條件篩選。
適用情境
適合讓助理在 Kaseya Quote Manager 中查詢或彙整報價、訂單、採購、目錄或客戶紀錄,而不做任何變更。適用於對現有資料做報表與問答,而非編輯資料。
執行需求
以本機程序(stdio)或 HTTP 容器方式執行。需要 Kaseya Quote Manager API 金鑰,在 Settings → API 中產生,透過 KASEYA_QUOTE_MANAGER_API_KEY 提供並以 apiKey 標頭送出。AUTH_MODE 選擇本機環境憑證或閘道標頭注入;MCP_TRANSPORT 選擇 stdio 或 http。需要能存取 Quote Manager API 的網路。
安裝前請注意
API 金鑰屬於機密,避免寫入共用設定或日誌。閘道模式下金鑰依請求以標頭注入,因此閘道必須可信。雖描述為唯讀,助理仍可讀取客戶、聯絡人、價格等業務資料,需留意會揭露哪些內容。請求受 API 速率限制約束。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Kaseya Quote Manager,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Kaseya Quote Manager MCP Server

[Build Status] [License] [Node.js]

A Model Context Protocol (MCP) server that gives AI assistants read-only access to Kaseya Quote Manager (Datto Commerce) — quotes, sales orders, purchasing, the product catalog, and customers.

Maintained by Wyre Technology.

Quick Start

Claude Desktop — download, open, done:

  1. Download kaseya-quote-manager-mcp.mcpb from the latest release
  2. Open the file (double-click or drag into Claude Desktop)
  3. Enter your Kaseya Quote Manager API Key when prompted

Claude Code (CLI):

bash
claude mcp add kaseya-quote-manager-mcp \  -e KASEYA_QUOTE_MANAGER_API_KEY=your-api-key \  -- npx -y github:WYRE-AI/kaseya-quote-manager-mcp

Authentication

Quote Manager authenticates with a single API key sent in the apiKey header. Generate one in Quote Manager under Settings → API.

Stdio and AUTH_MODE=env read KASEYA_QUOTE_MANAGER_API_KEY. The HTTP transport does not start unless CONDUIT_S2S_SECRET is a real value. Known placeholders (changeme, change-me, secret, example, placeholder, replace-me, your-secret, your-s2s-secret, s2s-secret, replace-with-a-real-secret) are rejected, including when MCP_ALLOW_INSECURE_DEV=1 is set. The process never logs the secret.

HTTP authentication

With MCP_TRANSPORT=http and a configured secret, every /mcp request must include X-Gateway-S2S:

X-Gateway-S2S: t=<unix seconds>,v1=<64 lowercase hex chars>

v1 is HMAC-SHA256 of the exact ASCII string t=<unix seconds> (the same prefix that appears in the header), keyed with CONDUIT_S2S_SECRET, encoded as 64 lowercase hex characters. The timestamp must be within 300 seconds of the server clock. A missing or invalid header returns 401.

In AUTH_MODE=gateway (the container image and Compose default), /mcp also requires X-Kaseya-Quote-Manager-Api-Key. That header is the only credential for the request. A request without it returns 401 and does not fall back to KASEYA_QUOTE_MANAGER_API_KEY.

/health stays unauthenticated, does not require X-Gateway-S2S, and does not return the API key. The stdio transport does not use CONDUIT_S2S_SECRET.

Configuration

Copy .env.example.

VariableRequiredDescription
KASEYA_QUOTE_MANAGER_API_KEYFor stdio and AUTH_MODE=envQuote Manager API key. Gateway mode does not read this.
MCP_TRANSPORTNostdio (default) or http
AUTH_MODENogateway (Docker image and Compose default) or env. Gateway mode requires X-Kaseya-Quote-Manager-Api-Key on each /mcp request and never falls back to the environment variable.
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. 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, does not enforce X-Gateway-S2S, and binds 127.0.0.1 only. A non-loopback MCP_HTTP_HOST is overridden and logged. A placeholder secret still refuses to start.
MCP_HTTP_HOSTNoBind address when a secret is configured. Defaults to 127.0.0.1. The container image sets 0.0.0.0. Ignored in favor of 127.0.0.1 when the insecure-dev bypass is on.
MCP_HTTP_PORTNoHTTP port. Defaults to 8080.
LOG_LEVELNodebug, info, warn, or error. Defaults to info.

Features

  • Read-only by design — the Quote Manager API exposes only list/get; no tool can mutate your data.
  • 39 entity tools across 5 domains, plus kqm_navigate / kqm_status discovery tools.
  • Decision-tree navigation — call kqm_navigate to explore a domain's tools.
  • Rate limiting — respects the API's 60 req/min limit, with retry on 429/5xx.
  • Dual transport — stdio (local) and HTTP Streamable (gateway/Docker).
  • MCPB packaging for one-click Claude Desktop install.

Domains & tools

Tools are named kqm_<entity>_list and kqm_<entity>_get.

DomainEntities
salesquote, quote_section, quote_line, sales_order, sales_order_line, sales_order_payment
procurementpurchase_order, purchase_order_line, purchase_order_cost, supplier, product_supplier
catalogproduct, product_image (list only), category, brand
crmcustomer, customer_address, contact
orgemployee, warehouse

list tools accept page, pageSize (max 100), and modifiedAfter where supported, plus entity-specific filters (e.g. quoteNumber, customerID, purchaseOrderID).

Usage example

kqm_navigate { "domain": "sales" }kqm_quote_list { "page": 1, "pageSize": 50 }kqm_quote_get { "id": 12345 }kqm_quote_section_list { "quoteID": 12345 }

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 the API key arrives on each request as X-Kaseya-Quote-Manager-Api-Key. It is not read from the environment.

Generate the secret once, export it, and reuse it for the server and for signing requests. -e CONDUIT_S2S_SECRET (name only) passes the exported value without putting it in the docker command line.

bash
export CONDUIT_S2S_SECRET="$(openssl rand -hex 32)"docker build -t kaseya-quote-manager-mcp .docker run --rm \  -e CONDUIT_S2S_SECRET \  -p 127.0.0.1:8080:8080 \  kaseya-quote-manager-mcp# Health: curl localhost:8080/health

Compose refuses to start when CONDUIT_S2S_SECRET is unset, sets AUTH_MODE=gateway, does not pass KASEYA_QUOTE_MANAGER_API_KEY, and publishes 127.0.0.1:8080:8080. A project .env is interpolation only — the gateway service has no env_file.

bash
# Reuses the CONDUIT_S2S_SECRET exported above.docker compose up

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

bash
docker run --rm \  -e CONDUIT_S2S_SECRET \  -e AUTH_MODE=env \  -e KASEYA_QUOTE_MANAGER_API_KEY=your-api-key \  -e MCP_HTTP_HOST=0.0.0.0 \  -p 127.0.0.1:8080:8080 \  kaseya-quote-manager-mcp

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

bash
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http

Sign a gateway request with X-Gateway-S2S and the API key header. Build the header first: v1 is HMAC-SHA256 of the exact ASCII string t=<unix seconds> (no trailing newline), keyed with CONDUIT_S2S_SECRET, as 64 lowercase hex characters. Use the same exported CONDUIT_S2S_SECRET the server was started with.

openssl dgst -hmac takes the key as a process argument, so other local users can see it in the process list while it runs. Only run this example on a trusted single-user machine; elsewhere, sign requests from code that reads the secret from the environment.

bash
: "${CONDUIT_S2S_SECRET:?Set CONDUIT_S2S_SECRET to the server secret}": "${KASEYA_QUOTE_MANAGER_API_KEY:?Set KASEYA_QUOTE_MANAGER_API_KEY to the Quote Manager API key}"timestamp="$(date +%s)"digest="$(  printf 't=%s' "$timestamp" |    openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" |    awk '{print $NF}' |    tr '[:upper:]' '[:lower:]')"X_GATEWAY_S2S="t=${timestamp},v1=${digest}"
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: ${X_GATEWAY_S2S}" \  -H "x-kaseya-quote-manager-api-key: ${KASEYA_QUOTE_MANAGER_API_KEY}" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"kqm_status","arguments":{}}}'

Development

bash
npm installnpm run buildnpm testnpm run lint

License

Apache-2.0 © WYRE Technology

來源:README.md,提交 40a606c

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

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

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。

其他 Quote 整合