跳到主要内容

Model Context Protocol 介绍

Model Context Protocol(MCP)是一种开放协议,旨在实现大型语言模型(LLM)应用程序与外部数据源和工具之间的无缝集成。无论您是在构建 AI 驱动的 IDE、增强聊天界面,还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式将 LLM 与它们所需的上下文连接起来。

官方文档参考

本文档内容基于 MCP 官方规范 2025-11-25官方文档网站。2025-06-18 和 2024-11-05 版本仍受支持。

什么是 MCP?

MCP(Model Context Protocol)由 Anthropic(Claude 的开发公司)于 2024 年底推出,是一种开放标准,用于连接 LLM 与各种工具和数据源。它的设计理念类似于 USB-C——为 AI 提供一个统一的接口,让它可以连接到任何需要的外部系统。

MCP 解决什么问题?

在 MCP 出现之前,开发者需要为每个 LLM 集成单独编写代码:

# 以前的方式:为每个数据源单独编写集成代码
def get_weather():
# 调用天气 API
pass

def search_github():
# 调用 GitHub API
pass

def query_database():
# 连接数据库查询
pass

# 每个集成都是独立的,需要单独维护

有了 MCP 之后,所有集成都遵循同一个协议:

# MCP 方式:标准化接口
# 只需要实现一次 MCP 服务器
# 任何兼容 MCP 的客户端都可以使用

MCP 的核心优势

特性传统方式MCP 方式
工具发现静态配置运行时动态发现
安全控制临时处理内置用户授权机制
连接方式无状态 REST有状态连接
交换服务常常破坏集成模块化热插拔
文档外部且不一致嵌入服务器响应中

MCP 的核心组件

MCP 架构包含三个主要角色:

  1. Host(主机):启动连接的 LLM 应用程序,如 Claude Desktop、VS Code、Cursor、Windsurf 等
  2. Client(客户端):主机内部的连接器,负责与 Server 通信
  3. Server(服务器):提供上下文和能力的服务,如 GitHub Server、Filesystem Server 等

分层架构

MCP 由两个核心层组成:

数据层:定义基于 JSON-RPC 的协议,包括:

  • 生命周期管理:连接初始化、能力协商、连接终止
  • 服务器原语:Tools(工具)、Resources(资源)、Prompts(提示)
  • 客户端原语:Sampling(采样)、Elicitation(用户交互)、Logging(日志)
  • 工具功能:实时更新的通知、长时间操作的进度跟踪

传输层:定义通信机制,包括:

  • STDIO 传输:使用标准输入/输出流进行本地进程间通信
  • Streamable HTTP 传输:使用 HTTP POST 和 Server-Sent Events 支持远程服务器通信

协议层次

MCP 由几个关键组件协同工作:

  • 基础协议:核心 JSON-RPC 2.0 消息类型
  • 生命周期管理:连接初始化、能力协商、会话控制
  • 服务器原语:Resources、Prompts、Tools
  • 客户端原语:Sampling、Elicitation、Logging
  • 工具功能:通知、进度跟踪、取消操作等跨领域功能

MCP 核心原语

MCP 定义了服务器和客户端可以互相提供的原语(Primitives):

服务器原语(Server → Client):

功能说明典型应用
Tools(工具)AI 模型可以调用的函数执行计算、API调用、文件操作
Resources(资源)可共享的上下文和数据文件内容、数据库记录、配置信息
Prompts(提示)预定义的提示模板和工作流代码审查、文档生成、问题诊断

客户端原语(Client → Server):

功能说明典型应用
Sampling(采样)服务器请求 LLM 进行推理递归 LLM 交互、代理行为
Elicitation(用户交互)服务器请求用户输入或确认敏感操作确认、获取额外信息
Logging(日志)服务器向客户端发送日志消息调试和监控

传输层

MCP 支持两种传输机制:

STDIO 传输

STDIO 传输使用标准输入/输出流进行本地进程间通信,适用于同一台机器上运行的本地服务器。这种传输方式没有网络开销,性能最优。

# STDIO 传输的 MCP 服务器
from mcp.server.stdio import stdio_server

async def main():
async with stdio_server() as streams:
await app.run(streams[0], streams[1], options)

Streamable HTTP 传输

Streamable HTTP 传输使用 HTTP POST 进行客户端到服务器的消息传递,可选 Server-Sent Events(SSE)实现流式能力。这种传输方式支持远程服务器通信,可以使用标准的 HTTP 认证方法。

# HTTP 传输的 MCP 服务器
from mcp.server.http import HTTPServer

server = HTTPServer(app, host="0.0.0.0", port=8080)
server.run()

两种传输方式的选择取决于部署场景:本地工具使用 STDIO,远程服务使用 HTTP。详细说明请参阅 传输层 章节。

协议基础

MCP 基于 JSON-RPC 2.0 消息格式,定义了三种基本消息类型:

类型说明要求
Requests发起操作的消息必须包含唯一 ID 和方法名
Responses回复请求的消息必须包含与请求相同的 ID
Notifications单向消息,无需回复不能包含 ID

消息示例

// 请求
{
"jsonrpc": "2.0",
"id": "req-001",
"method": "tools/list",
"params": {}
}

// 成功响应
{
"jsonrpc": "2.0",
"id": "req-001",
"result": {
"tools": [...]
}
}

// 错误响应
{
"jsonrpc": "2.0",
"id": "req-001",
"error": {
"code": -32600,
"message": "Invalid Request"
}
}

MCP 的应用场景

1. AI 驱动的 IDE 增强

通过 MCP,AI 助手可以:

  • 读取项目文件和代码
  • 执行 Git 操作
  • 运行代码和测试
  • 搜索代码库

2. 聊天界面扩展

MCP 让聊天机器人可以:

  • 访问实时数据
  • 调用外部 API
  • 操作数据库
  • 管理文件系统

3. 自定义 AI 工作流

开发者可以构建:

  • 自动化任务流水线
  • 多系统集成
  • 智能数据处理管道

4. 企业知识库

  • 连接内部文档系统
  • 访问企业数据库
  • 集成业务工具

快速开始

安装 MCP SDK 开始开发:

# Python
pip install mcp

# TypeScript
npm install @modelcontextprotocol/sdk

查看 环境配置 了解详细设置步骤,或直接参考 快速入门 构建你的第一个 MCP 服务器。

安全原则

MCP 设计强调安全性,核心原则包括:

用户授权

  • 主机必须在暴露用户数据前获得明确同意
  • 用户必须能够审查和授权所有操作

工具安全

工具代表任意代码执行,需要谨慎处理:

  • 不信任服务器提供的工具描述
  • 实施适当的访问控制
  • 提供清晰的 UI 展示工具执行情况
  • 敏感操作需要用户确认

数据保护

  • 不在未经用户同意的情况下传输数据
  • 验证所有工具输入
  • 实施速率限制
  • 清理工具输出

官方资源