第 9 章 · MCP 与工具扩展协议

04 · MCP 的边界

MCP 是扩展机制,不是主线逻辑。先有本地核心能力,再谈外部扩展。

MCP 解决的问题和不解决的问题

MCP 解决的问题:

  • 怎么接入外部工具——标准化的协议,不改 agent 代码
  • 怎么管理工具生命周期——子进程隔离,启动/发现/调用/关闭
  • 怎么让不同 agent 共享工具——同一个 MCP server,多个 agent 可用

MCP 不解决的问题:

  • 怎么设计好用的工具——描述是否清晰、参数是否合理、结果是否有用
  • 怎么让模型正确使用工具——这还是系统提示词和工具描述的责任
  • 怎么保证外部工具的可靠性——MCP server 是第三方提供的,质量不可控

理解这些边界很重要。MCP 是一个传输层——它让工具可以被调用,但不保证工具本身的质量。

先有核心能力,再谈外部扩展

这个原则贯穿整个课程的设计:

章节核心能力扩展机制
第 3 章8 个内置工具
第 7 章3 个内置 skillSkillRegistry 可注册新 skill
第 8 章审计日志 hookHookManager 可注册新 hook
第 9 章MCP client接入任意 MCP server

先有内置工具,保证 agent 在任何环境下都有基本能力。然后提供扩展机制(skill、hook、MCP),让用户按需增强。

如果一个 agent 连基本的文件搜索和代码修改都做不好,给它接入 100 个 MCP server 也不会变强。工具的质量比数量重要。

安全考虑

MCP 工具在独立子进程中运行,但这不代表它是安全的:

  • MCP 工具可以执行任意操作(网络请求、文件系统访问)
  • MCP server 可能返回误导性的工具描述
  • 恶意的 MCP server 可能注入虚假的工具调用结果

在当前实现中,MCP 工具也受到权限系统的管控——permissionGuard 会检查所有工具调用,包括 MCP 工具。所以 MCP 工具如果需要写文件或执行命令,仍然需要用户确认。

版本更新

main.ts 的版本号从 v0.8.0 升级到 v0.9.0

本章回顾

第 9 章实现了 MCP 工具扩展,让 agent 从封闭工具箱升级为可扩展平台:

新增文件作用
MCP 类型src/mcp/types.tsJSON-RPC、工具定义、配置等类型
McpClientsrc/mcp/client.ts连接 MCP server、发现和调用工具
wrapMcpToolsrc/mcp/client.ts桥接 MCP 工具到内部 Tool 接口
MCP 集成src/main.ts从环境变量加载配置、合并工具列表

加上之前章节的测试,整个项目现在有 173 个测试用例。

课程进展回顾

到第 9 章结束时,mini-coding-agent 已经从一个"只能调模型 API 的脚本"演进为一个功能完整的 coding agent:

能力章节状态
最小 agent第 1 章完成
ReAct 循环 + 计划第 2 章完成
完整工具箱第 3 章完成
权限系统第 4 章完成
事件流 + 终端渲染第 5 章完成
记忆 + 上下文工程第 6 章完成
Skill 能力模块第 7 章完成
Hook 生命周期第 8 章完成
MCP 工具扩展第 9 章完成

还剩第 10 章(Multi-Agent 协作)和第 11 章(CLI 产品化)。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page