🐎 第6章 海纳百川:MCP
📄 一句话概括

生态里的服务器分两类:官方维护的和第三方写的。装之前先算两笔账——常驻 token 和权限面。 演示里六个服务器、十六个工具,常驻一千九百二十 token。不算就装,等于每次都多付一遍。

📝 本章和前面几章的关系

上一节自己写了一个服务器,这一节退一步看现成的——生态里已经有上千个,问题是该装哪几个。 这一节没有代码,全是判断。判断的依据是两笔账,而这两笔账大多数人都没算过。

一、两类来源

官方维护的:文件系统、Git、数据库、浏览器这类基础能力。特点是接口稳、权限边界说得清楚。 第三方写的:工单系统、日历、各种 SaaS 的对接。特点是贴业务,但质量和维护节奏参差。 装第三方的东西要多看一眼:它多久更新一次、issue 有没有人回、有没有钉版本。

这不是歧视第三方,是「你能自己审的只有代码」——官方的你能读,第三方的往往读不动。

二、第一笔账:常驻 token

每个工具的名字、说明、参数 schema 都要常驻在上下文里——和技能的描述是同一笔税(3.3 节)。 演示里六个服务器、十六个工具,常驻一千九百二十 token。窗口按一万算,占百分之十九。 五分之一。这还没算真正干活的对话,也没算工具返回的内容。

这个数还算客气:真实服务器的 schema 往往比一百二十 token 长得多, 一个数据库服务器的工具描述就能到八百。

三、第二笔账:权限面

权限面指的是:装上它之后,模型能碰到什么范围。 文件系统能读写磁盘、数据库能查全部表、浏览器能访问任意网址。这三个的权限面都算高。 权限面越大的,越要想清楚「真的需要吗」。六个全装,等于把六个方向的入口都开给模型。

实用做法是「按需装、按项目装」:这个项目要查库就装数据库服务器,不需要的别装。 装了不只用 token,还多一个攻击面——多一个第三方代码在你机器上跑。

四、一个能直接抄的组合

日常开发:文件系统加 Git。两个就够,权限面可控,覆盖了读写和看历史。 数据排查:文件系统加数据库,数据库必须限只读。这一类工具最容易出事,收窄要放在服务器侧。 对外调研:浏览器单独一个项目用。它的权限面最大,别和能干活的工具混在一个会话里。

三组都不超过两个服务器。这不是巧合——两个往往就够覆盖一类活。

五、怎么判断值不值得装

三个问题:这件事我多久做一次?不做会怎样?它有写权限吗? 高频、不做会卡住、又没有写权限——装。低频、能用命令行代替——不装。 有写权限的要单独想一遍:这个写操作出错了能不能回滚?不能回滚的,先别给工具。

一句话:服务器不是越多越好。每装一个,常驻预算和攻击面各涨一次,而真正每天用到的往往只有两三个。

六、动手 Demo:六个服务器,装之前先算两笔账

生态里的服务器大致分两类:官方维护的和第三方写的。装之前要算两笔账:常驻 token、权限面。 这里把六个常见服务器摆出来,逐个算一遍。

SRV = [(u"文件系统", u"官方", 4, 480, u"高"),
       (u"Git", u"官方", 2, 240, u"中"),
       (u"日历", u"第三方", 2, 240, u"低")]

total = sum(n for _n, _s, _t, _k, _p in SRV)      # 工具数
cost = sum(k for _n, _s, _t, _k, _p in SRV)       # 常驻 token

实跑输出:

--------------------------------------------------------------------
六个服务器,装之前先算两笔账
--------------------------------------------------------------------

  生态里的服务器大致分两类:官方维护的和第三方写的。装之前要算两笔账:常驻 token、权限面。

  ① 六个服务器的画像
  --------------------------------------------------------------------
| 服务器 | 来源 | 提供什么 | 权限面 |
|---|---|---|---|
| 文件系统 | 官方 | 读、写、列目录 | 高 |
| Git | 官方 | 看历史、看 diff、提交 | 中 |
| 数据库 | 官方 | 只读查询、表结构 | 高 |
| 浏览器 | 第三方 | 抓页面、点按钮 | 高 |
| 工单系统 | 第三方 | 查工单、改状态 | 中 |
| 日历 | 第三方 | 看日程、建会议 | 低 |


  ② 第一笔账:常驻 token
  --------------------------------------------------------------------
  每个工具的名字、说明、参数 schema 都要常驻在上下文里——和技能的描述是同一笔税(3.3 节)。
