🔌 MCP 协议详解

MCP (Model Context Protocol) 是由 Anthropic 于 2024 年底推出的开放协议,旨在为 AI 模型与外部工具/数据源之间建立标准化的通信接口。类比 USB-C 之于硬件外设,MCP 旨在成为 AI 领域的"通用接口"。

🌟 起源与设计理念

❌ MCP 出现之前

  • 每个 AI 应用各自实现工具集成
  • 工具接口碎片化,缺乏统一标准
  • 工具开发者需适配每个 AI 平台
  • 重复造轮子,维护成本高

✅ MCP 的设计目标

  • 一次编写,到处运行 —— Server 实现一次,所有 MCP Client 可用
  • 标准化接口 —— 统一工具发现、调用、结果返回
  • 安全可控 —— 用户明确授权,最小权限原则
  • 可扩展 —— 支持社区贡献的第三方 Server

🏗️ 架构设计

MCP 三层架构
🖥️ MCP Host
Claude Desktop / IDE / 应用
↕ JSON-RPC
🔗 MCP Client
协议客户端 · 连接管理
↕ Transport (stdio / HTTP SSE)
🛠️ MCP Server
工具 · 资源 · 提示模板

核心概念

MCP Host
运行 MCP Client 的宿主应用(如 Claude Desktop、VS Code、自建应用)
MCP Client
与 MCP Server 建立 1:1 连接的协议客户端,负责发起请求
MCP Server
暴露工具(Tools)、资源(Resources)、提示模板(Prompts)的服务端
Transport
传输层,支持 stdio(本地进程通信)和 HTTP+SSE(远程通信)
JSON-RPC 2.0
底层通信协议,所有消息均为 JSON-RPC 格式的请求/响应/通知

🔌 Stdio vs HTTP 传输对比

特性stdioHTTP + SSE
通信方式标准输入/输出流HTTP POST + Server-Sent Events
适用场景本地工具(文件系统、数据库、Shell)远程工具(云端 API、多用户共享)
连接模型1:1,进程生命周期绑定支持 1:N,长连接可复用
启动方式Client 作为子进程启动 ServerServer 独立运行,Client 主动连接
安全性✅ 天然隔离,仅限本地⚠️ 需 TLS + 认证授权
性能✅ 延迟极低⚠️ 有网络开销
跨机器❌ 仅限本机✅ 任意网络可达
典型用例本地文件操作、SQLite 查询企业 API 网关、云数据库代理

🔄 MCP vs Function Calling

⚠️ 关键理解:不是替代,是互补 MCP 和 Function Calling 解决的是不同层面的问题。Function Calling 是模型能力(LLM 如何输出工具调用),MCP 是接口协议(工具如何被标准化地发现和调用)。
维度Function CallingMCP
定位LLM 的原生工具调用能力工具与 AI 应用间的标准接口协议
层次模型层传输/接口层
定义方模型厂商(OpenAI、Anthropic 等)Anthropic 开源协议
标准化各厂商格式不统一✅ 统一 JSON-RPC 接口
工具发现需手动注册 Schema✅ 自动发现(list_tools)
资源管理不涉及✅ 资源模板、URI 管理
协作关系模型输出 tool_callsClient 将 MCP tools 转为 FC Schema 发给模型
典型协作流程
MCP Servertools/list →MCP Client转为 FC Schema →LLM
LLMtool_calls →MCP Clienttools/call →MCP Server

🌍 MCP 生态现状

✅ 官方支持

Claude Desktop、Anthropic API 原生集成 MCP

🔌 SDK 覆盖

Python、TypeScript、Java、Kotlin 官方 SDK

🏢 企业采用

Block、Apollo、Replit、Codeium 等已集成

🔄 社区生态

开源 Server 快速增长,覆盖数据库、文件、API 等领域

📦 MCP Server 示例

Server类别功能传输方式官方/社区
@modelcontextprotocol/server-filesystem文件系统读写文件、目录操作、搜索stdio官方
@modelcontextprotocol/server-postgres数据库PostgreSQL 只读查询stdio官方
@modelcontextprotocol/server-sqlite数据库SQLite 数据库操作stdio官方
@modelcontextprotocol/server-githubAPI仓库管理、PR、Issue 操作stdio官方
@modelcontextprotocol/server-brave-search搜索Web 搜索和本地搜索stdio官方
@modelcontextprotocol/server-puppeteer浏览器网页截图、自动化操作stdio官方
@modelcontextprotocol/server-google-mapsAPI地图查询、路线规划stdio官方
mcp-server-sentry监控Sentry 错误追踪分析stdio社区
mcp-server-kubernetes基础设施K8s 集群管理操作stdio社区
mcp-server-notion生产力Notion 页面读写stdio社区
💡 MCP 最佳实践
  • 最小权限原则:Server 只暴露必要的工具和资源,限制文件访问路径范围
  • 用户授权确认:敏感操作(如文件写入、网络请求)应先获得用户明确许可
  • 错误友好处理:返回结构化错误信息,包含错误码和人类可读的描述
  • 工具描述精准:清晰的 name + description 帮助 LLM 正确选择工具
  • 优先使用 stdio:本地工具优先 stdio,安全且延迟低;远程场景再用 HTTP
  • 版本兼容:遵循协议版本协商机制,确保前后兼容
  • 资源管理:合理使用 Resource 模板,为大文件提供分页支持