乐于分享
好东西不私藏

OpenClaw 教程 E08 · MCP、扩展与团队治理(收官)

OpenClaw 教程 E08 · MCP、扩展与团队治理(收官)

 

OPENCLAW 教程系列 · E08 · 收官

 从“能用”到“能定制”:MCP、扩展与团队治理

 AISTOC产品团队 · 2026 年 7 月
 

   本期你能带走什么:系列收官三件套——用 80 行 Node 写一个 MCP 服务器、装一个确定性 Tool、给一个 Gateway 装下多个 Agent 并做通道路由。附赠 8 集完整心智回顾。
 

一、MCP 就三个方法,先把神秘感撕掉

Model Context Protocol,2024 年 11 月末 Anthropic 开源,一年半时间已经成为 AI 应用的 USB-C 端口——官方原话,也是最精炼的类比。它做的事其实很朴素:让任何模型通过标准 JSON-RPC 调用任何工具。把它剥到最小骨架,就三个方法:

方法 用途
initialize 握手,交换协议版本与能力集
tools/list 服务器告诉客户端有哪些工具
tools/call 客户端调工具,服务器返回结果

传输方式有三种:stdio(本地进程管道,最简单)、SSE(HTTP 长连)、Streamable HTTP(2025-06 起主推,替代了早期的 HTTP+SSE)。本地开发用 stdio,公开服务器用 Streamable HTTP,中间还有 OAuth 2.1/OpenID Connect 统一鉴权——这些细节 MCP 生态已经把答案铺好,你抄配置就行。

一位在 Fintech 做 API 平台的朋友讲过 MCP 的价值给他带来的震撼:公司内部原本有 12 个内部 API 需要接入 AI 助手,以前是为每一个都写一个 Copilot / Claude / Cursor 三份适配器,合计 36 套代码。切到 MCP 之后,一次写好一个 MCP server,三个客户端都能用——工作量从 36 降到 12,而且新加一个客户端(比如 Windsurf)成本几乎为零。这就是“从 N×M 到 N+M”最朴素的现场感受。他事后总结:“MCP 不是让 AI 变聪明的协议,是让 AI 集成变便宜的协议。”这句话点得很准。

MCP 从 2024 年 11 月末发布到 2026 年年中的这一年半,生态铺得极快。Anthropic 首批就拉了 Block、Apollo;工具集成方 Zed / Replit / Codeium / Sourcegraph 紧跟;主流客户端 Claude Desktop / Cursor / VS Code Copilot / ChatGPT / Windsurf / Cline 全线落地;2025 年 9 月官方 Registry 上线预览,2026 年 6 月 Enterprise-Managed Authorization 稳定。AISTOC 团队估算 GitHub Copilot、Cursor Enterprise、Anthropic 官方三大生态今年内都会把 MCP 作为“外部工具接入的默认协议”。这一条协议的意义,在于让“AI 应用×外部世界”的接口从 N×M 变成 N+M。这就是”USB-C”这个比喻的分量所在。

 “Think of MCP like a USB-C port for AI applications. MCP replaces fragmented integrations with a single protocol.”
 —— Anthropic 官宣,2024-11-25

二、80 行 Node 写一个 MCP 服务器

AISTOC 内部实测:一个零依赖的 Node 脚本,跑通 initialize + tools/list + 三次成功 tools/call + 一次错误请求,全部通过——总代码 80 行以内,跑起来大约十几秒——一个能被 Claude Desktop 和 Cursor 直接挂载的合法 MCP 服务器就诞生了。核心结构:

const rl = readline.createInterface({ input: process.stdin });
rl.on(‘line’, async line => {
  const req = JSON.parse(line);
  const resp = await handle(req);
  if (resp) process.stdout.write(JSON.stringify(resp) + ‘\n’);
});

逻辑就是“读一行 JSON、处理、回一行 JSON”。90% 的复杂度不在写代码,而在几个第一次都会踩的坑:

  • stdout 是 JSON-RPC 通道,日志一定要写 stderr——用 console.error,别用 console.log,否则日志会混进协议流
  • 每条消息一行 = 一个 JSON,收发严格以 \n 分帧
  • notifications/initialized 是通知(没有 id),别回复
  • Windows 下 \r\n 行尾,客户端要 .trim()

