MCP 协议深度解析:AI 时代的 USB-C 接口

MCP 协议深度解析:AI 时代的"USB-C 接口"

引言

如果你最近关注 AI 领域,一定听说过 MCP(Model Context Protocol,模型上下文协议)。Anthropic 在 2024 年底开源了它,短短几个月就在 GitHub 上收获了数万颗星。有人说它是"AI 应用的 USB-C 接口",有人说它是"LLM 时代的 HTTP 协议"。

那么 MCP 到底是什么?它解决了什么问题?本文将带你一探究竟。


一、背景:AI 模型的数据孤岛

大语言模型(LLM)的能力有目共睹,但它们面临一个根本性的限制:训练数据是静态的

一个典型的 AI 助手可以流畅地回答历史、科学、编程等问题,但在以下场景中却无能为力:

  • "帮我查一下今天的 Github Trending 仓库"
  • "把我的这篇草稿发布到博客园"
  • "读取我项目里的数据库 schema,然后生成对应的 API 接口"

这些操作需要模型与外部世界交互——访问实时数据、调用外部服务、操作本地文件。传统的做法是每个开发者自己实现一套工具调用协议,导致生态碎片化严重。

这就是 MCP 要解决的核心问题。


二、MCP 是什么

MCP(Model Context Protocol)是一个开放标准,定义了 AI 应用与外部数据源、工具之间通信的协议规范。它允许大模型安全、标准化地访问本地和远程资源。

用一句话概括:MCP 让任何 AI 客户端都能和任何外部工具/数据源对话,就像 USB-C 让任何设备都能连接任何外设一样。

flowchart LR subgraph Host["AI 宿主应用"] Client[MCP Client] end subgraph S1["MCP Server A"] Tool1[文件系统工具] end subgraph S2["MCP Server B"] Tool2[数据库工具] end subgraph S3["MCP Server C"] Tool3[第三方 API] end Client <-->|JSON-RPC| S1 Client <-->|JSON-RPC| S2 Client <-->|JSON-RPC| S3

三、核心架构

MCP 采用经典的 Client-Server 架构:

Host → MCP Client → MCP Server → 外部资源
  • Host(宿主):AI 应用本身,如 Claude Desktop、VS Code 插件、自建 ChatBot
  • MCP Client(客户端):运行在 Host 内部,负责与 Server 建立连接、发送请求
  • MCP Server(服务端):独立进程,暴露特定的能力(工具、资源、提示模板)
  • Transport(传输层):客户端和服务端之间的通信方式

传输层

MCP 支持两种传输协议:

传输方式 适用场景 说明
stdio 本地进程通信 通过标准输入输出,简单高效
Streamable HTTP 远程服务 支持 SSE 流式响应,适合跨网络场景

本地场景下,MCP Client 作为父进程启动 MCP Server 子进程,通过 stdin/stdout 进行 JSON-RPC 通信。远程场景下,通过 HTTP + SSE 实现请求和推送。


四、三大核心能力

MCP Server 可以对外暴露三种类型的能力:

1. Tools(工具)

Tools 是模型可调用的函数。模型通过 Function Calling 机制决定何时调用哪个工具。

# 一个简单的 MCP 工具示例
@mcp.tool()
def get_weather(city: str) -> str:
    """查询指定城市的天气信息"""
    # 调用天气 API
    weather = fetch_weather(city)
    return f"{city}当前天气:{weather}"

特点:

  • 模型自主决定是否调用、何时调用
  • 工具描述(docstring)直接影响模型的调用准确率
  • 支持参数校验和类型标注

2. Resources(资源)

Resources 是模型可读取的上下文数据,类似于文件系统中的"只读文件"。

@mcp.resource("config://app")
def get_app_config() -> str:
    """返回应用配置信息"""
    return json.dumps(app_config)

与 Tools 的区别:Resources 是被动暴露数据,由 Client 主动拉取;Tools 是主动执行操作,由模型触发。

3. Prompts(提示模板)

Prompts 是预定义的提示词模板,用户可以快速选择使用。

@mcp.prompt()
def code_review(language: str) -> str:
    return f"请对以下{language}代码进行审查..."

五、通信协议:JSON-RPC

MCP 使用 JSON-RPC 2.0 作为消息协议。所有消息遵循统一格式:

请求示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": { "city": "北京" }
  }
}

响应示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      { "type": "text", "text": "北京当前天气:晴,25度" }
    ]
  }
}

核心 API 方法:

方法 用途
initialize 握手协商,交换双方能力信息
tools/list 获取 Server 提供的所有工具列表
tools/call 调用指定工具
resources/list 获取资源列表
resources/read 读取资源内容
prompts/list 获取提示模板列表
prompts/get 获取提示模板内容

六、构建一个 MCP Server

得益于社区工具链,构建 MCP Server 非常简单。以下以 Python 的 fastmcp 框架为例:

第一步:安装依赖

pip install fastmcp python-dotenv requests

第二步:编写 Server

from fastmcp import FastMCP

mcp = FastMCP("my-first-mcp")

@mcp.tool()
def hello(name: str) -> str:
    """向指定的人打招呼"""
    return f"你好,{name}!欢迎使用 MCP。"

if __name__ == "__main__":
    mcp.run()

第三步:配置 Client

在 Claude Code 中,创建 .mcp.json 文件:

{
  "mcpServers": {
    "my-first-mcp": {
      "command": "python",
      "args": ["server.py"]
    }
  }
}

仅需三步,你的 AI 助手就获得了"打招呼"的新能力。


七、MCP 生态现状

MCP 正在快速成为行业标准:

  • 官方支持:Anthropic Claude、Claude Code 深度集成
  • 社区生态:GitHub 上有数千个开源 MCP Server,覆盖文件系统、数据库、搜索引擎、云服务等
  • 厂商跟进:OpenAI、Google、Microsoft 等主流厂商也在关注或支持 MCP
  • 框架支持:Python(fastmcp)、TypeScript(@modelcontextprotocol/sdk)、Go 等语言都有成熟的 SDK

常见的 MCP Server 场景

场景 典型 MCP Server
文件操作 @anthropic/mcp-server-filesystem
数据库查询 @anthropic/mcp-server-postgres
搜索引擎 Brave Search MCP Server
代码仓库 GitHub MCP Server
内容发布 cnblogs MCP Server

八、为什么 MCP 重要

在 MCP 出现之前,每个 AI 应用都需要自己实现一套工具调用机制。这意味着:

  • 开发者需要为每个平台写不同的适配代码
  • 工具提供者需要维护多套接口
  • 用户被困在特定的生态中

MCP 改变了这一点:

 之前:  M 个 AI 应用 x N 个外部工具 = MxN 次集成
 之后:  M 个 AI 应用 + N 个外部工具 = M+N 次集成

这与 HTTP 统一 Web 服务的逻辑一致——标准化连接,释放创新


九、结语

MCP 不是另一个昙花一现的技术热点。它解决的是 AI 落地中最实际的问题:如何让模型与真实世界交互

随着越来越多的工具和服务接入 MCP 生态,AI 助手的能力边界将从"模型的训练数据"扩展到"整个互联网和本地环境"。那时候,AI 助手将真正成为一个能读、能写、能操作的全能伙伴。

如果你还没有尝试过 MCP,现在就是最好的时机。


本文由 Claude Code + cnblogs MCP Server 协作发布。

posted @ 2026-06-01 10:48  松鼠航  阅读(5)  评论(0)    收藏  举报