本文基于官方最新版 MCP 文档,力求用中文把 MCP 的架构、核心概念、协议细节讲得明明白白。看完你就能自己动手写 MCP Server,让大模型真正“长出手脚”!


一、MCP 是什么?

一句话:MCP 是一套“上下文交换协议”,专门解决「如何让 AI 应用安全、实时、可扩展地获取外部数据与工具」的问题。
它不绑定任何大模型,也不关心你用什么语言开发,只要实现协议,就能接入 Claude、Cursor、Copilot 等任何 MCP Host。


二、MCP 的“全家桶”

项目 作用 备注
MCP Specification 协议规范 必读!定义了客户端和服务端必须实现的 JSON-RPC 格式
MCP SDKs 多语言 SDK Python、TypeScript、Java、Go…官方已开源
MCP Inspector 调试神器 可视化查看工具/资源/提示词列表,一键发请求
官方示例 Server 拿来即抄 文件系统、Sentry、数据库…示例代码全都有

三、核心角色与关系图

MCP 采用「1:1 单连接」的客户端-服务器架构:

  • MCP Host(AI 应用本体,如 Claude Desktop)
  • MCP Client(Host 为每个 Server 创建的独立客户端)
  • MCP Server(真正干活的“插件”,本地或远程均可)
           ┌──────────────┐
           │ MCP Host     │
           │ (AI 应用)    │
           └──────┬───────┘
   ┌─────────────┼─────────────┐
   │one-to-one   │one-to-one   │one-to-one
┌──▼───┐    ┌───▼───┐    ┌───▼───┐
│Client│    │Client │    │Client │
└──┬───┘    └───┬───┘    └───┬───┘
   │            │            │
┌──▼───┐    ┌──▼───┐    ┌──▼───┐
│Server│    │Server│    │Server│
└──────┘    └──────┘    └──────┘
(本地/远程)   (本地/远程)   (本地/远程)

四、两层协议栈

  1. 数据层(Data Layer)
    • 协议:JSON-RPC 2.0
    • 功能:生命周期、工具、资源、提示词、通知等
  2. 传输层(Transport Layer)
    • stdio:本地进程通信,零延迟
    • Streamable HTTP:远程 Server,支持 SSE 流式回包、Bearer Token、OAuth 2.0

五、数据层协议详解

5.1 生命周期(Lifecycle)

连接建立后第一件事:握手。

  • 协商协议版本
  • 交换 capabilities
  • 互相自我介绍(name / version)

示例握手

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": { "elicitation": {} },
    "clientInfo": { "name": "csdn-client", "version": "1.0.0" }
  }
}

5.2 三大核心 Primitive

类型 作用 关键方法
Tools 可调用的函数 tools/list 枚举、tools/call 执行
Resources 只读数据源 resources/list 枚举、resources/read 读取
Prompts 可复用的模板 prompts/listprompts/get

所有 list 接口都支持动态更新,Server 可随时增删工具而无需重启 Host。

5.3 通知(Notifications)

Server 状态变化时主动推送,例如:

{ "jsonrpc": "2.0", "method": "notifications/tools/list_changed" }

Host 收到后立即重新 tools/list,保持最新工具列表。


六、实战演练:一次完整交互

下面用伪代码演示「查询旧金山天气」的完整链路:

  1. 连接 & 初始化
async with stdio_client(server_config) as (read, write):
    async with ClientSession(read, write) as session:
        await session.initialize()
  1. 发现工具
tools = await session.list_tools()
# 找到 weather_current
  1. 调用工具
result = await session.call_tool(
    "weather_current",
    {"location": "San Francisco", "units": "imperial"}
)
  1. 接收通知 & 动态刷新
async def on_tools_changed():
    tools = await session.list_tools()
    app.update_tools(tools)

七、Client 端三大能力

能力 方法 场景
Sampling sampling/complete Server 需要 LLM 生成文本,但不自己集成模型
Elicitation elicitation/request Server 向用户索要额外输入或二次确认
Logging log/message Server 把调试日志打到 Host

八、如何快速上手?

  1. 克隆官方仓库:
    git clone https://github.com/modelcontextprotocol/servers
  2. 挑一个示例(如 filesystem)跑通:
    python -m mcp_server_filesystem /your/path
  3. 用 MCP Inspector 调试:
    npx @modelcontextprotocol/inspector

九、小结

MCP 把「AI 应用如何安全、实时地获取外部世界」这件事做到了极致解耦:

  • 对 Host:随意插拔 Server,像装 VS Code 插件一样简单
  • 对 Server:专注提供工具/数据,零 AI 知识也能写
  • 对开发者:一套协议多端复用,Python、Node、Rust 想写啥写啥

如果本文对你有帮助,记得点赞、收藏、留言三连!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