跳到主内容

MCP 服务器怎么选和接:能力清单、接入顺序与自建取舍

100%
MCP 服务器怎么选和接:能力清单、接入顺序与自建取舍

选 MCP 服务器不要先看数量,先看它暴露的是 tools 、 resources 还是 prompts,再确认它的权限边界能不能收窄。多数团队踩的坑都出在这里:接了一堆服务器,模型可用工具暴涨到上百个,选错工具的概率和上下文占用一起上升,而其中真正用到的不超过十个。

第一步:分清三种能力,别混着挑

MCP 服务器对外只提供三类能力,性质完全不同:

  • Tools(工具):模型可以调用的函数,会产生副作用。这是绝大多数服务器提供的主要能力。
  • Resources(资源):可被读取的数据,通过 URI 暴露,有的还支持订阅。适合放文档、 schema 、配置这类”被读”的内容,比做成工具更省上下文。
  • Prompts(提示模板):预置的可复用流程,由用户或客户端触发,不是模型自动调用。

挑服务器时先问一句”我需要的是让它做事,还是让它给数据”。做事要 tools,给数据优先看 resources——后者对上下文友好得多,也更容易做缓存。

一个很实用的筛选标准:如果一个服务器同时提供几十个工具,先做裁剪再接入。工具集越小、命名越清晰,模型选对的概率越高。宁可接三个各带五个工具的服务器,也不要接一个带四十个工具的。

第二步:按用途分层,而不是平铺接入

官方参考实现大致可以分成四类,接入优先级也不同:

类别典型服务器接入优先级注意点
数据与文件Filesystem 、 SQLite 、 PostgreSQL最先接,收益最直接Filesystem 必须限定允许目录;数据库优先用只读模式
开发工具Git 、 GitHub 、 GitLab高,工程场景刚需写操作要单独确认,令牌用最小权限
检索与浏览Fetch 、 Brave Search 、浏览器自动化中,按需接会触达外部世界,必须配域名白名单与超时
业务与协作Slack 、 Linear 、 Google Maps 等低,确认有真实需求再接涉及真实业务数据,先定权限边界再接

官方维护的实现和社区实现的可靠性差距很大。社区服务器没有经过验证,接之前至少要看三件事:最近有没有更新、开源协议、以及它是否需要过宽的权限(一上来就要管理员令牌的,先放一放)。

第三步:看工具本身的质量,而不只是功能清单

同样是”能查数据库”,工具写得好的和写得差的,模型调用成功率能差出一倍。检查清单:

  • description 一句话说清何时用,并且写明不覆盖什么、该用哪个兄弟工具。这条能让模型少走很多试错调用。
  • inputSchema 有约束:枚举代替自由字符串、有 minLength / maximum / format 、必填项标清楚、additionalProperties: false。
  • 有 annotations:readOnlyHint、destructiveHint、idempotentHint、openWorldHint 这四个提示决定客户端是否要弹确认。破坏性操作在工具名里就要看出来。
  • 返回体小而稳定:只回 ID 、摘要与分页游标,大内容给 URI 让调用方按需取。
  • 错误可恢复:业务错误用 isError: true 返回可读文本,协议错误走标准 JSON-RPC 错误码,并且指明是哪个字段出的问题。
annotations 说谎比不写更危险
标注只是提示,规范并不保证它为真,客户端也不该把它当安全依据。但实践中客户端会照着它决定是否弹确认——把写操作标成 readOnlyHint: true,会让本该二次确认的破坏性调用被直接放行。所以宁可省略提示,也不要标错。

第四步:定接入顺序,一次只加一个

并发接五个服务器之后出问题,你没法判断是谁的锅。推荐顺序:

  1. 先接一个只读的、本地的(如 Filesystem 限定到单个目录),跑通整条链路。
  2. 再加一个带写能力的,观察确认流程是否顺畅、误操作是否拦得住。
  3. 最后接触达外部网络的(Fetch 等),配域名白名单、超时与调用频率限制。
  4. 每加一个都回头看一次:工具总数、平均调用成功率、单次会话的 token 消耗。

