是什么

MCP 全称 Model Context Protocol(模型上下文协议),是一个用于把 AI 应用连接到外部系统的开源标准。借助 MCP,Claude、ChatGPT 这样的 AI 应用可以接入各种数据源(本地文件、数据库)、工具(搜索引擎、计算器)和工作流(专门设计的提示词),从而获取关键信息、执行实际任务。

官方用了一个很形象的比喻:MCP 就像 AI 应用的 USB-C 接口。USB-C 让各种电子设备用同一种方式互联,MCP 则让 AI 应用用同一种方式连接外部系统。在 MCP 出现之前,每个 AI 应用想接入一个新工具,往往都要单独写一套集成代码;有了统一协议,一个工具只要实现一次 MCP 服务端,就能被所有支持 MCP 的应用使用。

MCP 由 Anthropic 于 2024 年发起并开源,如今已经得到广泛支持:Claude、ChatGPT 等 AI 助手,以及 Visual Studio Code、Cursor 等开发工具都能作为 MCP 客户端使用。

需要注意的是,MCP 只负责「上下文交换」这一层协议,它并不规定 AI 应用如何使用大模型,也不规定应用怎样管理拿到的上下文。

主要功能

MCP 项目本身由几部分组成:

  • MCP 规范:定义客户端和服务端的实现要求;
  • 官方 SDK:提供 TypeScript、Python、C#、Go、Rust、Ruby、Java、Swift、PHP、Kotlin 等多种语言的实现,按功能完整度分为不同等级;
  • 开发工具:例如用于调试 MCP 服务端的 MCP Inspector;
  • 参考实现:一批官方维护的 MCP 服务端示例,如文件系统服务端。

通过 MCP,可以实现的事情包括:

  • 让智能体访问你的 Google 日历和 Notion,成为更懂你的个人助手;
  • 让 Claude Code 根据 Figma 设计稿生成完整的网页应用;
  • 让企业聊天机器人连接组织内的多个数据库,用对话完成数据分析;
  • 让 AI 在 Blender 中创建 3D 模型并交给 3D 打印机输出。

技术原理

参与者。 MCP 采用客户端—服务端架构,有三个角色:

  • MCP Host(宿主):AI 应用本身,例如 Claude Code、Claude 桌面版或 VS Code,负责协调和管理一个或多个 MCP 客户端;
  • MCP Client(客户端):宿主内部的组件,与某一个 MCP 服务端保持连接,并为宿主获取上下文;
  • MCP Server(服务端):向客户端提供上下文的程序。

宿主每连接一个服务端,就会创建一个对应的客户端对象,二者一对一。服务端既可以运行在本地,也可以部署在远端。

两层结构。 MCP 分为数据层和传输层:

  • 数据层基于 JSON-RPC 2.0,定义消息结构和语义,包括能力与版本发现、核心原语和通知机制;
  • 传输层定义通信通道,目前支持两种方式:Stdio,用标准输入输出在同一台机器的进程间通信,没有网络开销,常用于本地服务端;Streamable HTTP,客户端用 HTTP POST 发送消息,可选用 Server-Sent Events 流式返回,支持 Bearer Token 等标准 HTTP 认证,适合远程服务端。

核心原语。 服务端可以向客户端提供三类原语:

  • 工具(Tools):AI 可以调用的可执行函数,如文件操作、API 调用、数据库查询;
  • 资源(Resources):提供上下文的数据源,如文件内容、数据库记录;
  • 提示(Prompts):可复用的交互模板,如系统提示、少样本示例。

每类原语都有对应的发现(*/list)和获取(*/get)方法,工具还有执行方法 tools/call。客户端一般先用 tools/list 列出可用工具,再按需调用。当服务端的工具列表发生变化时,可以通过通知实时告知客户端。

客户端一侧也可以提供原语,例如 Elicitation,让服务端在需要时向用户索取补充信息或请求确认。在最新的协议版本中,每个请求都携带协议版本和客户端能力信息,服务端无需依赖之前的请求状态。

如何使用

作为使用者:在支持 MCP 的应用中添加服务端配置即可。以 Claude 桌面版为例,在配置文件 claude_desktop_config.json 的 mcpServers 字段中声明服务端的启动命令,重启应用后就能使用该服务端提供的工具。Claude Code、Cursor 等工具也有各自的 MCP 配置入口。

作为开发者:用官方 SDK 编写自己的服务端。以 Python 为例,先安装依赖:

uv add "mcp[cli]"

然后用几行代码声明一个工具:

from mcp.server import MCPServer

mcp = MCPServer("weather")

@mcp.tool()
async def get_alerts(state: str) -> str:
    """查询某个州的天气预警"""
    ...

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

SDK 会根据函数的类型标注和文档字符串自动生成工具定义。开发过程中可以用 MCP Inspector 调试服务端。由于 SDK 接口会随协议版本演进,动手前请以官方文档中的最新示例为准。

项目地址

应用场景

  • 编程智能体:让 Claude Code、Cursor 等读取设计稿、工单、监控告警,直接参与开发流程。
  • 企业知识接入:把内部数据库、文档系统、业务 API 包装成 MCP 服务端,供多个 AI 应用共用。
  • 个人效率:连接日历、笔记、邮件,让 AI 助手代为整理和执行。
  • 工具厂商:为自家产品提供一个 MCP 服务端,一次开发即可接入众多 AI 客户端。

常见问题

MCP 和普通的函数调用(Function Calling)有什么区别? 函数调用是模型层面的能力,描述模型如何表达「我要调用某个函数」;MCP 是应用与外部系统之间的通信协议,规定工具如何被发现、描述和调用。两者是配合关系:应用通过 MCP 拿到工具列表,再借助模型的函数调用能力决定何时调用。

本地服务端和远程服务端怎么选? 需要访问本机文件或程序时,用 Stdio 传输的本地服务端;需要多人共享、或者服务本身在云上时,用 Streamable HTTP 的远程服务端。

使用 MCP 安全吗? MCP 服务端能执行真实操作,安全性取决于服务端的实现和你授予的权限。官方文档专门提供了安全最佳实践,建议只安装可信来源的服务端,并谨慎授权敏感操作。

必须用 Anthropic 的产品吗? 不需要。MCP 是开放协议,任何应用都可以实现客户端或服务端,目前已有许多不同厂商的产品支持。