目录

MCP 协议 2025:AI 应用的 USB-C 标准

前言

2024 年底,Anthropic 提出了 Model Context Protocol(MCP)——一个开放标准,旨在解决 AI 应用与外部工具/数据源之间的连接问题。2025 年,MCP 从一个"提议"进化成了行业事实标准:ChatGPT 接入了,VS Code Copilot 接入了,Cursor 接入了,三大 Agent 框架(LangGraph、CrewAI、AutoGen)全部原生支持。Linux Foundation 接管了治理,MCP Registry 正式上线。

“如果 HTTP 是 Web 的协议,那 MCP 就是 AI 的协议。"——这句话在 2025 年频繁出现在各种技术大会上。

MCP 解决了什么问题?

在 MCP 出现之前,让 LLM 使用工具是一个不堪回首的"战国时代”:

类比一下:MCP 之于 AI 工具,就像 USB-C 之于硬件外设——一个统一的接口,所有设备即插即用。

MCP 的核心架构

MCP 采用**客户端-服务器(Client-Server)**架构:

MCP 定义了三个核心能力:

能力 说明 类比
Resources 暴露数据源(文件、数据库、API…) 像 REST API 的 GET 请求
Tools 暴露可调用的函数(搜索、计算、发送邮件…) 像 REST API 的 POST 请求
Prompts 暴露预定义的提示模板 像 API 文档中的示例

一个 MCP 服务器示例

# calculator_mcp_server.py
from mcp.server import Server
from mcp.types import Tool, TextContent

app = Server("calculator")

@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="calculate",
            description="执行数学运算",
            inputSchema={
                "type": "object",
                "properties": {
                    "expression": {
                        "type": "string",
                        "description": "数学表达式,如 2 + 3 * 4",
                    }
                },
                "required": ["expression"],
            },
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    if name == "calculate":
        result = eval(arguments["expression"])
        return [TextContent(type="text", text=str(result))]

# 启动服务器(通过 stdio 通信)
if __name__ == "__main__":
    app.run(transport="stdio")
// 在 Claude Desktop 中配置 MCP 服务器
{
  "mcpServers": {
    "calculator": {
      "command": "python",
      "args": ["calculator_mcp_server.py"]
    }
  }
}

配置完成后,Claude 就可以直接调用这个计算器了:

用户:“帮我算一下 2^10 + 3^5 等于多少?” Claude:[自动调用 MCP 计算器工具] “2^10 = 1024,3^5 = 243,结果是 1267。”

2025 年 MCP 生态全景

客户端支持(Hosts)

客户端 类型 支持程度
Claude Desktop 桌面应用 ✅ 原生首发支持
ChatGPT Web/桌面 ✅ 2025 年加入支持
VS Code Copilot IDE ✅ MCP 工具可直接作为 Copilot 扩展
Cursor IDE ✅ 原生支持 MCP 服务器作为工具
MCPJam 开发者工具 ✅ 用于测试和调试 MCP 服务器

MCP Registry:工具市场

2025 年上线的 MCP Registry 相当于 AI 工具的"应用商店":

# 从 Registry 安装 MCP 服务器
mcp install @mcp/filesystem     # 文件系统操作
mcp install @mcp/github         # GitHub API 集成
mcp install @mcp/sqlite         # SQLite 数据库查询
mcp install @mcp/slack          # Slack 消息和频道管理
mcp install @mcp/brave-search   # 网络搜索

Registry 上的 MCP 服务器通过 GitHub Actions 自动发布和更新版本。

MCP 协议的技术细节

传输层

MCP 支持两种传输方式:

1. stdio 传输(本地)

{
  "mcpServers": {
    "my-tool": {
      "command": "node",
      "args": ["dist/server.js"],
      "env": { "API_KEY": "xxx" }
    }
  }
}

适合本地开发、桌面应用,进程间通过标准输入输出通信。

2. Streamable HTTP(远程)

POST /mcp HTTP/1.1
Content-Type: application/json

{"jsonrpc": "2.0", "method": "tools/call", "params": {...}}

适合生产环境、远程服务,支持水平扩展和负载均衡。

2025 年的 Streamable HTTP 是 MCP 在传输层的重要进化——从原始的 SSE(Server-Sent Events)升级为无状态的 HTTP 请求,解决了大规模部署的痛点。

核心方法