接入位置也有讲究,配置放在哪一层决定了谁能共享、会不会把密钥带进仓库,详见 MCP 配置放哪一层。多服务器编排时的命名冲突与成本问题见 一个客户端接多个 MCP Server。

第五步:什么时候必须自建

有四种情况,现成的服务器救不了你:

  • 内部系统:没有公开实现,只能自己包一层。
  • 权限需要按调用者区分:公共服务器通常是一个凭据走天下,要做租户级隔离就必须自己控制。
  • 工具集需要裁剪到极小:把内部几十个接口全暴露成工具是最常见的错误做法,正确做法是挑出三五个高频动作单独包装。
  • 要返回结构化数据:让调用方直接消费类型化的输出,而不是重新解析 Markdown 文本,需要自己定义输出 schema 。

自建时如果已有 REST API,优先走自动转换而不是重写,取舍见 把现有 REST API 包装成 MCP Server。写完之后怎么测、怎么发,分别看 MCP 服务器怎么测试 和 MCP 服务器怎么发布分发。


  1. 确认能力类型:要的是做事(tools)还是给数据(resources),据此筛掉一半候选。

  2. 看工具集规模:超过二十个工具的先看能不能裁剪,不能裁剪就换一个或自己包一层。

  3. 检查 description 、 inputSchema 约束、 annotations 与返回体大小四项,任一项缺失就当作质量不合格。

  4. 定权限边界:限定目录或作用域、只读优先、凭据用最小权限,并确认它不要求过宽授权。

  5. 单独接入并观察一轮:记录调用成功率与 token 消耗,确认没问题再加下一个。

别忘了安全这一层

接入之后的常见风险有三类:提示注入(外部内容里藏指令诱使模型调用写操作)、凭据泄露(令牌进了上下文或配置仓库)、越权(工具能用但权限没收窄)。前两类在 MCP 安全风险怎么防 里有完整清单,凭据的正确放法见 MCP 服务器凭据怎么管。

另外一点:能力是协商出来的,不是服务器单方面声明的。客户端和服务器在建立连接时会交换各自支持什么,版本对不上或能力没对齐是”接上了但工具一个都不出现”的第一大原因,相关机制见 MCP 能力协商与版本兼容。


工具越多模型越强吗
不是。工具数量超过二三十个之后,模型选错工具的概率明显上升,而且每个工具的定义都要占用上下文。正确的做法是按需裁剪到十几个以内,宁可多接几个各自精简的服务器,也不要接一个大而全的。

社区服务器能直接用吗
官方参考实现可以直接用;社区实现未经统一验证,也没有背书。接之前至少确认三点:最近是否还在维护、许可证是否允许你的用法、它需要的最小权限是不是过宽。涉及生产数据或写操作的一律先在自己环境跑通再上。

为什么服务器接上了但模型看不到工具
按顺序排查三件事:一是能力协商是否成功,服务器有没有声明 tools 能力;二是配置作用域放错了位置,当前会话没加载到;三是工具列表为空或客户端缓存了旧列表。用 Inspector 直连服务器看一次 tools/list 最快能定位。

同一个需求,用工具还是用资源
需要触发动作、有副作用的用工具;只是提供内容给模型读的用资源。资源通过 URI 引用,按需拉取,对上下文更友好,也更容易缓存。把一堆”读文档”的操作都做成工具是常见的浪费。

小结

选 MCP 服务器本质上是在做减法:先按能力类型筛,再按工具集规模裁,然后定权限边界,最后逐个接入观察。接得越少、每个越精,模型反而越强。真找不到合适的就自己包一层——只暴露三五个高频动作的小服务器,往往比大而全的现成实现好用得多。

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

975文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示