挂到 Claude Desktop 或 Cursor 只需一个几行的 JSON 配置:

{
  “mcpServers”: {
    “hello-mcp”: {
      “command”: “node”,
      “args”: [“/path/to/hello-mcp/server.mjs”]
    }
  }
}

安全上有一件事必须点破:MCP 服务器不是无害的。stdio 服务器通常以 npx -y 直接跑任意 npm 包,恶意 server 可以扫描本地文件、窃取 token。官方规范里 Tool Safety 一条明写:tool descriptions 视为 untrusted。OpenClaw 的应对是分层——openclaw mcp doctor 做静态检查、probe 做启动时活性验证、Plugin Hook 层的 before_tool_call 做运行时拦截。装 MCP 服务器就像装浏览器插件——生态好东西多,但每一次授权都值得深呼吸一次。也别忘了 2025 年 9 月上线的官方 Registry:作为公开 MCP 服务器的 single source of truth,它给了你查证一个 server 是否可信的官方入口,别再从随机的博客链接 npx -y 陌生包。

这套挂法在 Claude Desktop 与 Cursor 里几乎一样,OpenClaw 也支持通过 openclaw mcp add 把外部 MCP 服务器注册到本地会话里。传输选项覆盖 stdio、SSE、streamable-http 三档,HTTP 侧还支持 OAuth 登录、静态 header、TLS 验证甚至 mTLS。想只暴露某几个 tool?加 toolFilter.include/exclude,支持 glob。所有这些细节 OpenClaw 官方文档 docs/cli/mcp.md 里都有一手参考,写完你自己的 MCP 服务器后半小时内可以完成上线。国内团队多看一眼 EMA(Enterprise-Managed Authorization)——2026 年 6 月 stable 之前,多个 MCP server 反复弹授权是最常见槽点,EMA 之后 Anthropic/Microsoft/Okta 三方推动 SSO 化,未来 MCP 生态的授权疲劳会显著缓解。

三、写自定义 Tool,还是写 Skill?

E03 讲了 Skill,E08 讲 Tool——两者最常见的困惑是“我到底该用哪个”。一张表说清:

维度 Skill Tool
触发 description 匹配 + 上下文加载 Agent 主动调用(有名字 + schema)
实现 Markdown + scripts JavaScript 模块
输入 自然语言 严格 JSON schema
输出 scripts 的 stdout JSON 对象
场景 工作流 / 手册 确定性函数(计算、格式化、外部 API)

选择原则一句话:能用确定性代码表达的,写 Tool;有工作流步骤要 Agent 判断的,写 Skill。AISTOC 内部实测的样板是一个中英混排字数统计 Tool word_count——20 行代码,处理码点、CJK、标点分词,四组用例全绿。装到 ~/.openclaw/plugin-skills/ 下,openclaw skills list 就能看到。

再往下走一层,OpenClaw 的扩展面其实有三层:Internal Hooks(HOOK.md 文件式,覆盖命令生命周期、Gateway 启动/重启/关闭、消息事件)、Plugin Hooks(进程内中间件,before_tool_callbefore_agent_reply 等,能拦截、改写、要求 approval)、Capability 注册(Provider / Channel / Tool / 图像 / 音频等能力入口)。三者不是替代关系,是分工——文件式 hook 管生命周期,插件 hook 管中间件,Capability 管新增能力。分工清楚,扩展性才有天花板。每个 hook 还支持 priority 排序与 timeoutMs 预算,operator 侧可以覆盖插件作者设定,防止某个插件卡住整条流水线。这些细节 docs/plugins/hooks.md 里有完整表格,写插件之前值得通读一遍。

四、一个 Gateway 装下 3 个 Agent 的路由术

E04 讲多 Agent 协作时提过一句:一个 Gateway 可以承载多个 Agent。真到落地一步,需要三个概念——agents.list(声明谁是谁)、bindings(哪个通道 × 哪个联系人给谁接)、channels.<channel>.accounts.<id>.allowFrom / groupAllowFrom(谁能开口)。一段 JSON5 配置片段:

