主题
MCP:给 Agent 接工具前,先把接口边界说清楚
今天先记住
MCP(Model Context Protocol)不是“又一个工具库”,而是一套让 Agent 和外部工具、资料源对接的协议边界。它要解决的具体问题是:同一个 Agent 今天接文件系统,明天接 GitHub,后天接数据库时,不能每接一个系统就重新发明一套工具发现、参数说明、权限声明和结果返回格式。
它在大地图里的位置
还是这条链路:
txt
用户目标
-> 上下文 / 记忆
-> 规划 / 决策
-> 工具调用 / 外部系统
-> 执行 / 观察结果
-> 评估 / 修正
-> 最终输出前面讲过 Tool Calling 和 Planner / Executor。MCP 位于“工具调用 / 外部系统”这一层更靠下的位置:Tool Calling 说的是模型怎么发起一次工具调用,MCP 说的是外部系统怎样把“我有哪些工具、怎么调用、返回什么、需要什么权限”稳定暴露出来。
换句话说,Tool Calling 像一次电话;MCP 更像电话簿、接线规则和通话格式。
它到底是什么
一个 MCP server 可以把外部能力包装成 Agent 可发现、可调用的资源。比如文件搜索、日历查询、数据库读取、文档检索、浏览器操作,都可以通过 MCP server 暴露出来。
Agent 或宿主应用作为 MCP client,先发现 server 提供的能力,再根据工具描述决定是否调用。理想情况下,Agent 不需要知道某个服务背后是 REST、GraphQL、命令行还是本地脚本;它只需要面对统一的工具契约。
重点不在“能不能调到”,而在“调之前能不能知道边界,调之后能不能解释结果”。
为什么 Agent 里会用到它
真实 Agent 很少只靠模型回答。它要读项目文件、查文档、建 issue、跑命令、改配置、提交代码。没有协议边界时,每个集成都变成一次临时胶水:参数名不一致、错误格式不一致、权限也散在各处。
MCP 把这些集成收束到一个可描述的接口层。这样 Planner 能看到有哪些工具可用,Executor 能按 schema 调用,观察结果也能回到同一条 Agent loop 里。
它避免的失败不是抽象的“接入复杂”,而是:Agent 以为自己有写权限其实没有;工具返回一段自然语言导致系统无法判断成功失败;换一个数据源后,原来的 planner 全部失效。
怎么判断它有没有用
如果你的 Agent 要接多个外部系统,而且这些系统会被不同任务反复调用,MCP 值得考虑。
如果只是一个固定按钮调用一个固定接口,普通后端 API 就够了,不必为了显得“Agent 化”硬包 MCP。
如果工具有权限、审计、失败重试或多客户端复用需求,MCP 的价值会变大,因为接口契约本身就成了系统边界。
如果 MCP server 只暴露“万能执行命令”这种大工具,却没有细粒度描述、参数限制和权限说明,那它只是把风险换了个入口。
最近冒出来的词
今天不追新词,先把主线概念讲稳。
一个小例子
txt
Input:
用户说:“把今天的 AI Agent Daily 发布到文档站,构建后只提交相关文件。”
Process:
1. Agent 通过文件系统 MCP server 发现 read_file、write_file、list_dir。
2. 通过 git MCP server 发现 status、add、commit、push。
3. Planner 决定:先查旧课 -> 写新课 -> 构建 -> git status -> 只 add 新课文件 -> commit -> push。
4. Executor 每一步调用对应工具,并检查返回状态。
Output:
新增 docs/ai-agent/2026-07-23.md;
构建通过;
commit 只包含本次课程文件;
push 到 main 后页面 URL 变成 /ai-agent/2026-07-23。这个例子能用来判断真实系统:如果工具列表里没有“只提交哪些文件”的边界,Agent 很容易把无关未跟踪文件一起提交。MCP 不能自动让它谨慎,但能把可用能力和调用边界先摆到桌面上。
常见误区
- 以为 MCP 等于 Agent。MCP 只是工具和上下文协议,Agent 还需要规划、执行、观察和评估。
- 以为接了 MCP 就安全。安全来自权限设计、审批、审计和最小能力暴露,不来自协议名字。
- 以为所有工具都该做成 MCP。一次性脚本、单页面按钮、内部固定接口,未必需要协议层。
- 以为 MCP server 越多越好。工具越多,选择错误、权限混乱和延迟都会增加。
今天自测
- Tool Calling 和 MCP 分别解决哪一层问题?
- 为什么“万能 shell 工具”不是一个好的 MCP 暴露方式?
- 如果一个 Agent 经常误用工具,你会先检查模型,还是先检查工具描述和权限边界?