Skip to content

MCP

MCP(Model Context Protocol)是一种让 AI 客户端接入外部工具和数据源的协议。它关注的不是“模型如何生成回答”,而是“模型所在的客户端怎样以统一方式发现工具、读取资源、调用能力”。

可以把 MCP 理解为 AI 工具生态里的统一插座:客户端不需要为每个数据库、文件系统、业务 API 都写一套私有接法,而是通过 MCP Server 暴露标准能力。

MCP 架构

与其他模块的关系

  • 大语言模型负责理解和生成,见 大语言模型
  • 智能体负责组织多步任务,见 智能体
  • Skill 负责告诉 Agent 什么时候、怎样使用工具,见 Agent Skill

MCP 只解决连接层问题。它不会自动保证任务目标正确,也不会替代权限设计、审计和人工确认。

基本架构

角色作用例子
AI 客户端承载模型和交互界面IDE、桌面助手、命令行代理
MCP Client客户端里的协议连接层发现 Server、列出工具、发起调用
MCP Server封装外部能力文件读取、数据库查询、业务 API
外部资源真正的数据或系统仓库、数据库、工单、搜索、云服务

MCP Server 像一个受控服务台。它不应该把整个系统无差别暴露给模型,而应该把能力拆成明确、可审计、权限受限的工具。

MCP 能暴露什么

常见能力包括:

  • 工具:执行一个动作,例如查询订单、搜索文档、创建工单。
  • 资源:读取一类内容,例如文件、数据库表、知识库页面。
  • 提示模板:提供固定任务入口,例如代码审查模板、摘要模板。

工具更像按钮,资源更像资料柜,提示模板更像标准表单。三者可以组合,但职责不同。

什么时候需要 MCP

适合使用 MCP:

  • 多个 AI 客户端都要访问同一类内部工具。
  • 工具需要统一权限、审计和参数校验。
  • 希望把数据库、文件、业务系统以标准方式暴露给 Agent。
  • 不希望每个客户端都维护一套私有插件。

不一定需要 MCP:

  • 只是一次性脚本或本地临时命令。
  • 工具只服务一个固定应用,且已有稳定私有集成。
  • 数据不能被模型侧读取,必须通过后端固定流程处理。

一个具体场景

假设要做“订单客服助手”:

  1. 用户问:“这笔订单为什么还没发货?”
  2. 模型需要订单状态,但不能直接访问数据库。
  3. MCP Server 暴露一个 query_order_status 工具,只允许按订单号查询必要字段。
  4. 客户端把工具结果放回上下文。
  5. 模型基于订单状态和发货规则生成答复。

这里的关键不是“模型更聪明”,而是外部数据以安全、可控、可追踪的方式进入上下文。

设计 MCP Server 的原则

工具要小而明确

不要暴露“执行任意 SQL”这类过宽工具。更稳妥的是暴露受控动作:

  • 查询订单状态。
  • 查询用户最近工单。
  • 搜索知识库文章。
  • 创建一条草稿回复。

工具越接近业务动作,越容易限制参数、审计结果和做权限控制。

权限要最小化

只读能完成任务,就不要给写权限。只需要订单状态,就不要返回完整用户信息。只需要某个目录,就不要开放整个文件系统。

结果要适合模型使用

工具返回不要过长。应包含完成任务需要的字段、必要状态和错误信息。长日志、长表格、长文档应支持分页、过滤或摘要。

错误要可判断

工具失败时应区分:

  • 参数错误。
  • 无权限。
  • 资源不存在。
  • 外部系统超时。
  • 内部异常。

模型或 Agent 才能决定是重试、换参数、请求人工,还是停止。

安全边界

MCP 带来的风险主要来自“模型能触达外部系统”。需要重点处理:

  • 凭证不进入对话和日志。
  • 工具参数做白名单和类型校验。
  • 写操作需要幂等设计和人工确认。
  • 访问结果脱敏。
  • 调用日志可审计。
  • 不同环境使用不同权限。

MCP Server 不应把模型当成可信调用方。模型产生的是意图,Server 负责验证这个意图能不能执行。

排查路径

现象优先检查
客户端看不到工具Server 是否启动、配置路径是否正确、协议连接是否成功
工具调用失败参数 schema、权限、环境变量、外部系统连通性
返回太长污染上下文是否需要分页、过滤、摘要或字段裁剪
模型误用工具工具命名是否清楚、描述是否准确、Skill 是否补充流程
权限过大是否拆分只读/写入工具,是否按环境隔离凭证

总结

MCP 的价值是标准化连接外部世界。它把工具和资源包装成 AI 客户端可发现、可调用、可审计的能力。设计 MCP 时重点不是接得越多越好,而是工具边界清楚、权限最小、返回可用、失败可判断。

别急,先让缓存热一下。