{
  agents: {
    list: [
      { id: “coordinator”, workspace: “~/.openclaw/workspace-coordinator” },
      { id: “engineer”,    workspace: “~/.openclaw/workspace-engineer” },
      { id: “researcher”, workspace: “~/.openclaw/workspace-researcher” },
    ],
  },
  bindings: [
    { agentId: “engineer”,   match: { channel: “feishu”, peer: { kind: “direct”, id: “ou_xxx” } } },
    { agentId: “researcher”, match: { channel: “feishu”, peer: { kind: “group”,  id: “oc_xxx” } } },
    { agentId: “coordinator”, match: { channel: “feishu”, accountId: “*” } },
  ],
  channels: {
    feishu: {
      accounts: {
        default: {
          appId:     “cli_xxx”,
          appSecret: “FEISHU_APP_SECRET”,
          dmPolicy:  “allowlist”,
          allowFrom: [“ou_owner_open_id”],
          groupAllowFrom: [“oc_group_id”],
        },
      },
    },
  },
}

上面这段是从 OpenClaw 官方文档 docs/concepts/multi-agent.md 逐字抠出的权威骨架——AISTOC 团队内部实测确认可以直接落进 openclaw.json 生效。三条链路:agents.list 声明谁是谁、顶层 bindings 声明谁接哪个通道×哪个联系人、channels.<channel>.accounts.<id> 里的 allowFrom/groupAllowFrom 声明谁能开口。三个字段各司其职,别搞混。

治理浓缩五条:

  1. 1 个 Agent = 1 个 workspace + 1 套人格文件(AGENTS.md/SOUL.md/USER.md)
  2. bindings 从具体到通配,通配放最后——顺序错,全被兜底吞
  3. 敏感 Agent 一定要挂 dmPolicy: "allowlist"allowFrom / groupAllowFrom,别裸奔
  4. heartbeat 只留 1 个总协调 Agent 打开,其它按 cron 或事件唤起
  5. 跨 Agent 通信只走 sessions_send,别用飞书 @ 替代
 

关于第 3 条 dmPolicy + allowFrom 这一条再啰嗦一次:Agent 不设访问白名单,就等于把电话号码放在公共电话簿上,任何走通同一通道的人都能开口跟它对话——多数场景不合适。allowFrom 一份 owner 联系人清单、groupAllowFrom 一份团队群清单,是最基础的访问控制。E01 里说过入口挪位是 OpenClaw 的精髓,那这一层就是“入口的门禁”。

第 4 条 heartbeat 治理更容易被忽略。一个 Agent 每 30 分钟被自动唤起并不便宜——多个 Agent 都开着 heartbeat,token 消耗与推送噪音会呈线性叠加。生产上更聪明的做法是:只留一个总协调 Agent 开 heartbeat 巡检;专业 Agent(工程、研究、法务)改用 cron 或事件驱动,谁找它谁唤它,不闲着也不吵人。这条经验来自 AISTOC 内部多 Agent 团队的真实运行。

配置的正确应用姿势是三步走:先备份 openclaw.json,再用 gateway(action="config.patch") 增量合入需要新加的分支,最后 openclaw config validate 校验通过后 gateway(action="restart", note="apply multi-agent bindings")。这一套下来大约 3 分钟,比手改整份 JSON 稳一个数量级——增量合入不容易误伤已有配置,validate 会在真重启前把 schema 层错误拦下。

本节铁律:只读展示,未写入本机 openclaw.json。上述配置片段以及应用步骤(备份 → config.patch → validate → restart),AISTOC 内部作为可复用操作手册验证过完整逻辑,但实际未合入本机生产配置——写入前后 openclaw.json 大小与最后修改时间均未变。这份克制是我们对读者的诚意:教程演示,不做真操作。凡是“改系统级配置”的动作,都值得让人先深呼吸一次——尤其在生产环境里,慢一步比错一步值钱。

五、五个最容易踩的坑

症状 怎么救
MCP initialize 之后无响应 99% 是 console.log 混进 stdout;日志改走 stderr
Windows 正常 / Mac 挂 行尾 \r\n——客户端 .trim()
自定义 Tool 加载不到 目录名 = tool.js 里的 name,加上 package.json"type": "module"
bindings 顺序错,全被兜底吃 accountId: "*" 通配必须放最后一个
bindings 改动热重载不生效 gateway(action=restart)——bindings 属于重启才刷新的一档

六、系列回顾:一句话八集

