mcpField
S
Syncro

Syncro

本地服务
github.com商业与营销42 周前更新

关于 Syncro

Syncro MCP 服务面向 MSP 团队和 Agent,用于处理客户、工单、资产、联系人和发票。它通过按领域组织的决策树按需加载工具,并可在兼容的 MCP Apps 主机中将工单详情显示为交互式卡片。

主要功能

  1. 01导航按领域划分的工具组
  2. 02按需加载领域工具
  3. 03管理客户和联系人
  4. 04创建和更新支持工单
  5. 05搜索和管理资产
  6. 06查看和管理发票

适用场景

  1. 01搜索客户或联系人
  2. 02创建或更新支持工单
  3. 03按查询词或序列号查找资产
  4. 04查看或发送发票

MCP 相关

它通过可导航的领域提供 Syncro MSP MCP 工具。导航到某个领域后才会显示相应工具;工单详情可在 MCP Apps 主机中显示为交互式卡片。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"wyre-ai-syncro": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SYNCRO_SUBDOMAIN",
"-e",
"SYNCRO_API_KEY",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-ai/syncro-mcp:v1.4.12"
],
"env": {
"SYNCRO_SUBDOMAIN": "<SYNCRO_SUBDOMAIN>",
"SYNCRO_API_KEY": "<SYNCRO_API_KEY>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
启动命令docker run -i --rm -e SYNCRO_SUBDOMAIN -e SYNCRO_API_KEY -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/syncro-mcp:v1.4.12
需要配置的环境变量
SYNCRO_SUBDOMAINSyncro account subdomain (e.g. 'acme' for acme.syncromsp.com)
SYNCRO_API_KEY密钥Syncro API key generated from the admin settings
MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.
AUTH_MODE密钥Credential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.
LOG_LEVELLog verbosity: debug, info, warn, error

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/wyre-ai/syncro-mcp:v1.4.12

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Syncro MCP 服务

适用于 Syncro MSP 的模型上下文协议(MCP)服务,采用决策树架构,便于高效导航工具。

一键部署

Deploy to DO

Deploy to Cloudflare Workers

运维人员须知 — GitHub Packages 身份验证(一键部署必需)。 此服务依赖私有的 @wyre-technology/node-syncro SDK,该 SDK 托管在 GitHub Packages 上。GitHub Packages 每次安装都需要身份验证令牌 (即使是公开的软件包也不允许匿名读取),因此云构建程序会在 npm install 期间因 401 Unauthorized 而失败,除非你提供令牌。创建一个具有 read:packages 范围的 GitHub 个人访问令牌,并将其提供给构建程序:

  • Cloudflare Workers — 将名为 NODE_AUTH_TOKEN 的构建/环境变量设为你的 PAT。
  • DigitalOcean App Platform — 将名为 GITHUB_TOKEN 的构建时密钥设为你的 PAT。

如需本地运行 npm install,请先运行 export NODE_AUTH_TOKEN=$(gh auth token)。

功能

  • 决策树架构:按领域组织工具,并按需加载
  • 领域导航:在客户、工单、资产、联系人和发票之间导航
  • 按需加载:按需加载领域处理程序和 Syncro 客户端
  • 全面覆盖 Syncro API:访问 Syncro MSP 的关键功能
  • 交互式工单卡片(MCP Apps):在 MCP Apps 宿主(Claude Desktop/web)中,syncro_tickets_get 会呈现为交互式卡片,并支持在卡片内通过 syncro_tickets_add_comment 往返添加评论(默认仅供内部使用);在其他宿主中的纯 JSON 行为保持不变。卡片默认采用中性样式,可通过注入 window.__BRAND__ 或设置 MCP_BRAND_* 环境变量(MCP_BRAND_NAME、MCP_BRAND_LOGO_URL、MCP_BRAND_PRIMARY_COLOR、MCP_BRAND_ACCENT_COLOR、MCP_BRAND_BG、MCP_BRAND_TEXT)进行品牌定制,无需重新构建。

安装

WYRE MCP 服务通过 OCI/GHCR 镜像以及(在可用时)MCPB 捆绑包分发。npm 软件包 @wyre-ai/syncro-mcp 也发布在 GitHub Packages(npm.pkg.github.com);安装时需要经过身份验证且具有 read:packages 范围的 .npmrc(在本地运行 export NODE_AUTH_TOKEN=$(gh auth token))。

选项 1:WYRE MCP Gateway(推荐)

使用托管网关 mcp.wyre.ai — 在网关 UI 中粘贴你的 Syncro API 密钥即可。

{
  "mcpServers": {
    "syncro": {
      "type": "http",
      "url": "https://mcp.wyre.ai/v1/syncro/mcp",
      "headers": {
        "X-Syncro-Api-Key": "${SYNCRO_API_KEY}"
      }
    }
  }
}
选项 2:Claude Code CLI(从 GitHub 运行)
claude mcp add syncro \
  -e SYNCRO_API_KEY=your-api-key \
  -e SYNCRO_SUBDOMAIN=your-subdomain \
  -- npx -y github:WYRE-AI/syncro-mcp
选项 3:Docker(GHCR)

镜像在容器内监听 0.0.0.0,并默认使用 AUTH_MODE=gateway。将端口发布到回环地址,并传入服务间密钥。在网关模式下,Syncro 凭据会作为请求头随每个请求传入;不会从环境变量中读取。

docker run --rm \
  -e CONDUIT_S2S_SECRET=your-s2s-secret \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/wyre-ai/syncro-mcp:latest

当 CONDUIT_S2S_SECRET 未设置时,Compose 会拒绝启动;它会在没有静态 SYNCRO_* 凭据的情况下运行 AUTH_MODE=gateway,并发布 127.0.0.1:8080:8080:

CONDUIT_S2S_SECRET=your-s2s-secret docker compose up

单租户 HTTP(AUTH_MODE=env)仍需要 S2S 密钥,然后使用 SYNCRO_API_KEY:

docker run --rm \
  -e CONDUIT_S2S_SECRET=your-s2s-secret \
  -e AUTH_MODE=env \
  -e SYNCRO_API_KEY=your-api-key \
  -e SYNCRO_SUBDOMAIN=your-subdomain \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/wyre-ai/syncro-mcp:latest
选项 4:从源代码安装
git clone https://github.com/WYRE-AI/syncro-mcp.git
cd syncro-mcp
npm ci
npm run build
node dist/index.js

配置

复制 .env.example,并设置以下变量。

变量必填说明
SYNCRO_API_KEYstdio 和 AUTH_MODE=env 时必填你的 Syncro API 密钥
SYNCRO_SUBDOMAIN否你的 Syncro 子域名(如适用)
MCP_TRANSPORT否stdio(默认)或 http
AUTH_MODE否gateway(Docker 镜像和 Compose 默认值)或 env。Gateway 模式要求每个 /mcp 请求都携带 X-Syncro-API-Key,且绝不会回退到 SYNCRO_*。只有在 S2S 身份验证成功后,env 模式才会使用这些变量。
CONDUIT_S2S_SECRETHTTP 必填服务间密钥。如果该值为空或为已知占位值(changeme、your-s2s-secret、replace-with-a-real-secret、secret、未解析的 ${...} 值以及其他示例字符串),HTTP 服务器会记录错误并以非零状态退出。未设置此值时,Compose 不会启动。切勿提交真实值。可使用 openssl rand -hex 32 生成。
MCP_ALLOW_INSECURE_DEV否仅限本地开发时,准确设置为 1,即可在没有 CONDUIT_S2S_SECRET 的情况下启动 HTTP。进程会记录警告,不会强制验证 X-Gateway-S2S,且只绑定到 127.0.0.1。更宽泛的 MCP_HTTP_HOST(包括 0.0.0.0)会被忽略,并记录覆盖情况。若密钥是已知占位值,仍会拒绝启动。
MCP_HTTP_HOST否当 MCP_TRANSPORT=http 且已设置 CONDUIT_S2S_SECRET 时的绑定地址。未设置时默认为 127.0.0.1。容器镜像会设置为 0.0.0.0。
MCP_HTTP_PORT否HTTP 端口。默认为 8080。

/health 无需身份验证,也不会读取凭据。stdio 传输不使用 CONDUIT_S2S_SECRET。

HTTP 身份验证

当设置了 MCP_TRANSPORT=http 和 CONDUIT_S2S_SECRET 时,每个 /mcp 请求都必须包含 X-Gateway-S2S。其值格式为 t=<unix seconds>,v1=<hex>,其中十六进制字符串是以 CONDUIT_S2S_SECRET 为密钥、对字面字符串 t=<unix seconds> 计算得到的 HMAC-SHA256(64 位小写十六进制字符)。时间戳与服务器时钟的偏差必须在 300 秒以内。若缺少标头或标头无效,将在读取供应商凭据前返回 401。该密钥绝不会被记录到日志中。

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-Syncro-API-Key: $SYNCRO_API_KEY" \
  -H "X-Syncro-Subdomain: $SYNCRO_SUBDOMAIN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

在 AUTH_MODE=gateway 模式下,/mcp 还要求提供 X-Syncro-API-Key(X-Syncro-Subdomain 为可选项)。这些标头是该请求唯一的凭据来源。若请求缺少 API 密钥,将返回 401,且不会回退到进程环境中的 SYNCRO_API_KEY。

在 AUTH_MODE=env 模式下,/mcp 仍要求有效的 X-Gateway-S2S 标头。如果请求未携带 X-Syncro-API-Key,则会从 SYNCRO_API_KEY 和 SYNCRO_SUBDOMAIN 获取供应商凭据。

不设密钥的本地 HTTP 仅用于开发。它会绑定到 127.0.0.1 并记录警告:

MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
获取 API 密钥
  1. 登录你的 Syncro MSP 账户
  2. 前往 Settings > API Tokens
  3. 生成具有适当权限的新 API 令牌

架构

决策树导航

服务器采用分层方式发现工具:

  1. 初始状态:仅公开导航和状态工具
  2. 完成导航后:可使用特定领域的工具
  3. 返回导航:回到主菜单以切换领域

这样可以减轻认知负担,并提高大模型选择工具的准确性。

可用领域
领域说明工具
customers管理客户账户list、get、create、search
tickets管理支持工单list、get、create、update、add_comment
assets管理配置项list、get、search
contacts管理客户联系人list、get、create
invoices查看和管理账单list、get、create、email

工具参考

导航工具
syncro_navigate

导航到某个领域以使用其工具。

{
  "domain": "customers" | "tickets" | "assets" | "contacts" | "invoices"
}
syncro_back

从任意领域返回主菜单。

syncro_status

显示当前导航状态和凭据状态。

Customers 领域
syncro_customers_list

按可选筛选条件列出客户。

{
  "query": "search term",
  "business_name": "Company Inc",
  "email": "[email protected]",
  "include_disabled": false,
  "page": 1,
  "per_page": 25
}
syncro_customers_get

按 ID 获取指定客户。

{
  "customer_id": 123
}
syncro_customers_create

创建新客户。

{
  "business_name": "Acme Corp",
  "firstname": "John",
  "lastname": "Doe",
  "email": "[email protected]"
}
syncro_customers_search

按查询字符串搜索客户。

{
  "query": "acme",
  "limit": 25
}
工单领域
syncro_tickets_list

按可选筛选条件列出工单。

{
  "customer_id": 123,
  "status": "Open",
  "user_id": 456,
  "resolved": false
}
syncro_tickets_get

按 ID 获取指定工单。

{
  "ticket_id": 789
}
syncro_tickets_create

创建新工单。

{
  "customer_id": 123,
  "subject": "Network Issue",
  "problem_type": "Network",
  "comment_body": "Initial description"
}
syncro_tickets_update

更新现有工单。

{
  "ticket_id": 789,
  "status": "Resolved",
  "user_id": 456
}
syncro_tickets_add_comment

为工单添加评论。

{
  "ticket_id": 789,
  "body": "Comment text",
  "hidden": false
}
资产领域
syncro_assets_list

按可选筛选条件列出资产。

{
  "customer_id": 123,
  "asset_type": "Desktop"
}
syncro_assets_get

按 ID 获取指定资产。

{
  "asset_id": 456
}
syncro_assets_search

按查询内容或序列号搜索资产。

{
  "query": "workstation",
  "asset_serial": "SN12345"
}
联系人领域
syncro_contacts_list

按可选筛选条件列出联系人。

{
  "customer_id": 123,
  "query": "john"
}
syncro_contacts_get

按 ID 获取指定联系人。

{
  "contact_id": 789
}
syncro_contacts_create

创建新联系人。

{
  "customer_id": 123,
  "name": "Jane Smith",
  "email": "[email protected]"
}
发票领域
syncro_invoices_list

按可选筛选条件列出发票。

{
  "customer_id": 123,
  "status": "sent",
  "since_date": "2024-01-01"
}
syncro_invoices_get

按 ID 获取指定发票。

{
  "invoice_id": 456
}
syncro_invoices_create

创建新发票。

{
  "customer_id": 123,
  "due_date": "2024-02-01"
}
syncro_invoices_email

将发票通过电子邮件发送给客户。

{
  "invoice_id": 456,
  "subject": "Your Invoice"
}

速率限制

Syncro API 的速率限制为每分钟 180 个请求。底层的 @wyre-technology/node-syncro 库会自动处理速率限制。

开发

# Install dependencies. The @wyre-technology/node-syncro SDK lives on GitHub
# Packages, so authenticate first:
export NODE_AUTH_TOKEN=$(gh auth token)
npm install

# Build
npm run build

# Run in development (stdio)
npm run dev

# HTTP refuses to start until CONDUIT_S2S_SECRET is a real secret
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" MCP_TRANSPORT=http npm start

# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_ALLOW_INSECURE_DEV=1 MCP_TRANSPORT=http npm start

# Type check
npm run typecheck

# Lint
npm run lint

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。