| 服务器 | 工具数 | 常驻 token |
|---|---:|---:|
| 文件系统 | 4 | 480 |
| Git | 2 | 240 |
| 数据库 | 4 | 480 |
| 浏览器 | 2 | 240 |
| 工单系统 | 2 | 240 |
| 日历 | 2 | 240 |

  六个服务器、十六个工具,常驻 1920 token。窗口按一万算,占 19%。
  这个数还算客气——真实服务器的 schema 往往比一百二十 token 长得多,
  一个数据库服务器的工具描述就能到八百。

  ③ 第二笔账:权限面
  --------------------------------------------------------------------
  「权限面」= 装上它之后,模型能碰到的范围。
  文件系统能读写磁盘、数据库能查全部表、浏览器能访问任意网址。
  权限面越大的,越要想清楚「真的需要吗」。六个全装,等于把六个方向的入口都开给模型。
  实用做法是「按需装、按项目装」:这个项目要查库就装数据库服务器,不需要的别装——装了不只用 token,
  还多一个攻击面。

  ④ 一个能直接抄的组合
  --------------------------------------------------------------------
| 场景 | 装什么 | 注意 |
|---|---|---|
| 日常开发 | 文件系统、Git | 两个就够,权限面可控 |
| 数据排查 | 文件系统、数据库(只读) | 数据库必须限只读 |
| 对外调研 | 浏览器 | 权限面最大,单独一个项目用 |

  ! 一句话:服务器不是越多越好。
  每装一个,常驻预算和攻击面各涨一次,而真正每天用到的往往只有两三个。

①两类来源:官方维护的基础能力(文件系统、Git、数据库、浏览器),第三方写的业务对接(工单、日历)。 第三方的要多看一眼维护节奏和有没有钉版本。 ②第一笔账是常驻 token:每个工具的名字、说明、参数 schema 都要常驻。 六个服务器十六个工具常驻一千九百二十 token,窗口按一万算占百分之十九。 这个数还算客气:真实服务器的 schema 往往长得多,一个数据库服务器的工具描述就能到八百。 ③第二笔账是权限面:文件系统能读写磁盘、数据库能查全部表、浏览器能访问任意网址。 六个全装等于把六个方向的入口都开给模型。 ④实用做法是按需装、按项目装。装了不只用 token,还多一个攻击面。真正每天用到的往往只有两三个。

30 秒实验

  1. 把窗口从一万改成四千(长会话开新窗的场景),重算常驻那一千九百二十 token 占多少。 这个比例说明什么?
  2. 把六个服务器减到两个(文件系统加 Git),重跑一遍。省下的 token 换来了什么损失?
  3. 给浏览器那个加上「只允许访问白名单域名」,重算它的权限面。 权限面能靠配置收窄,还是必须靠工具自身?

常见误区

  1. 看到什么装什么。每装一个都要常驻 token、都多一个攻击面,而常用的只有两三个。
  2. 把浏览器和能干活的工具装在同一个会话里。权限面最大的那个,该单独一个项目。
  3. 只算 token 不算权限面。前者是多花钱,后者是多开一扇门。
  4. 装第三方服务器不钉版本。它一次更新就可能变行为,而你什么都没改。
  5. 以为官方的一定安全。官方只是「你能读到它的代码」,不等于它没有漏洞。
自测三问(点开对答案) 1. 装 MCP 服务器要算哪两笔账? —— 常驻 token(工具的名字、说明、schema 都要占窗口)和权限面(装上之后模型能碰到什么范围)。 2. 为什么六个服务器全装是坏主意? —— 常驻预算和攻击面各涨六次,而真正每天用到的往往只有两三个。 3. 日常开发推荐装哪两个?为什么? —— 文件系统和 Git。覆盖读写和看历史,权限面可控,两个就够。

账算完了,下一节算另一笔不太好算的账:这些服务器装进来之后,信任的边界画在哪儿。

相关笔记