← 学习中心

MCP 模型上下文协议:AI Agent 与工具通信的统一标准

MCP(Model Context Protocol)是 Anthropic 于2024年提出的开放协议,旨在标准化大语言模型与外部工具、数据源之间的通信方式。本文深入讲解 MCP 的架构设计、核心概念(Tools/Resources/Prompts)、工作原理及实际代码示例,帮助开发者快速理解这一正在重塑 AI Agent 生态的关键技术。

理解 MCP 的设计动机和核心架构,掌握 Client-Server 模型在 AI Agent 场景下的应用,能够编写一个基本的 MCP Server 并与 LLM 客户端对接。

直觉模型

想象你去一家餐厅吃饭。你(LLM)只需要看菜单点菜,不需要知道厨房怎么炒菜。服务员(MCP Client)把你的订单传给厨房,厨房(MCP Server)做好菜后端上来。MCP 做的事情,就是定义「菜单格式」「点菜协议」和「上菜格式」——让任何餐厅都能服务任何顾客,而不需要逐一对接。

在 MCP 出现之前,每个 LLM 厂商都有自己的 function calling 格式。OpenAI 用 JSON Schema,Anthropic 用 XML,Google 用 protobuf。开发者要为每个平台写不同的工具集成代码,就像每去一家餐厅就要学一套新的点菜规矩。MCP 统一了这套规则。

核心要点

1. 架构设计

MCP 采用 Client-Server architecture,包含三个角色:

  • MCP Host:运行 LLM 的应用程序(如 Claude Desktop、Cursor IDE),负责发起请求
  • MCP Client:Host 内部的协议适配层,维护与 Server 的 1:1 连接
  • MCP Server:暴露具体能力的轻量进程,每个 Server 负责一类工具或数据源

通信使用 JSON-RPC 2.0 协议,支持 stdio 和 SSE 两种传输方式。stdio 适合本地进程通信,SSE 适合远程服务。

2. 三大核心原语

MCP 定义了三种能力原语(primitives):

原语方向用途示例
ToolsHost → Server执行操作,有副作用查询数据库、发送邮件
ResourcesHost → Server读取数据,无副作用读取文件内容、获取配置
PromptsServer → Host提供预设提示词模板代码审查模板、SQL 生成模板

3. 实战:编写一个 MCP Server

使用 Python SDK 创建一个简单的天气查询 Server:

from mcp.server import Server
from mcp.types import Tool, TextContent
import json

server = Server("weather-server")

@server.list_tools()
async def list_tools():
    return [Tool(
        name="get_weather",
        description="查询指定城市的天气",
        inputSchema={
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "城市名称"}
            },
            "required": ["city"]
        }
    )]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "get_weather":
        city = arguments.get("city", "")
        # 模拟天气查询
        return [TextContent(
            type="text",
            text=json.dumps({"city": city, "temp": 25, "condition": "sunny"})
        )]

if __name__ == "__main__":
    import asyncio
    from mcp.server.stdio import stdio_server
    async def main():
        async with stdio_server() as (read, write):
            await server.run(read, write, server.create_initialization_options())
    asyncio.run(main())

4. 生命周期与能力协商

MCP 连接建立时,Client 和 Server 会进行 capability negotiation:

  1. Client 发送 initialize 请求,声明自身支持的协议版本和能力
  2. Server 响应自身能力和 server info
  3. Client 发送 initialized 通知,握手完成
  4. 之后双方通过 tools/list、tools/call 等方法交互

5. 为什么 MCP 重要

2026年,MCP 已被 ChatGPT、Claude、Gemini 等主流平台采纳。Manufact(YC S25)推出了 MCP Cloud 平台,让开发者一条命令部署 MCP Server。这意味着:

  • 一次开发,多平台运行:写一个 MCP Server,ChatGPT、Claude、Cursor 都能用
  • 标准化工具市场:类似 npm 生态,MCP Server 可以被复用和分享
  • 降低 context engineering 复杂度:LLM 不再需要为每个工具学习不同的调用格式
MCP 模型上下文协议:AI Agent 与工具通信的统一标准 | 必学必会