Skip to content

MCP:AI 应用的 USB-C ​

MCP(Model Context Protocol)由 Anthropic 于 2024 年 11 月开源,现已成为行业事实标准。官方定义:连接 AI 应用与外部数据源和工具的开放协议。

解决什么问题 ​

没有协议的世界是这样的:M 个 AI 应用 × N 个外部系统(GitHub、Slack、数据库、文件系统……),每个应用都要为每个系统写一遍定制集成——M×N 种组合,组合爆炸。

MCP 把它变成 M+N:应用只需实现一次 MCP 客户端,系统只需实现一次 MCP 服务器,中间用统一协议对话。这也是它最常用的比喻:​AI 应用的 USB-C 接口​——设备(数据源)各异,接口统一。

架构:Host、Client、Server ​

MCP 采用客户端-服务器架构,三个角色各司其职:

text
┌─────────────────────────────┐
│  Host(宿主应用,如 Claude Code、某个 IDE)│
│  ┌──────────┐  ┌──────────┐ │
│  │MCP Client│  │MCP Client│ │      1:1 连接
│  └────┬─────┘  └────┬─────┘ │
└───────┼─────────────┼───────┘
        ▼             ▼
  ┌──────────┐  ┌──────────┐
  │MCP Server│  │MCP Server│      连接 GitHub、Postgres、
  │ (GitHub) │  │(Postgres)│      文件系统……
  └──────────┘  └──────────┘
  • Host:用户面对的 AI 应用,管理 MCP 客户端与安全策略。
  • Client:Host 内部与单个 Server 保持 1:1 连接的组件。
  • Server:暴露具体能力的轻量服务,通过 stdio 或 HTTP(Streamable HTTP)与 Client 通信。

Server 提供什么 ​

一个 MCP Server 可以暴露三类原语:

原语含义控制方
Tools模型可主动调用的动作(查库、发消息、建 issue)模型决策
Resources可读取的数据(文件、记录、schema),由应用决定何时注入应用驱动
Prompts预置的提示词模板,由用户显式选择用户驱动

其中 Tools 是 Agent 场景的主角:协议会把 Server 声明的工具转成宿主模型的 function calling 格式——MCP 在协议层,function calling 在模型 API 层,前者是后者的“分发网络”。

一个实际的接入样例 ​

以 Claude Code 为例,接入一个 GitHub Server 只需在配置中声明:

json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "..." }
    }
  }
}

启动后 Host 发现 Server 声明的全部工具并注入模型,Agent 即可“原生”操作 GitHub——应用方没有写过一行 GitHub 集成代码。

冷静看待 MCP ​

MCP 不是万能药,选型时注意:

  • 它解决接入标准化,不解决工具质量。Server 暴露的工具设计得差,模型照样用不好——工具设计原则一节依然适用。
  • 信任边界在 Host。第三方 Server 拥有你授予的权限,恶意或被投毒的 Server 是真实的安全面(工具描述本身可能携带提示注入)。权限最小化与人工确认机制不可省略——详见进阶篇“安全与权限”一章。
  • 简单场景未必需要它。内部系统自己写几个工具函数更直接;MCP 的价值随“要接的系统数量”增长。

参考 ​

最近更新