期号 主题 一句话
E01 5 分钟跑通 入口从终端挪到聊天窗
E02 Agent 帮你写代码 补全 vs Agent 分水岭:意图 vs 击键
E03 Skills 与 Tools description ≤ 160 字节是你与 Agent 的合同
E04 多 Agent 协作 只有两把锤子——send 与 spawn
E05 从需求到 MVP 写代码是艺术,AI 压缩的是艺术之前的摩擦
E06 部署双轨 写代码是艺术,部署是工程
E07 运维闭环 让服务替你安静运转,是给未来自己发工资
E08 MCP 与治理 从“能用”顺利走到“能定制”

七、收官行动清单:你现在可以做的三件事

读到系列最后一集,如果只做一件事,那就选下面第一件;如果时间充裕,把三件都跑一遍。这三件事都不难,但落到你自己手里,才能让这八集从“我读过”变成“我用过”。

 ☐ 第一件:动手写一个 hello-mcp 服务器。照本期骨架敲 80 行,挂到 Claude Desktop 或 Cursor 或 OpenClaw,让 5 组 JSON-RPC 请求全绿。这是你和 MCP 生态之间的第一次握手,做完之后,MCP 对你就从“名词”变成了“动词”。
 ☐ 第二件:写一个属于你自己的 Tool。不要求业务复杂——一个 word_count、一个把日期文本转 ISO 时间戳的 parse_date、一个把 markdown 转纯文本的 md_to_text,都够了。写完让 Agent 主动调用一次,才算完成回路。
 ☐ 第三件:回顾自己的 Agent 治理配置。打开你自己的 openclaw.json,对着本期五条治理原则逐条自检——bindings 顺序对不对、敏感 Agent 有没有 dmPolicy="allowlist"+allowFrom、heartbeat 是不是多开着几个。发现问题就用 config.patch 三步走修一次,把你自己的日常先规范起来。

八、写在最后

八集下来,我们从“5 分钟装完”一路走到了“自定义 MCP + 多 Agent 治理”。回头看,OpenClaw 让人舒服的其实不是任何单一功能,而是整套设计的克制感——只留两把锤子(send 与 spawn)、Skill 一个文件夹搞定、cron 跑在 Gateway 里不多不少一个数据库、bindings 从具体到通配一条线走通。每一处选择都在拒绝“多一点抽象、多一层框架”的诱惑。这在 AI 框架泛滥的今天尤其难得——很多同类项目喜欢用抽象换代码量,让读者以为学得更多,实际却离能落地更远。

AI 时代的工程能力,说到底还是“把复杂系统留在简单心智里”。这不是新问题,也不是 AI 独有的问题——只是这一次,AI 让我们有机会用更少的模板去做更多的事。

如果你读到这里已经不是工程师身份,也不必焦虑。这 8 期能带走的最小心智其实只有两句:入口比工具更重要(E01)、把工作流写成 Skill 才让 Agent 稳定接管(E03)。剩下的技术细节,等你团队里的工程师需要时再回来看即可。

愿你也能在自己的场景里,把这份“少即是多”落到能长期跑的代码里去。下次不见——除非你自己写下一集,然后回过来告诉我们。

—— AISTOC产品团队

 

📚 OpenClaw 教程系列 · 8 期完整目录

 

   E01 · 5 分钟跑通 OpenClaw
   E02 · 让 Agent 帮你写代码
   E03 · Skills 与 Tools 详解
   E04 · 多 Agent 协作
   E05 · 应用开发实战:从需求到 MVP
   E06 · 部署到服务器(Windows / Linux 双轨)
   上一篇:E07 · 运维闭环
   ◎ E08 · 进阶:MCP、扩展与团队治理(当前 · 收官)
 
 AISTOC产品团队 出品 · 数据来源:Anthropic MCP 官方规范(2025-06-18 / 2026-07-28 RC)、MCP 官方博客与 Registry Preview(2025-09-08)、OpenClaw 本地文档(cli/mcp.md · plugins/architecture.md · plugins/hooks.md)、AISTOC 内部 Windows Server 2022 实测:hello-mcp 服务器 5 组 JSON-RPC 请求全部通过 + word_count Tool 4 组用例通过 + 治理配置片段成文(未写入本机 openclaw.json)