// MCP 协议的 JSON-RPC 方法集
{
  // 生命周期
  "initialize",           // 初始化连接
  "notifications/initialized", // 通知初始化完成
  
  // 资源操作
  "resources/list",       // 列出可用资源
  "resources/read",       // 读取资源内容
  "resources/subscribe",  // 订阅资源变更
  
  // 工具操作
  "tools/list",           // 列出可用工具
  "tools/call",           // 调用工具
  
  // 提示模板
  "prompts/list",         // 列出可用提示模板
  "prompts/get",          // 获取特定提示模板
}

实战:构建一个代码分析 MCP 服务器

下面用 Python 构建一个完整的代码分析 MCP 服务器:

import ast
import subprocess
from pathlib import Path
from mcp.server import Server
from mcp.types import Tool, TextContent, Resource

app = Server("code-analyzer")

# 注册工具
@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="analyze_python",
            description="分析 Python 代码中的问题",
            inputSchema={
                "type": "object",
                "properties": {
                    "code": {"type": "string", "description": "Python 代码"},
                },
                "required": ["code"],
            },
        ),
        Tool(
            name="run_tests",
            description="运行项目的测试用例",
            inputSchema={
                "type": "object",
                "properties": {
                    "path": {"type": "string", "description": "项目路径"},
                },
                "required": ["path"],
            },
        ),
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    if name == "analyze_python":
        tree = ast.parse(arguments["code"])
        issues = []
        for node in ast.walk(tree):
            # 检查空 except
            if isinstance(node, ast.ExceptHandler) and node.type is None:
                issues.append("⚠️ 裸 except 会捕获所有异常,建议指定异常类型")
            # 检查函数是否过长
            if isinstance(node, ast.FunctionDef) and len(node.body) > 50:
                issues.append(f"⚠️ 函数 `{node.name}` 超过 50 行,建议拆分")
        
        return [TextContent(
            type="text",
            text= "\n".join(issues) if issues else "✅ 没有发现明显问题"
        )]
    
    elif name == "run_tests":
        result = subprocess.run(
            ["python", "-m", "pytest", arguments["path"], "-v"],
            capture_output=True, text=True, timeout=30
        )
        return [TextContent(type="text", text=result.stdout[-2000:])]

# 注册资源(暴露可访问的数据)
@app.list_resources()
async def list_resources() -> list[Resource]:
    return [
        Resource(
            uri="project://config",
            name="项目配置文件",
            description="项目的 pyproject.toml 配置",
            mimeType="text/plain",
        )
    ]

if __name__ == "__main__":
    app.run(transport="stdio")

配置到 Cursor / VS Code 中后,AI 编程助手可以直接调用这些工具来分析代码、运行测试。

MCP vs 传统 API:为什么是 MCP?

维度 传统 API MCP
发现机制 需要查阅文档 Tools/Resources 自动发现
输入格式 每个 API 自定义 统一的 JSON-RPC 协议
上下文传递 需手动管理 协议原生支持上下文
流式响应 需要额外实现 原生支持 SSE/流式
安全认证 多样化 OAuth 2.1 标准化
多模型兼容 每套 API 只服务一个 AI 一次实现,所有 MCP Host 可用

路线图:MCP 接下来会做什么?

根据 2025 年 3 月发布的路线图:

  1. Agent 间通信:MCP 正在扩展为 Agent-to-Agent 协议,让不同框架的 Agent 可以互相协作
  2. 审计追踪:企业级的操作日志和审计能力
  3. SSO 和网关模式:企业集中管理 MCP 服务器的认证和访问
  4. Interceptor(拦截器):中间件机制,用于监控、限流、日志
  5. Trigger/Events:事件驱动的 MCP 服务器,可以主动推送通知

总结

要点 说明
MCP 是什么 AI 应用与外部工具的标准化通信协议
为什么重要 统一了"AI 如何调用工具"这个核心问题
2025 年里程碑 Linux Foundation 治理、ChatGPT 支持、Registry 上线
谁在用 Claude Desktop、ChatGPT、VS Code、Cursor、三大 Agent 框架
对开发者的意义 写一个 MCP 服务器 = 在所有 AI 平台可用你的工具
上手门槛 极低——几十行 Python/JS 代码就能写一个 MCP 服务器

2025 年,不懂 MCP 的 AI 应用开发就像不懂 HTTP 的 Web 开发。无论你用哪个 Agent 框架、哪个 LLM 模型,MCP 都是连接 AI 与现实世界的那根"USB-C 线"。