Model Context Protocol,由 Anthropic 于 2024 年 11 月提出的一种开放协议,用于标准化大语言模型(LLM)与外部工具、数据源之间的交互方式。它被誉为 "AI 时代的 USB-C 接口",旨在解决 LLM 生态中工具集成碎片化的问题。
在使用 LLM 构建实际应用时,开发者面临一个核心挑战:如何让模型与外部世界交互。无论是查询数据库、调用 API、读取本地文件,还是访问企业内部系统,都需要为每个场景编写特定的集成代码。
传统集成方式的问题:
一个具体的痛点场景:
假设你在开发一个 AI 编程助手,它需要:
在传统模式下,你需要为每个能力写适配代码,处理不同的认证方式、错误格式、返回结构。而且如果你想换个模型(从 GPT-4 换到 Claude),可能适配层都要重写。
"像 USB-C 统一了电子设备接口一样,MCP 统一了 LLM 与外部世界的连接方式。" —— Anthropic
核心设计思想:
| 设计原则 | 说明 |
|---|---|
| 标准化接口 | 任何工具只要实现 MCP 协议,就能被任何支持 MCP 的 Host 使用 |
| 去中心化 | 工具提供者独立维护,不需要 LLM 厂商逐一集成 |
| 双向通信 | 不仅 LLM 可以调用工具,工具也可以主动推送上下文给 LLM |
| 语言无关 | Server 可以用任何语言实现,通过标准协议通信 |
类比理解:
| 类比对象 | MCP 中的角色 | 说明 |
|---|---|---|
| USB-C 接口 | MCP 协议 | 统一标准,任何设备都能连接 |
| 电脑/手机 | Host(如 Claude Desktop) | 使用接口的设备 |
| 外接硬盘/U盘 | MCP Server | 提供具体功能的设备 |
| USB 数据线 | 传输层(stdio/SSE) | 连接 Host 和 Server 的通道 |
┌─────────────────────────────────────────────────────────────┐
│ Host │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Client 1 │ │ Client 2 │ │ Client N │ │
│ │ (文件系统) │ │ (数据库) │ │ (浏览器) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ LLM │ │
│ │ (Claude) │ │
│ └─────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Server 1 │ │ Server 2 │ │ Server N │
│ (本地文件) │ │ (PostgreSQL)│ │ (Puppeteer) │
└─────────────┘ └─────────────┘ └─────────────┘
运行 LLM 的应用程序,负责协调 LLM 与 MCP Client 之间的交互。
常见 Host 实现:
| Host | 说明 | MCP 支持状态 |
|---|---|---|
| Claude Desktop | Anthropic 官方客户端 | ✅ 原生支持 |
| Cursor | AI 代码编辑器 | ✅ 支持 |
| OpenClaw | 开源 AI Agent 框架 | ✅ 支持 |
| Zed | 高性能代码编辑器 | ✅ 支持 |
| Continue | VS Code 插件 | ✅ 支持 |
| Cline | VS Code AI 助手 | ✅ 支持 |
Host 的关键职责:
Host 中的 MCP 客户端实例,每个 Server 对应一个 Client。Client 是 Host 与 Server 之间的桥梁。
Client 的核心功能:
提供具体功能的工具服务。这是 MCP 生态中最活跃的部分,任何人都可以开发并发布 MCP Server。
官方示例 Server:
| Server | 功能 | 使用场景 |
|---|---|---|
server-filesystem |
文件系统操作 | 读写本地文件 |
server-postgres |
PostgreSQL 数据库 | SQL 查询 |
server-github |
GitHub API | 代码仓库管理 |
server-puppeteer |
浏览器自动化 | 网页抓取、测试 |
server-slack |
Slack API | 消息发送、频道管理 |
server-sqlite |
SQLite 数据库 | 本地数据查询 |
MCP 支持多种传输层,适应不同部署场景:
| 传输方式 | 适用场景 | 特点 |
|---|---|---|
| Stdio | 本地进程间通信 | 最安全,Server 作为子进程启动 |
| SSE | Server-Sent Events | 适合远程服务,单向推送 |
| HTTP | RESTful 风格 | 最通用,支持负载均衡 |
| WebSocket | 双向实时通信 | 低延迟,适合高频交互 |
Stdio 模式详解(最常用):
Host 启动 Server 作为子进程
│
▼
┌──────────────┐ ┌──────────────┐
│ Host │ ──stdin─▶│ Server │
│ (Parent) │◀─stdout─│ (Child) │
│ │ │ Process │
└──────────────┘ └──────────────┘
Stdio 模式的优势:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 初始化 │───▶│ 发现 │───▶│ 调用 │───▶│ 关闭 │
│ Initialize│ │ Discover│ │ Invoke │ │ Close │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │
▼ ▼ ▼ ▼
Server 声明 Host 了解 LLM 调用 清理资源
能力清单 可用工具 Server 工具 断开连接
详细生命周期:
初始化(Initialize)
initialize 请求,交换协议版本和能力发现(Discover)
调用(Invoke)
tools/call 请求上下文更新(Context Update)
关闭(Close)
Tool 是 LLM 可以调用的函数,是 MCP 最常用的功能。它类似于传统 Function Calling,但通过标准化协议暴露。
Tool 的定义示例:
{
"name": "search_files",
"description": "在指定目录中递归搜索匹配模式的文件",
"inputSchema": {
"type": "object",
"properties": {
"directory": {
"type": "string",
"description": "要搜索的根目录路径"
},
"pattern": {
"type": "string",
"description": "文件名匹配模式,支持 glob 语法"
},
"maxResults": {
"type": "integer",
"description": "最大返回结果数",
"default": 100
}
},
"required": ["directory", "pattern"]
}
}
Tool 调用的完整流程:
User: "帮我找到项目中所有的测试文件"
│
▼
LLM: 分析意图 → 决定调用 search_files
│
▼
生成调用参数:
{
"directory": "/project",
"pattern": "**/*test*.py"
}
│
▼
Host → Client → Server: 发送 tools/call
│
▼
Server: 执行文件搜索
│
▼
返回结果:
[
"/project/tests/unit/test_auth.py",
"/project/tests/integration/test_api.py",
...
]
│
▼
Host: 将结果注入 LLM 上下文
│
▼
LLM: "我找到了以下测试文件:
- tests/unit/test_auth.py
- tests/integration/test_api.py
..."
Tool 设计最佳实践:
| 原则 | 说明 | 示例 |
|---|---|---|
| 描述清晰 | description 要准确说明功能 | ❌ "查询数据" → ✅ "查询用户订单表,返回最近30天的订单" |
| 参数明确 | 每个参数都要有描述 | 说明参数类型、取值范围、默认值 |
| 错误处理 | 返回结构化错误信息 | 区分权限错误、参数错误、系统错误 |
| 幂等性 | 相同输入产生相同输出 | 查询类 Tool 天然幂等 |
| 安全性 | 敏感操作需要确认 | 删除文件前要求二次确认 |
Resource 是 Server 可以主动提供的上下文数据。与 Tool 不同,Resource 是被动推送的,LLM 可以订阅这些资源的变化。
Resource 的典型类型:
| 类型 | 示例 | 使用场景 |
|---|---|---|
| 文件内容 | 代码文件、配置文件 | 实时代码审查 |
| 数据库 Schema | 表结构、索引信息 | 辅助 SQL 生成 |
| API 文档 | OpenAPI 规范 | 辅助 API 调用 |
| 系统状态 | CPU、内存、日志 | 运维诊断 |
| 业务数据 | 实时报表、指标 | 数据分析 |
Resource 订阅机制:
┌─────────┐ ┌─────────┐
│ Server │───Resource 变化────▶│ Client │
│ │ (主动推送) │ │
│ (数据库)│◀───订阅请求────────│ (Host) │
└─────────┘ └─────────┘
Resource 的优势:
Prompt 是预定义的提示模板,Server 可以提供标准化的交互模式。这是 MCP 较新的功能,用于封装复杂的交互流程。
Prompt 定义示例:
{
"name": "code_review",
"description": "执行标准化的代码审查流程",
"arguments": [
{
"name": "file_path",
"description": "要审查的文件路径",
"required": true
},
{
"name": "focus_areas",
"description": "重点关注领域",
"required": false
}
]
}
Prompt 的使用场景:
| 场景 | 说明 |
|---|---|
| 代码审查 | 标准化的审查清单和流程 |
| 故障诊断 | 预定义的排查步骤 |
| 数据分析 | 标准化的报表模板 |
| 文档生成 | 统一的文档结构和格式 |
Sampling 是 MCP 的高级功能,允许 Server 请求 Host 中的 LLM 进行推理。这实现了真正的双向通信。
使用场景:
Server (日志分析工具) 发现异常日志
│
▼
请求 Host: "请分析这条日志的含义"
│
▼
Host 调用 LLM 进行推理
│
▼
返回分析结果给 Server
│
▼
Server 基于分析结果决定下一步操作
Sampling 使得 MCP Server 不再是单纯的工具,而是可以自主决策的智能代理。
| 维度 | MCP | Function Calling |
|---|---|---|
| 标准化程度 | 协议级标准,跨厂商通用 | 各厂商自有实现(OpenAI、Google、Anthropic 格式不同) |
| 生态开放性 | 任何工具都可接入,去中心化 | 需 LLM 厂商逐一集成,中心化 |
| 上下文管理 | 支持 Resource 订阅和主动推送 | 单次调用,无状态,每次都要重新提供上下文 |
| 双向通信 | 支持 Server 主动推送和 Sampling | 仅 LLM 发起调用,单向 |
| 发现机制 | 自动发现可用 Tools,动态加载 | 需预先定义,静态配置 |
| 部署模式 | 独立进程,可本地/远程 | 通常内嵌在应用中 |
| 语言支持 | 任何语言都可实现 Server | 依赖 LLM SDK 的语言支持 |
| 复杂度 | 需要实现协议,初始成本高 | 简单直接,快速上手 |
| 适用场景 | 工具生态、企业集成、复杂工作流 | 简单 API 调用、快速原型 |
MCP 不是替代 Function Calling,而是在其上增加了一层标准化协议。
┌─────────────────────────────────────────┐
│ MCP 协议层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Tool │ │ Resource│ │ Prompt │ │
│ │ 定义 │ │ 订阅 │ │ 模板 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ └─────────────┴─────────────┘ │
│ 标准化接口 │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Function Calling │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ OpenAI │ │ Google │ │Anthropic│ │
│ │ 格式 │ │ 格式 │ │ 格式 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ 厂商实现层 │
└─────────────────────────────────────────┘
实际使用中的关系:
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 快速原型开发 | Function Calling | 简单直接,无需额外组件 |
| 构建工具生态 | MCP | 标准化,可复用,可共享 |
| 企业内部集成 | MCP | 安全隔离,权限可控,可审计 |
| 多模型支持 | MCP | 一次集成,多模型复用 |
| 复杂工作流 | MCP | 支持 Resource 订阅和 Sampling |
| 简单 API 调用 | Function Calling | 轻量级,无部署负担 |
使用官方 Python SDK 开发 MCP Server 是最快的方式。
环境准备:
pip install mcp
简单 Server 示例:
from mcp.server import Server
from mcp.types import TextContent, Tool
import json
# 创建 Server 实例
server = Server("code-search")
# 定义 Tool
@server.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(
name="search_code",
description="在代码库中搜索匹配查询的代码片段",
inputSchema={
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词或正则表达式"
},
"language": {
"type": "string",
"description": "编程语言过滤器",
"enum": ["python", "javascript", "java", "go"]
}
},
"required": ["query"]
}
)
]
# 实现 Tool 逻辑
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "search_code":
query = arguments["query"]
language = arguments.get("language")
# 执行搜索逻辑
results = await perform_code_search(query, language)
return [
TextContent(
type="text",
text=json.dumps(results, indent=2, ensure_ascii=False)
)
]
raise ValueError(f"Unknown tool: {name}")
# 启动 Server(stdio 模式)
if __name__ == "__main__":
server.run(transport="stdio")
配置文件(Claude Desktop):
{
"mcpServers": {
"code-search": {
"command": "python",
"args": ["/path/to/code_search_server.py"]
}
}
}
OpenClaw 是一个支持 MCP 的开源 AI Agent 框架,它的配置方式更加灵活。
配置文件示例:
# tools.yaml
mcp_servers:
- name: filesystem
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/home/user/workspace"
- name: web_search
command: python
args:
- "/path/to/web_search_server.py"
env:
SEARCH_API_KEY: "${SEARCH_API_KEY}"
- name: database
command: node
args:
- "/path/to/db_server.js"
transport: sse
url: "http://localhost:3001/sse"
OpenClaw 的 MCP 集成特点:
| 特性 | 说明 |
|---|---|
| 动态加载 | 运行时添加/移除 MCP Server |
| 权限控制 | 细粒度的 Tool 级别权限 |
| 错误处理 | 自动重试、降级策略 |
| 日志审计 | 完整的 Tool 调用链路追踪 |
| 多 Host 支持 | 同时连接多个 LLM Provider |
架构:
┌─────────────┐ ┌─────────────────────────────────────┐
│ Developer │────▶│ Claude Desktop │
│ (提交 PR) │ │ ┌─────────┐ ┌─────────┐ ┌────────┐ │
└─────────────┘ │ │Git Server│ │Lint Tool│ │Test Run│ │
│ └────┬────┘ └────┬────┘ └───┬────┘ │
└───────┼───────────┼──────────┼──────┘
▼ ▼ ▼
┌─────────────────────────────────────┐
│ GitHub API │
│ (自动评论、标签、审查状态) │
└─────────────────────────────────────┘
MCP Server 清单:
| Server | 功能 | 价值 |
|---|---|---|
| Git MCP | 读取 PR 差异、提交历史 | 获取代码变更上下文 |
| Lint MCP | 运行静态分析工具 | 发现代码风格问题 |
| Test MCP | 执行测试套件 | 验证代码正确性 |
| GitHub MCP | 发布评论、设置标签 | 自动化审查流程 |
工作流程:
架构:
┌─────────────┐ ┌─────────────────────────────────────┐
│ Analyst │────▶│ AI Assistant │
│ "Q3销售额?" │ │ ┌─────────┐ ┌─────────┐ ┌────────┐ │
└─────────────┘ │ │ DB Schema│ │ SQL Exec│ │ Viz Tool│ │
│ │ MCP │ │ MCP │ │ MCP │ │
│ └────┬────┘ └────┬────┘ └───┬────┘ │
└───────┼───────────┼──────────┼──────┘
▼ ▼ ▼
┌─────────────────────────────────────┐
│ Data Warehouse │
└─────────────────────────────────────┘
工作流程:
架构:
┌─────────────┐ ┌─────────────────────────────────────┐
│ On-call │────▶│ AI Assistant │
│ "服务挂了" │ │ ┌─────────┐ ┌─────────┐ ┌────────┐ │
└─────────────┘ │ │Monitor │ │ Log │ │Deploy │ │
│ │ MCP │ │ MCP │ │ MCP │ │
│ └────┬────┘ └────┬────┘ └───┬────┘ │
└───────┼───────────┼──────────┼──────┘
▼ ▼ ▼
┌─────────────────────────────────────┐
│ Infrastructure │
│ (Prometheus / ELK / Kubernetes) │
└─────────────────────────────────────┘
工作流程:
Anthropic 官方维护:
| 工具 | 仓库 | 说明 |
|---|---|---|
| server-filesystem | @modelcontextprotocol/server-filesystem | 安全的文件系统访问 |
| server-postgres | @modelcontextprotocol/server-postgres | PostgreSQL 数据库查询 |
| server-sqlite | @modelcontextprotocol/server-sqlite | SQLite 数据库操作 |
| server-github | @modelcontextprotocol/server-github | GitHub API 集成 |
| server-gitlab | @modelcontextprotocol/server-gitlab | GitLab API 集成 |
| server-slack | @modelcontextprotocol/server-slack | Slack 工作区管理 |
| server-puppeteer | @modelcontextprotocol/server-puppeteer | 浏览器自动化 |
| server-google-drive | @modelcontextprotocol/server-google-drive | Google Drive 文件访问 |
社区热门工具:
| 工具 | 作者 | 功能 | Stars |
|---|---|---|---|
| mcp-server-fetch | @zhengkai | 增强版 HTTP 请求 | 1.2k |
| mcp-server-brave-search | @brave | Brave 搜索引擎 | 800+ |
| mcp-server-memory | @modelcontextprotocol | 知识图谱记忆 | 2k+ |
| mcp-server-time | @modelcontextprotocol | 时间和时区处理 | 500+ |
| mcp-server-everything | @modelcontextprotocol | 测试/示例工具集 | 300+ |
| 语言 | SDK/框架 | 说明 |
|---|---|---|
| Python | mcp (官方) |
最成熟的 SDK,支持 Server 和 Client |
| TypeScript | @modelcontextprotocol/sdk (官方) |
官方 SDK,与 Claude Desktop 同源 |
| Java | mcp-java-sdk |
社区维护,Spring Boot 集成 |
| Go | mcp-go |
社区维护,高性能 |
| Rust | mcp-rs |
社区维护,内存安全 |
| 工具 | 用途 |
|---|---|
| MCP Inspector | 调试 MCP Server 的交互式工具 |
| Claude Desktop | 原生支持 MCP 的客户端 |
| OpenClaw | 开源 MCP Host 框架 |
| Zed Editor | 内置 MCP 支持的代码编辑器 |
MCP 的安全设计遵循最小权限原则:
┌─────────────────────────────────────────┐
│ 安全边界 │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────┐ │
│ │ User │───▶│ Host │───▶│ LLM │ │
│ │ (人类) │ │ (受信任) │ │ │ │
│ └─────────┘ └────┬────┘ └──┬──┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ │
│ │ MCP Client │ │
│ │ (Host 控制) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ MCP Server │ │
│ │ (不可信/沙箱) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────┘
安全层级:
| 层级 | 信任级别 | 控制方式 |
|---|---|---|
| User | 最高 | 人类决策 |
| Host | 高 | 应用代码,可审计 |
| LLM | 中 | 模型行为,需监控 |
| MCP Client | 中 | Host 控制 |
| MCP Server | 低 | 沙箱隔离 |
1. 进程隔离(Stdio 模式)
# Server 作为独立进程运行,受 OS 权限控制
{
"command": "python",
"args": ["server.py"],
"env": {
# 只暴露必要的文件路径
"ALLOWED_PATHS": "/project/src:/project/docs"
}
}
2. 文件系统沙箱
官方 server-filesystem 的权限控制:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
// 只允许访问指定目录
"/home/user/workspace",
"/home/user/documents"
]
}
}
}
3. 网络隔离
4. Tool 级别权限
# Server 内部实现权限检查
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "delete_file":
# 敏感操作需要额外确认
if not await confirm_deletion(arguments["path"]):
return ErrorContent(
type="error",
text="Deletion requires explicit confirmation"
)
# ...
| 实践 | 说明 |
|---|---|
| 只读优先 | 默认只提供读取工具,写入操作需要显式启用 |
| 路径白名单 | 文件系统 Server 严格限制可访问目录 |
| 审计日志 | 记录所有 Tool 调用,包括参数和结果 |
| 超时控制 | 设置 Tool 调用的最大执行时间 |
| 资源限制 | 限制 CPU、内存、网络使用量 |
| 输入验证 | 严格校验所有参数,防止注入攻击 |
| 错误隐藏 | 向 LLM 返回友好的错误信息,不暴露系统细节 |
1. 生态成熟度
2. 部署复杂度
3. 标准演进
4. 性能开销
1. 协议标准化
2. 生态繁荣
3. 技术演进
| 方向 | 预期发展 |
|---|---|
| 传输优化 | 更高效的二进制协议(如 gRPC) |
| 安全增强 | 内置认证、加密、审计 |
| 性能提升 | 连接池、批量调用、流式传输 |
| 智能发现 | AI 自动匹配最合适的 Tool |
| 多模态 | 支持图像、音频、视频资源 |
4. 企业采用
步骤 1:安装 Claude Desktop
下载并安装 Claude Desktop(支持 MCP 的版本)。
步骤 2:配置文件系统 Server
编辑 Claude Desktop 配置:
# macOS
~/Library/Application\ Support/Claude/claude_desktop_config.json
# Windows
%APPDATA%\Claude\claude_desktop_config.json
添加配置:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/yourname/Documents"
]
}
}
}
步骤 3:重启 Claude Desktop
重启后,Claude 会自动连接 filesystem Server。
步骤 4:开始使用
在对话中尝试:
你: "帮我读取 Documents 文件夹下的所有 PDF 文件名"
Claude: 调用 filesystem Server 的 list_directory Tool
返回文件列表
"我找到了以下 PDF 文件:
- report.pdf
- presentation.pdf
- manual.pdf"
完整示例:待办事项 Server
from mcp.server import Server
from mcp.types import TextContent, Tool
import json
server = Server("todo-manager")
# 内存存储(实际应用应使用数据库)
todos = []
@server.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(
name="add_todo",
description="添加新的待办事项",
inputSchema={
"type": "object",
"properties": {
"title": {"type": "string", "description": "待办事项标题"},
"priority": {
"type": "string",
"enum": ["low", "medium", "high"],
"default": "medium"
}
},
"required": ["title"]
}
),
Tool(
name="list_todos",
description="列出所有待办事项",
inputSchema={
"type": "object",
"properties": {
"filter": {
"type": "string",
"enum": ["all", "pending", "completed"],
"default": "all"
}
}
}
),
Tool(
name="complete_todo",
description="标记待办事项为已完成",
inputSchema={
"type": "object",
"properties": {
"id": {"type": "integer", "description": "待办事项 ID"}
},
"required": ["id"]
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "add_todo":
todo = {
"id": len(todos) + 1,
"title": arguments["title"],
"priority": arguments.get("priority", "medium"),
"completed": False
}
todos.append(todo)
return [TextContent(type="text", text=f"已添加待办事项:{todo['title']} (ID: {todo['id']})")]
elif name == "list_todos":
filter_status = arguments.get("filter", "all")
filtered = todos
if filter_status == "pending":
filtered = [t for t in todos if not t["completed"]]
elif filter_status == "completed":
filtered = [t for t in todos if t["completed"]]
return [TextContent(type="text", text=json.dumps(filtered, indent=2, ensure_ascii=False))]
elif name == "complete_todo":
todo_id = arguments["id"]
for todo in todos:
if todo["id"] == todo_id:
todo["completed"] = True
return [TextContent(type="text", text=f"已完成:{todo['title']}")]
return [TextContent(type="text", text=f"未找到 ID 为 {todo_id} 的待办事项")]
raise ValueError(f"Unknown tool: {name}")
if __name__ == "__main__":
server.run(transport="stdio")
配置到 Claude Desktop:
{
"mcpServers": {
"todo": {
"command": "python",
"args": ["/path/to/todo_server.py"]
}
}
}
| 资源 | 链接 | 说明 |
|---|---|---|
| MCP 官方文档 | https://modelcontextprotocol.io | 协议规范、快速入门 |
| MCP GitHub | https://github.com/modelcontextprotocol | 官方仓库、SDK、示例 |
| Anthropic 博客 | https://www.anthropic.com/news | MCP 发布公告 |
| SDK 文档 | https://github.com/modelcontextprotocol/python-sdk | Python SDK 详细文档 |
| 资源 | 说明 |
|---|---|
| MCP Community Servers | 社区维护的 Server 集合 |
| Awesome MCP | 精选 MCP 资源列表 |
| MCP Discord | 官方社区讨论 |
MCP(Model Context Protocol)代表了 LLM 工具集成的一个重要演进方向。它通过标准化协议解决了传统 Function Calling 的碎片化问题,为构建开放、可扩展的 AI 工具生态奠定了基础。
核心价值:
适用场景总结:
| 场景 | 是否适合 MCP | 说明 |
|---|---|---|
| 构建可复用的工具库 | ✅ 强烈推荐 | 标准化接口,多项目复用 |
| 企业内部系统集成 | ✅ 强烈推荐 | 安全隔离,权限可控 |
| 多模型支持 | ✅ 推荐 | 一次集成,多模型复用 |
| 简单原型开发 | ⚠️ 视情况 | 初期成本较高 |
| 超高频低延迟场景 | ❌ 不推荐 | 进程通信开销 |
MCP 仍处于快速发展阶段,但随着生态的成熟和更多厂商的加入,它有望成为 LLM 工具集成的行业标准。对于正在构建 AI 应用的企业和开发者来说,现在正是了解和采用 MCP 的好时机。
参考资料:Anthropic MCP 规范文档、MCP Python SDK 文档、MCP GitHub 仓库
更新日期:2026-05-02