数字森林中控 MCP(sulong-ops)
接入数字森林 AI 中控(sulong-ops-v2)的私有 Streamable HTTP MCP 服务器,用于读取与推进中控的
任务队列:我的任务、收件箱、阻塞项,并支持认领任务与回写进度。
> 本 Skill 不包含任何凭据。 鉴权 Key 需向系统 Owner 索取,见下方「鉴权」一节。
一、功能概述
通过 Streamable HTTP MCP(JSON-RPC 2.0 over HTTP) 调用中控 MCP,提供 7 个工具:
| 工具 | 功能 | 典型问法 |
|---|---|---|
mc_ping |
探活:确认 MCP 服务在线并返回服务标识与版本 | "中控 MCP 通不通?" |
mc_assign_task |
派单:向外部 agent 派单队列写入一条任务(入队 + 尽力直派;client_ref 幂等) |
"给某 agent 派一条任务" |
mc_get_my_tasks |
取「我的任务」清单 | "我有哪些任务?" |
mc_get_inbox |
取收件箱(按业务线 1|2|3|4 与中台聚合) | "看看收件箱" |
mc_get_blockers |
取阻塞项 / 待人工处理清单 | "有什么卡住的?" |
mc_claim_task |
认领一个任务 | "把这条任务领了" |
mc_report |
回写任务进度 / 结果 | "把这条任务的进展报上去" |
> 工具名以服务端 tools/list 返回为准;各工具的参数与返回结构同样以 tools/list 的 schema 为准。
> 本 Skill 不臆造参数——调用前先取 schema。
二、调用方式
| 项 | 值 |
|---|---|
| 协议 | MCP Streamable HTTP(JSON-RPC 2.0 over HTTP) |
| Endpoint | https://eyetsy.com/mcp/sulong(POST) |
| 鉴权 | 请求头 X-Api-Key: <SULONG_OPS_API_KEY>,或 Authorization: Bearer <同上> |
| 探活(免鉴权) | GET https://eyetsy.com/mcp/sulong/health → 200 |
| 传输约束 | 仅接受 POST;GET /mcp → 405(本服务无服务端主动消息);DELETE /mcp → 会话终止,返回 200 |
| 服务标识 | initialize 返回 serverInfo.name = sulong-ops-v2 |
| 无凭证 | 一律 401 + JSON-RPC -32001 |
2.1 客户端配置模板(Key 用变量,不写死)
{
"mcpServers": {
"sulong-ops": {
"type": "http",
"url": "https://eyetsy.com/mcp/sulong",
"headers": {
"X-Api-Key": "${SULONG_OPS_API_KEY}"
}
}
}
}
字段名随客户端而变:部分客户端用 "transport": "streamable-http",或把 url 写作 serverUrl。
2.2 Key 注入的四种方式(按客户端能力挑一种)
页面只写上面这段(域名 + ${SULONG_OPS_API_KEY} 变量名),真实 Key 一律留在本地。
方式一 · 系统环境变量 + ${} 插值(首选)
多数 MCP 客户端会把 ${VAR} 从进程环境展开。设一次即可:
# Windows(永久,需重开客户端生效)
setx SULONG_OPS_API_KEY "你的key"
# 仅当前会话
$env:SULONG_OPS_API_KEY = "你的key"
# macOS / Linux
export SULONG_OPS_API_KEY="你的key"
方式二 · 客户端自带的 env 块(支持时)
{
"mcpServers": {
"sulong-ops": {
"type": "http",
"url": "https://eyetsy.com/mcp/sulong",
"headers": { "X-Api-Key": "${SULONG_OPS_API_KEY}" },
"env": { "SULONG_OPS_API_KEY": "<本地填入,此文件不要提交/外发>" }
}
}
}
方式三 · 客户端不支持插值 → 直接填本地配置文件
把 ${SULONG_OPS_API_KEY} 换成真实 Key,写在本机私有配置里(该文件加进 .gitignore、不外发、不截图)。
这是可接受的——"不进公开页面"才是底线,不是"不进任何文件"。
方式四 · 密钥文件 + 本地启动器(多人/多机分发时)
Key 存成一个只有本机可读的文件(本项目的服务器侧既有先例:环境变量 → 项目根密钥文件 → 自动生成)。
客户端若不支持读文件,写一个极薄的本地启动器,把 Key 从环境/文件读入后再拉起客户端或生成配置;启动器本身只含读取逻辑,不含 Key 值。
2.3 Key 从哪来
Key 不在本 Skill 内,也不应写进任何公开页面。 由系统 Owner 通过安全渠道交付:
- 服务器端来源:环境变量
SULONG_OPS_API_KEY,或项目根目录的密钥文件; - 必须纯 ASCII——放入
X-Api-Key时若含非 Latin-1 字符(例如误粘贴含中文的占位符),
客户端会抛Cannot convert argument to a ByteString ... value greater than 255; - 一旦该 Key 曾在公开页面/聊天/截图里出现过,应立即轮换(改服务端
SULONG_OPS_API_KEY后重启中控进程)。
2.4 网络可达性
当前统一入口:https://eyetsy.com/mcp/sulong(上海 nginx 反代到中控 MCP;探活 GET https://eyetsy.com/mcp/sulong/health → 200,2026-10-05 实测全通)。
原入口已不可用(根因,2026-10-05):旧入口 https://www.dolookclub.com/mcp 已被腾讯云域名拦截——
http://www.dolookclub.com 返回 302 跳转到 dnspod.qcloud.com/static/webblock.html?d=www.dolookclub.com;
带该 SNI 的 HTTPS TLS 握手被 RST。故本机任何 Node/Electron 客户端都连不上(多表现为 fetch failed)。请勿再使用该域名。
排查与备用链路:若客户端报 fetch failed:
- 先做二分:DNS 是否解析、TCP 443 是否可连、TLS 握手是否被重置(TCP 通但 TLS 被 reset = 链路/防火墙在 TLS 阶段打断,与配置无关);
- 若公网链路不可用,改用 SSH 隧道(备用)把服务端口映射到本地,再把
MCP_BASE_URL指向本地端口即可(隧道本身已加密,用http://即可)。
三、关键词速查表(触发说明)
本 Skill 不会每次对话都调用,仅在用户语句命中以下关键词时触发:
| 工具 | 触发关键词(任一即可) |
|---|---|
mc_ping |
中控 MCP、MCP 通不通、sulong-ops 在线吗 |
mc_assign_task |
派单、派任务、给某 agent 派活、下发任务 |
mc_get_my_tasks |
我的任务、待办、我该做什么、任务清单 |
mc_get_inbox |
收件箱、inbox、线别收件箱、有没有新东西 |
mc_get_blockers |
阻塞、卡住、待人工处理、blocker |
mc_claim_task |
认领、领任务、接下这条 |
mc_report |
上报、汇报进度、回写结果、报一下 |
四、边界与纪律
- 只读优先:
mc_ping/mc_get_my_tasks/mc_get_inbox/mc_get_blockers为读取;
mc_assign_task/mc_claim_task/mc_report会写入中控状态,执行前应向用户确认目标任务。 - 不臆造:工具的入参与返回一律以服务端
tools/listschema 为准;拿不到 schema 就不要拼参数。 - 不泄露:不得把 Key、内部地址、任务内容原文写入任何公开页面、日志或第三方平台。
- 幂等与重试:网络失败时先确认是否已生效再重试,避免重复认领或重复上报。
五、自检步骤
GET https://eyetsy.com/mcp/sulong/health→ 期望 200(免鉴权)。POST https://eyetsy.com/mcp/sulong发initialize→ 期望返回serverInfo.name = sulong-ops-v2。- 发
tools/list→ 期望得到上表 7 个工具。 - 发
tools/call调mc_ping→ 期望ok: true。 - 若任一步失败:先区分 鉴权问题(401) 与 网络问题(fetch failed / TLS reset),再对症处理。