Model Context Protocol (MCP) 深度研究报告
摘要
Model Context Protocol (MCP)[^1] 是由 Anthropic 于 2024 年 11 月发布的开放标准,旨在标准化应用程序向大语言模型 (LLM) 提供上下文的方式。MCP 被官方描述为 "AI 应用程序的通用 USB-C 端口",在 AI 模型与各种数据源和工具之间创建标准化连接。本报告基于官方文档和社区实践,为开发者提供 MCP 的技术理解和实施指导。
目录
MCP 核心概念
定义与价值
Model Context Protocol (MCP) 是一个开源协议,为 AI 模型与外部系统提供标准化接口。它解决了 AI 应用与各种工具和数据源之间碎片化集成的问题。
核心价值主张:
- 提供预构建的 LLM 集成组件
- 支持在不同 LLM 提供商之间切换
- 实施数据安全最佳实践
- 支持与多个服务器的灵活连接
- 创建标准化的 AI 应用程序接口
MCP 三大核心组件
MCP 协议定义了三个核心组件,为 LLM 应用提供标准化的功能接口:
1. Tools (工具)
- 定义:允许 LLM 通过服务器执行操作的可执行功能
- 核心特性:
- 提供动作执行能力
- 支持参数化调用
- 实现外部系统交互
- 使用场景:
- 数据库查询和修改
- 文件操作和管理
- API 调用和集成
- 计算和数据处理
示例实现:
@app.tool()
def search_database(query: str, table: str) -> str:
"""在指定表中搜索数据"""
# 执行数据库查询逻辑
return f"在 {table} 中找到 {query} 的相关结果"2. Resources (资源)
- 定义:向 LLM 暴露数据和内容的数据源抽象
- 核心特性:
- 提供上下文数据访问
- 支持多种数据格式
- 实现安全的数据共享
- 资源类型:
- 文本资源:文档、代码、配置文件
- 结构化数据:JSON、XML、数据库记录
- 二进制资源:图片、音频、视频(通过元数据访问)
访问语法:
@server:protocol://resource/path
@github:repo://owner/repo/file.md
@database:table://users/recent3. Prompts (提示)
- 定义:创建可重用提示模板和工作流的模板系统
- 核心特性:
- 标准化交互模式
- 支持参数化模板
- 实现复杂工作流组合
- 应用价值:
- 提高提示一致性
- 简化复杂操作
- 促进最佳实践共享
示例模板:
@app.prompt()
def code_review_prompt(language: str, code: str) -> str:
return f"""
请对以下 {language} 代码进行详细审查:
```{language}
{code}
```
关注点:安全性、性能、可维护性
"""协议组件架构
核心特性
MCP 协议的设计融入了多项核心特性,使其在 AI 与外部系统集成领域具有显著优势。这些特性共同确保了协议的标准化、安全性、灵活性和可扩展性。
1. 标准化接口 (Standardized Interface)
- 统一协议规范:MCP 基于 JSON-RPC 2.0 标准,为所有通信定义了统一的消息格式和方法调用约定。这意味着无论是工具调用、资源访问还是提示请求,都遵循相同的底层通信模式。
- 简化集成:开发者无需为每种外部服务或每个 LLM 编写定制化的适配器。一旦实现了 MCP 服务器,它就可以与任何支持 MCP 协议的客户端(如 Claude Desktop)进行通信。这大大降低了集成复杂性,加速了 AI 应用的开发和部署。
- 跨语言兼容:由于协议是语言无关的,开发者可以使用任何编程语言(Go, Python, TypeScript, Java 等)来实现 MCP 客户端或服务器,只要它们能正确地构造和解析 JSON-RPC 2.0 消息。
示例 JSON-RPC 请求 (工具调用):
{
"jsonrpc": "2.0",
"id": "call-weather-tool-123",
"method": "tools/call",
"params": {
"tool_name": "get_current_weather",
"args": {
"location": "伦敦",
"unit": "celsius"
}
}
}示例 JSON-RPC 响应 (工具结果):
{
"jsonrpc": "2.0",
"id": "call-weather-tool-123",
"result": "伦敦当前气温 18 摄氏度,多云。"
}2. 安全连接 (Secure Connections)
- 内置身份验证和权限控制:MCP 协议支持多种认证机制,包括但不限于 OAuth 2.0。这意味着 MCP 服务器可以要求客户端提供有效的凭证,以验证其身份。
- 最小权限原则:服务器可以根据客户端的身份和请求类型,实施细粒度的权限控制。例如,某个 LLM 代理可能只被授权读取数据库,而不能修改数据;或者只能访问特定目录下的文件。
- 敏感信息隔离:API 密钥、数据库凭证等敏感信息由 MCP 服务器管理,而不是直接暴露给 LLM 或客户端。LLM 只需要知道工具的名称和参数,而无需关心底层凭证。
- 传输层安全 (TLS):对于远程 MCP 服务器,建议使用 TLS/SSL 加密通信,以防止数据在传输过程中被窃听或篡改。
3. 多协议支持 (Multi-protocol Support)
MCP 协议层是抽象的,可以运行在多种传输协议之上,以适应不同的部署场景和性能需求:
- Stdio (Standard Input/Output):
- 适用场景:本地进程间通信,例如 MCP 主机(如 Claude Desktop)作为父进程启动 MCP 服务器作为子进程。
- 特点:低延迟、简单实现、高安全性(因为通信仅限于本地)。
- 技术细节:通过父子进程的标准输入和标准输出流进行 JSON-RPC 消息的交换。
- SSE (Server-Sent Events):
- 适用场景:服务器向客户端推送实时数据流,例如 LLM 需要持续接收来自外部系统的更新或长时运行工具的进度。
- 特点:服务器推送、自动重连机制、基于 HTTP 协议。
- 技术细节:客户端通过 HTTP 连接到服务器,服务器通过该连接持续发送事件流。
- HTTP (Hypertext Transfer Protocol):
- 适用场景:远程集成、Web 服务部署,允许多个客户端通过网络访问同一个 MCP 服务器。
- 特点:标准协议、易于调试、通用性强、可利用现有 HTTP 基础设施(负载均衡、API 网关)。
- 技术细节:客户端通过 HTTP POST 请求发送 JSON-RPC 消息,服务器通过 HTTP 响应返回结果。
4. 插件化架构 (Pluggable Architecture)
- 易于扩展新功能:MCP 服务器被设计为模块化的,开发者可以轻松地添加新的工具、资源或提示,而无需修改协议核心。
- 生态系统驱动:这种插件化特性鼓励社区开发和贡献各种 MCP 服务器,形成一个丰富的生态系统,覆盖广泛的外部服务和数据源。
- 独立部署与升级:每个 MCP 服务器都可以独立部署和升级,降低了系统维护的复杂性。
5. 资源引用 (Resource Referencing)
- 统一的 URI 格式:MCP 使用
server:protocol://resource/path这种统一的 URI 格式来引用外部资源。这使得 LLM 能够以一种标准化的方式请求访问各种类型的数据。 - 抽象化数据源:LLM 无需关心数据存储的具体细节(是文件系统、数据库还是 Web API),只需要通过 URI 引用资源。MCP 服务器负责将 URI 解析为实际的数据访问操作。
- 示例:
@github:repo://my-org/my-repo/src/main.go:引用 GitHub 仓库中的 Go 语言文件。@jira:issue://PROJ-123/comments:引用 Jira 任务 PROJ-123 的评论。@s3:bucket://my-data-lake/reports/2025-Q2.csv:引用 S3 存储桶中的 CSV 报告。
6. 斜杠命令 (Slash Commands)
- 用户友好交互:MCP 服务器可以将特定的提示(Prompts)暴露为客户端的“斜杠命令”。这使得用户可以直接在支持 MCP 的客户端(如 Claude Desktop)的聊天界面中,通过输入
/command_name来触发复杂的 LLM 工作流。 - 简化复杂操作:例如,用户可以输入
/code_review my_file.py来触发一个代码审查流程,而无需手动构建复杂的提示。 - 动态表单生成:如果斜杠命令对应的提示定义了参数,客户端可以根据这些参数自动生成用户输入表单,引导用户提供必要的信息。
7. 跨项目访问 (Cross-Project Access)
- 服务器共享:一个 MCP 服务器可以被多个不同的 MCP 主机或项目共享和访问。例如,一个企业内部的知识库 MCP 服务器可以被多个团队的 AI 应用所使用。
- 集中管理:这有助于集中管理和维护共享的工具和数据源,提高资源利用率和一致性。
- 权限隔离:尽管服务器可以共享,但通过内置的认证和授权机制,可以确保不同项目或用户只能访问其被授权的工具和资源,实现权限隔离。
这些核心特性共同构成了 MCP 协议的强大基础,使其成为连接 AI 模型与外部世界的高效、安全和可扩展的解决方案。
技术架构
通信协议详解
MCP 的通信核心基于 JSON-RPC 2.0 协议标准,这是一种轻量级的远程过程调用协议,它定义了消息的格式和处理流程。MCP 在此基础上,支持多种传输层协议,以适应不同的部署环境和性能需求。
JSON-RPC 2.0 基础
JSON-RPC 2.0 协议使用 JSON 作为数据交换格式,并定义了两种基本消息类型:
请求 (Request):客户端向服务器发送的调用某个方法的请求。包含
jsonrpc版本、method名称、params(参数) 和可选的id(请求标识符)。json{ "jsonrpc": "2.0", "method": "tools/call", "params": { "tool_name": "get_current_weather", "args": {"location": "北京"} }, "id": 1 }响应 (Response):服务器对请求的回复。包含
jsonrpc版本、id(与请求匹配) 和result(成功结果) 或error(错误信息)。json// 成功响应 { "jsonrpc": "2.0", "result": "北京当前气温 25 摄氏度,晴朗。", "id": 1 } // 错误响应 { "jsonrpc": "2.0", "error": { "code": -32602, // Invalid params "message": "Invalid location provided." }, "id": 1 }通知 (Notification):一种特殊的请求,不包含
id字段,因此服务器不会返回响应。用于单向事件通知,例如服务器向客户端发送状态更新。json{ "jsonrpc": "2.0", "method": "server/status", "params": {"status": "ready", "uptime": 3600} }
传输层协议
MCP 协议可以在多种传输层协议上运行,每种协议都有其独特的适用场景和优势:
| 协议 | 适用场景 | 特点 | 技术细节 |
|---|---|---|---|
| Stdio (Standard Input/Output) | 本地进程通信:MCP 主机(如 Claude Desktop)作为父进程启动 MCP 服务器作为子进程。 | 低延迟、简单实现、高安全性:通信仅限于本地进程,无需网络配置,数据不离开本地环境。 | MCP 客户端和服务器通过标准输入 (stdin) 和标准输出 (stdout) 流交换 JSON-RPC 消息。每条消息以 Content-Length 和 Content-Type 头开始,后跟一个空行和 JSON 消息体。 |
| SSE (Server-Sent Events) | 实时数据流、服务器推送:适用于 MCP 服务器需要向客户端持续推送数据或事件的场景,例如长时运行工具的进度更新、资源内容的流式传输。 | 单向通信、自动重连、基于 HTTP:客户端通过 HTTP 连接到服务器,服务器通过该连接持续发送事件流。浏览器原生支持,易于实现。 | 客户端发起一个 HTTP GET 请求,Accept 头为 text/event-stream。服务器以 Content-Type: text/event-stream 响应,并以 data: 前缀发送事件数据。MCP 将 JSON-RPC 消息封装在 SSE 事件中。 |
| HTTP (Hypertext Transfer Protocol) | 远程集成、Web 服务部署:允许多个 MCP 客户端通过网络访问同一个 MCP 服务器。 | 标准协议、易于调试、通用性强:可利用现有 HTTP 基础设施(负载均衡、API 网关、CDN)。适用于跨机器、跨网络的服务调用。 | MCP 客户端向服务器的特定 HTTP 端点 (通常是 /rpc) 发送 HTTP POST 请求,请求体为 JSON-RPC 消息。服务器处理请求后,将 JSON-RPC 响应作为 HTTP 响应体返回。 |
通信模式与连接生命周期
MCP 的通信模式支持请求-响应和通知,并且定义了清晰的连接生命周期,确保了通信的可靠性和有序性。
1. 请求-响应 (Request-Response)
- 机制:客户端或服务器发送一个带有
id字段的请求,并期待接收一个带有相同id的响应。这是 MCP 中最常见的通信模式,用于工具调用、资源读取等需要结果返回的操作。 - 双向性:MCP 协议支持双向请求-响应。这意味着客户端可以向服务器发送请求,服务器也可以向客户端发送请求(例如,服务器请求客户端提供某个本地资源)。
2. 通知 (Notifications)
- 机制:单向消息,不包含
id字段,因此发送方不期待接收响应。用于状态更新、事件通知或不关心结果的操作。 - 示例:服务器通知客户端某个工具已注册、某个资源已更新,或者客户端通知服务器连接即将关闭。
连接生命周期:
MCP 连接的生命周期分为三个主要阶段:
初始化阶段 (Initialization):
initialize请求:客户端发起连接后,首先发送initialize请求,告知服务器其支持的协议版本和客户端能力(例如,支持哪些资源协议)。initialize/response:服务器响应其自身的能力,包括支持的协议版本、可用的工具、资源和提示的元数据。这是客户端了解服务器功能的第一步。initialized通知:客户端发送initialized通知,表示初始化完成,可以开始正常的消息交换。
正常消息交换阶段 (Normal Message Exchange):
- 在此阶段,客户端和服务器可以自由地进行请求-响应通信和通知消息传递。
- 客户端可以请求工具列表 (
tools/list)、调用工具 (tools/call)、读取资源 (resources/read)、调用提示 (prompts/call) 等。 - 服务器可以向客户端发送通知,例如工具执行的进度更新、资源状态变化等。
- 错误处理:协议定义了标准化的错误码和错误消息格式,以便客户端和服务器能够有效地处理通信或业务逻辑错误。
- 心跳机制:为了维持连接活跃和检测断开,通常会实现心跳机制(例如,定期发送空通知或特定心跳请求)。
连接终止阶段 (Termination):
shutdown请求 (可选):客户端可以发送shutdown请求,请求服务器进行优雅关闭。服务器在完成所有待处理任务后响应。exit通知:客户端发送exit通知,表示客户端即将关闭连接。服务器收到此通知后,会关闭与该客户端的连接,并进行资源清理。- 异常终止:如果连接意外断开(例如,进程崩溃、网络故障),双方应有机制检测并处理异常,例如自动重连或清理悬挂资源。
这种明确的生命周期管理确保了 MCP 连接的健壮性和可预测性,对于构建可靠的 AI 应用程序至关重要。
数据流处理机制
MCP 协议不仅定义了 LLM 如何调用外部工具和访问资源,还规范了数据在整个 AI 应用生态系统中的流动方式。理解 MCP 的数据流处理机制对于构建高效、可靠且安全的 AI 应用至关重要。
详细数据流解析
用户意图 / LLM 决策 (AI Client -> MCP Client):
- 用户通过 AI 客户端(如 Claude Desktop)提出请求,或 AI Agent (LLM) 在其推理过程中决定需要外部信息或执行外部操作。
- LLM 根据其对可用工具和资源的理解(这些信息由 MCP 服务器在初始化阶段提供),生成一个结构化的意图,例如调用某个工具并附带参数,或者请求读取某个资源。
JSON-RPC Request (MCP Client -> MCP Server):
- MCP 客户端库接收到 LLM 的意图后,将其封装成符合 JSON-RPC 2.0 规范的请求消息。
- 对于工具调用,消息类型通常是
tools/call,参数包含tool_name和args(工具参数)。 - 对于资源读取,消息类型可能是
resources/read,参数包含resource_uri和可选的range或format。 - 此请求通过底层传输协议(Stdio, SSE, HTTP)发送到对应的 MCP 服务器。
转换为外部系统调用 (MCP Server -> External System):
- MCP 服务器接收并解析 JSON-RPC 请求。
- 服务器内部的业务逻辑将抽象的 MCP 请求转换为针对特定外部系统的具体调用。例如:
get_user_data工具调用可能被转换为 SQL 查询SELECT * FROM users WHERE id = ?。read_file资源请求可能被转换为文件系统调用fs.readFile(path)。send_email工具调用可能被转换为对邮件服务 API 的 HTTP POST 请求。
- 这一步是 MCP 服务器的核心职责,它隐藏了外部系统的复杂性,为 LLM 提供统一的接口。
外部系统响应 (External System -> MCP Server):
- 外部系统执行操作并返回原始数据或操作结果。这些数据可能是数据库记录、API 响应 JSON、文件内容等,其格式和结构取决于外部系统本身。
JSON-RPC Response (MCP Server -> MCP Client):
- MCP 服务器接收到外部系统的原始响应后,对其进行处理和格式化。
- 数据格式化与抽象:这是关键一步。服务器会将原始数据转换为 LLM 更容易理解和利用的格式。例如:
- 数据库查询结果可能被转换为简洁的 Markdown 表格或结构化的 JSON 对象。
- 文件内容可能被截断、摘要或转换为特定格式(如代码块)。
- API 响应中的复杂嵌套 JSON 可能被扁平化或提取关键信息。
- 处理后的结果被封装在 JSON-RPC 响应的
result字段中,并通过传输协议返回给 MCP 客户端。 - 如果发生错误,服务器会返回一个包含错误码和错误信息的 JSON-RPC
error响应。
LLM 可理解的上下文 / 工具结果 (MCP Client -> AI Client):
- MCP 客户端接收并解析服务器的 JSON-RPC 响应。
- 将处理后的结果传递给 LLM。对于 LLM 而言,这些结果是其决策和生成过程的重要上下文。例如,LLM 接收到天气信息后,可以将其整合到对用户的自然语言回复中。
LLM 处理并生成响应 (AI Client):
- LLM 根据接收到的工具结果或资源内容,结合其自身的知识和推理能力,进行进一步的思考和处理。
- 这可能包括生成最终的用户响应、决定进行另一次工具调用(形成工具链)、或者请求更多上下文。
最终响应 (AI Client -> User):
- LLM 生成最终的自然语言响应或执行其他动作(如更新 UI),并将其呈现给用户。
流式数据处理 (Streaming Data)
MCP 协议通过 SSE (Server-Sent Events) 传输协议支持流式数据处理,这对于处理大型资源或需要实时反馈的工具执行场景非常有用。
- 长时运行工具的进度更新:当一个工具执行时间较长时(例如,生成一份复杂的报告,或执行一个耗时的自动化任务),MCP 服务器可以通过 SSE 持续向客户端发送进度更新通知,而不是等待整个任务完成。
- 大型资源的分块读取:对于非常大的文件或数据库查询结果,MCP 服务器可以分块读取并流式传输给客户端,避免一次性加载到内存中导致性能问题。
- 实时事件通知:MCP 服务器可以作为事件源,将外部系统发生的实时事件(如新邮件、系统告警)通过 SSE 推送给客户端,供 LLM 及时响应。
这种数据流处理机制的设计,使得 MCP 能够有效地桥接 LLM 的抽象推理能力与外部世界的具体操作和数据,同时兼顾了性能、安全和用户体验。
官方架构模型
MCP 采用客户端-服务器架构,遵循 JSON-RPC 2.0 协议标准,包含五个关键组件。这些组件协同工作,共同构建了一个灵活、可扩展的 AI-外部系统交互生态。
1. MCP 主机 (MCP Hosts)
定义:MCP 主机是需要利用 MCP 协议与外部世界交互的 AI 应用程序或平台。它们是用户与 AI 交互的入口,也是 MCP 客户端的运行环境。
示例:
- Claude Desktop:Anthropic 官方提供的桌面应用,用户可以直接在其中与 Claude 交互,并利用配置的 MCP 服务器。
- IDE 集成:未来可能出现的集成到 VS Code、IntelliJ IDEA 等开发环境中的 AI 助手,通过 MCP 访问代码库、版本控制系统等。
- AI 开发工具:如 LangChain、LlamaIndex 等框架,可以通过集成 MCP 客户端库来利用 MCP 服务器提供的能力。
- 自定义 AI 应用:任何需要 LLM 访问外部数据或执行操作的应用程序,例如智能客服系统、自动化运维平台等。
职责:
- 发起与 MCP 服务器的连接:主机负责启动和管理 MCP 客户端,并建立与一个或多个 MCP 服务器的连接。
- 包含多个 MCP 客户端实例:一个主机可以同时连接到多个 MCP 服务器,每个连接由一个独立的 MCP 客户端实例管理。
- 管理应用级别的用户交互:主机负责将用户的请求传递给 LLM,并将 LLM 的响应(包括工具调用建议、资源访问请求等)呈现给用户,或根据 LLM 的指示执行后续操作。
- 配置管理:管理 MCP 服务器的配置信息,例如服务器的启动命令、环境变量、认证凭证等。
2. MCP 客户端 (MCP Clients)
定义:MCP 客户端是运行在 MCP 主机应用内部的协议客户端。它是 MCP 主机与 MCP 服务器之间通信的桥梁,负责协议的封装和解封装。
职责:
- 维护与服务器的 1:1 连接关系:每个 MCP 客户端实例通常只连接到一个 MCP 服务器。如果主机需要与多个服务器通信,它会启动多个客户端实例。
- 发送请求并接收响应:客户端负责将 LLM 的意图(如工具调用请求、资源读取请求)封装成 JSON-RPC 2.0 消息发送给服务器,并解析服务器返回的响应。
- 处理双向通信和生命周期管理:客户端管理与服务器的连接生命周期,包括初始化握手、心跳维持、错误重连和优雅关闭。
- 工具/资源/提示的发现与缓存:在连接建立后,客户端会从服务器获取其提供的工具、资源和提示的元数据,并将其提供给 LLM 或主机应用。
特性:
- 轻量级:客户端库通常设计得非常轻量,易于集成到各种主机应用中。
- 多语言支持:由于 MCP 是一个协议标准,因此可以有多种语言的客户端实现(例如,TypeScript/JavaScript 用于 Web 应用,Go 用于后端服务,Python 用于数据科学平台)。
- 透明性:对于 LLM 而言,MCP 客户端和服务器的存在是透明的,LLM 只需要理解工具、资源和提示的概念。
3. MCP 服务器 (MCP Servers)
定义:MCP 服务器是暴露特定功能(工具、资源、提示)的轻量级程序。它们是 MCP 架构的核心,负责将外部系统(数据库、API、文件系统等)的能力抽象并通过 MCP 协议暴露给 LLM。
部署方式:
- 本地进程 (Stdio):作为 MCP 主机应用的子进程运行,通过标准输入/输出流进行通信。这种方式适用于本地开发、桌面应用集成,具有低延迟和高安全性的特点(因为通信仅限于本地进程)。
- 远程服务 (HTTP/SSE):作为独立的网络服务运行,通过 HTTP 或 Server-Sent Events (SSE) 进行通信。这种方式适用于分布式部署、云环境,允许多个 MCP 主机共享同一个服务器,但需要额外的网络配置和安全考虑。
职责:
- 提供上下文、工具和提示给客户端:服务器负责注册和管理其提供的所有工具、资源和提示的元数据,并在客户端请求时将其发送。
- 处理传入请求和通知:服务器解析来自客户端的 JSON-RPC 2.0 请求(如
tools/call、resources/read),执行相应的操作,并将结果返回。 - 管理与数据源的实际交互:服务器内部封装了与底层外部系统(如数据库驱动、API 客户端、文件系统操作)的具体交互逻辑。
- 认证与授权:服务器负责验证客户端的身份,并根据配置的权限策略决定是否允许执行某个工具或访问某个资源。
- 错误处理与日志记录:服务器应捕获工具执行过程中的错误,并以标准化的方式返回给客户端,同时记录详细的日志以便于调试和审计。
4. 本地数据源 (Local Data Sources)
类型:指运行在与 MCP 主机相同机器上的数据存储或服务。
- 计算机文件:如本地磁盘上的文档、图片、代码文件等。
- 本地数据库:如 SQLite 数据库文件、本地运行的 PostgreSQL/MySQL 实例。
- 本地服务:如本地运行的 REST API、消息队列等。
访问方式:通常通过本地部署的 MCP 服务器(使用 Stdio 通信)进行代理访问。
优势:
- 低延迟:数据访问无需经过网络,响应速度快。
- 高安全性:数据不离开本地环境,降低了数据泄露的风险。
- 完整控制:开发者对数据和服务的访问权限拥有完全的控制。
5. 远程服务 (Remote Services)
类型:指通过网络可访问的外部系统或云服务。
- 云服务提供商的 API:如 AWS S3、Google Cloud Storage、Azure Blob Storage。
- SaaS 应用的 API:如 GitHub API、Jira API、Salesforce API、Slack API。
- 云数据库:如 Amazon RDS、Google Cloud SQL、Azure SQL Database。
- 第三方 Web 服务:任何通过 HTTP/HTTPS 暴露的 API。
集成方式:通过远程部署的 MCP 服务器(使用 HTTP/SSE 通信)进行封装。MCP 服务器充当 LLM 与这些远程服务之间的代理。
示例:
- 一个 GitHub MCP 服务器可以封装 GitHub API,允许 LLM 查询代码、创建 Issue、管理 Pull Request。
- 一个 Zapier MCP 服务器可以封装 Zapier 的能力,让 LLM 能够触发 Zapier 上的自动化工作流,连接数千个应用。
优势:
- 功能扩展:极大地扩展了 LLM 的能力范围,使其能够与全球范围内的各种在线服务交互。
- 集中管理:MCP 服务器可以集中管理对远程服务的认证凭证和访问策略。
- 可伸缩性:远程 MCP 服务器可以独立扩展,以应对高并发请求。
交互流程示例:LLM 调用工具
为了更好地理解这些组件如何协同工作,我们来看一个 LLM 调用工具的典型交互流程:
这个流程清晰地展示了 MCP 协议如何作为中间层,将 LLM 的抽象意图转化为对外部系统的具体操作,并将操作结果反馈给 LLM,最终生成用户可理解的响应。这种分层和模块化的设计是 MCP 强大功能和灵活性的基础。
Claude Code 中的 MCP 集成
安装和配置
添加 MCP 服务器:
# 添加服务器
claude mcp add <server-name>
# 管理身份验证
/mcp配置作用域:
- 本地配置 - 仅当前项目可用
- 项目配置 - 项目团队共享
- 用户配置 - 个人全局可用
支持的服务器类型
| 服务器类型 | 描述 | Claude Code 支持 |
|---|---|---|
| Stdio | 标准输入输出通信 | ✅ 完全支持 |
| SSE | 服务器发送事件 | ✅ 完全支持 |
| HTTP | HTTP REST 接口 | ✅ 完全支持 |
资源访问方式
资源引用语法:
@server:protocol://resource/path支持的资源类型:
- 文本资源
- JSON 数据
- 结构化数据
斜杠命令
MCP 服务器可以暴露提示作为斜杠命令:
/mcp__servername__promptname身份验证
- 支持 OAuth 2.0 进行远程服务器身份验证
- 通过
/mcp命令管理认证流程 - 支持环境变量配置 API 密钥
安全注意事项
⚠️ 重要安全提醒:
- 使用第三方 MCP 服务器需要自行承担风险
- 连接到互联网的服务器可能存在提示注入风险
- 建议仅使用可信的官方或验证过的服务器
MCP 服务器选择指南
数据存储类服务器
快速选择指南
| 需求场景 | 推荐方案 | 理由 |
|---|---|---|
| 本地开发/原型 | SQLite MCP | 零配置、轻量级、快速启动 |
| 生产环境/高性能 | PostgreSQL MCP | 成熟稳定、功能完整、企业支持 |
| MySQL 现有系统 | MySQL MCP | 兼容现有架构 |
| 缓存/会话 | Redis MCP | 高性能、内存存储 |
| 文档/非结构化 | MongoDB MCP | 灵活 Schema、JSON 原生支持 |
PostgreSQL MCP
安装配置:
{
"postgres-main": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://user:pass@localhost:5432/db"],
"env": {
"PGPOOL_MAX_SIZE": "20",
"PGPOOL_IDLE_TIMEOUT": "300000"
}
}
}核心特性:只读 SQL 查询、架构自动发现、性能分析
适用场景:生产环境、复杂查询、大数据量
SQLite MCP
安装配置:
{
"sqlite-local": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "./data/app.db"],
"env": {
"SQLITE_JOURNAL_MODE": "WAL",
"SQLITE_CACHE_SIZE": "10000"
}
}
}核心特性:零配置、文件存储、全文搜索 (FTS5)
适用场景:本地开发、原型验证、小数据量
MySQL MCP
安装配置:
{
"mysql-legacy": {
"command": "npx",
"args": ["-y", "mcp-server-mysql"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_USER": "readonly_user",
"MYSQL_PASSWORD": "${MYSQL_PASSWORD}",
"MYSQL_DATABASE": "production_db"
}
}
}核心特性:多库支持、权限控制、复制状态检查
适用场景:现有 MySQL 系统集成
Redis MCP
安装配置:
{
"redis-cache": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-redis",
"redis://localhost:6379"]
}
}核心特性:高性能键值存储、发布订阅、流处理
适用场景:缓存、会话管理、实时数据
上下文记忆管理
Memory Bank MCP
安装配置:
{
"memory-bank": {
"command": "npx",
"args": ["-y", "@movibe/memory-bank-mcp"],
"env": {
"MEMORY_BANK_ROOT": "./memory-bank",
"STORAGE_BACKEND": "sqlite"
}
}
}核心特性:知识图谱管理、实体关系映射、语义搜索
适用场景:上下文继承、知识构建、智能问答
存储后端选择:
- SQLite: 中小规模,本地部署
- ChromaDB: 大规模语义搜索
- Redis Graph: 复杂关系查询
Web 自动化工具
选择建议:优先 Playwright MCP
Playwright MCP (推荐)
{
"playwright-web": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-playwright"]
}
}优势:多浏览器支持、结构化数据获取、Microsoft 官方维护
Puppeteer MCP (备选)
{
"puppeteer-web": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
}
}优势:学习成本低、社区资源丰富
| 对比维度 | Playwright | Puppeteer |
|---|---|---|
| 浏览器支持 | 多浏览器 | 仅 Chrome |
| 数据获取 | 结构化 + 视觉 | 主要视觉 |
| AI 友好性 | 高 | 中 |
| 维护状态 | 官方 | 社区 |
业务集成工具
Zapier MCP
安装配置:
{
"zapier-integration": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-zapier"],
"env": {
"ZAPIER_API_KEY": "${ZAPIER_API_KEY}"
}
}
}功能规模:8000+ 应用集成、工作流自动化
使用限制:Beta 阶段 300次/月,国内网络可能存在访问限制
开发工具集成
GitHub MCP
安装配置:
{
"github-dev": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}功能:Issues/PR 管理、代码审查、CI/CD 集成
选择建议:新手使用 GitHub MCP,熟练开发者优先考虑原生 gh CLI
21st.dev Magic MCP
安装配置:
{
"magic-ui": {
"command": "npx",
"args": ["-y", "@21st-dev/mcp-server-magic"],
"env": {
"MAGIC_API_KEY": "${MAGIC_API_KEY}"
}
}
}功能:自然语言生成 UI 组件、多框架支持
定价:5 次免费试用,$20/月个人版
创建自定义 MCP 服务
Go 语言实现 MCP 服务器
Go MCP 生态系统
| 库名 | 特点 | 推荐度 |
|---|---|---|
| metoro-io/mcp-golang | 类型安全、低样板代码、官方推荐 | ⭐⭐⭐ |
| mark3labs/mcp-go | 高级接口、快速开发、特性完整 | ⭐⭐⭐ |
| ThinkInAIXYZ/go-mcp | 三层架构、Web 框架集成 | ⭐⭐ |
实例:账本服务 MCP
基于项目现有的账本服务,创建一个实用的 MCP 服务器:
// cmd/mcp-ledger/main.go
package main
import (
"context"
"fmt"
"log"
"os"
"time"
"github.com/metoro-io/mcp-golang"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// 账本数据模型
type Account struct {
ID uint `json:"id" gorm:"primaryKey"`
Name string `json:"name" gorm:"not null"`
Type string `json:"type" gorm:"not null"` // asset, liability, equity, income, expense
Balance int64 `json:"balance"` // 分为单位
Description string `json:"description"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type Transaction struct {
ID uint `json:"id" gorm:"primaryKey"`
Description string `json:"description" gorm:"not null"`
Amount int64 `json:"amount" gorm:"not null"` // 分为单位
FromAccount uint `json:"from_account"`
ToAccount uint `json:"to_account"`
Category string `json:"category"`
CreatedAt time.Time `json:"created_at"`
}
// MCP 工具参数结构体
type CreateAccountArgs struct {
Name string `json:"name" description:"账户名称"`
Type string `json:"type" description:"账户类型: asset, liability, equity, income, expense"`
Description string `json:"description" description:"账户描述"`
}
type CreateTransactionArgs struct {
Description string `json:"description" description:"交易描述"`
Amount float64 `json:"amount" description:"交易金额(元)"`
FromAccount uint `json:"from_account" description:"转出账户ID"`
ToAccount uint `json:"to_account" description:"转入账户ID"`
Category string `json:"category" description:"交易分类"`
}
type GetBalanceArgs struct {
AccountID uint `json:"account_id" description:"账户ID"`
}
type LedgerService struct {
db *gorm.DB
}
func NewLedgerService(dbPath string) (*LedgerService, error) {
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
return nil, fmt.Errorf("failed to connect database: %w", err)
}
// 自动迁移
if err := db.AutoMigrate(&Account{}, &Transaction{}); err != nil {
return nil, fmt.Errorf("failed to migrate database: %w", err)
}
return &LedgerService{db: db}, nil
}
// MCP 工具实现
func (s *LedgerService) CreateAccount(ctx context.Context, args CreateAccountArgs) (string, error) {
account := Account{
Name: args.Name,
Type: args.Type,
Description: args.Description,
Balance: 0,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
if err := s.db.Create(&account).Error; err != nil {
return "", fmt.Errorf("failed to create account: %w", err)
}
return fmt.Sprintf("✅ 账户创建成功\nID: %d\n名称: %s\n类型: %s\n描述: %s",
account.ID, account.Name, account.Type, account.Description), nil
}
func (s *LedgerService) CreateTransaction(ctx context.Context, args CreateTransactionArgs) (string, error) {
// 转换金额为分
amountCents := int64(args.Amount * 100)
// 验证账户存在
var fromAccount, toAccount Account
if err := s.db.First(&fromAccount, args.FromAccount).Error; err != nil {
return "", fmt.Errorf("转出账户不存在: %w", err)
}
if err := s.db.First(&toAccount, args.ToAccount).Error; err != nil {
return "", fmt.Errorf("转入账户不存在: %w", err)
}
// 开始事务
tx := s.db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 创建交易记录
transaction := Transaction{
Description: args.Description,
Amount: amountCents,
FromAccount: args.FromAccount,
ToAccount: args.ToAccount,
Category: args.Category,
CreatedAt: time.Now(),
}
if err := tx.Create(&transaction).Error; err != nil {
tx.Rollback()
return "", fmt.Errorf("failed to create transaction: %w", err)
}
// 更新账户余额
if err := tx.Model(&fromAccount).Update("balance", gorm.Expr("balance - ?", amountCents)).Error; err != nil {
tx.Rollback()
return "", fmt.Errorf("failed to update from account: %w", err)
}
if err := tx.Model(&toAccount).Update("balance", gorm.Expr("balance + ?", amountCents)).Error; err != nil {
tx.Rollback()
return "", fmt.Errorf("failed to update to account: %w", err)
}
tx.Commit()
return fmt.Sprintf("✅ 交易创建成功\nID: %d\n描述: %s\n金额: ¥%.2f\n从: %s -> 到: %s",
transaction.ID, transaction.Description, args.Amount, fromAccount.Name, toAccount.Name), nil
}
func (s *LedgerService) GetAccountBalance(ctx context.Context, args GetBalanceArgs) (string, error) {
var account Account
if err := s.db.First(&account, args.AccountID).Error; err != nil {
return "", fmt.Errorf("账户不存在: %w", err)
}
balance := float64(account.Balance) / 100
return fmt.Sprintf("💰 账户余额查询\n账户: %s (%s)\n余额: ¥%.2f\n更新时间: %s",
account.Name, account.Type, balance, account.UpdatedAt.Format("2006-01-02 15:04:05")), nil
}
func (s *LedgerService) ListAccounts(ctx context.Context) (string, error) {
var accounts []Account
if err := s.db.Find(&accounts).Error; err != nil {
return "", fmt.Errorf("failed to list accounts: %w", err)
}
if len(accounts) == 0 {
return "📋 暂无账户记录", nil
}
result := "📋 账户列表:\n\n"
for _, account := range accounts {
balance := float64(account.Balance) / 100
result += fmt.Sprintf("ID: %d | %s (%s) | ¥%.2f\n",
account.ID, account.Name, account.Type, balance)
}
return result, nil
}
func main() {
// 获取数据库路径
dbPath := os.Getenv("LEDGER_DB_PATH")
if dbPath == "" {
dbPath = "./data/ledger.db"
}
// 初始化账本服务
service, err := NewLedgerService(dbPath)
if err != nil {
log.Fatalf("Failed to initialize ledger service: %v", err)
}
// 创建 MCP 服务器
server := mcp.NewServer("lzt-ledger-mcp", "1.0.0")
// 注册工具
server.AddTool("create_account", "创建新的账户", service.CreateAccount)
server.AddTool("create_transaction", "创建新的交易记录", service.CreateTransaction)
server.AddTool("get_balance", "查询账户余额", service.GetAccountBalance)
server.AddTool("list_accounts", "列出所有账户", service.ListAccounts)
// 启动服务器
log.Println("🚀 Ledger MCP Server starting...")
if err := server.Serve(context.Background()); err != nil {
log.Fatalf("Server failed: %v", err)
}
}构建和配置
# go.mod
module github.com/FixIterate/lz-stash/mcp-ledger
go 1.21
require (
github.com/metoro-io/mcp-golang v0.1.0
gorm.io/driver/sqlite v1.5.4
gorm.io/gorm v1.25.5
)
# 构建
go mod init github.com/FixIterate/lz-stash/mcp-ledger
go mod tidy
go build -o mcp-ledger ./cmd/mcp-ledger
# 创建数据目录
mkdir -p data
# 运行测试
./mcp-ledgerClaude Code 配置
{
"mcpServers": {
"lzt-ledger": {
"command": "./mcp-ledger",
"args": [],
"env": {
"LEDGER_DB_PATH": "./data/ledger.db"
},
"description": "账本服务 MCP 接口"
}
}
}学习路径和实践指南
官方学习资源
DeepLearning.AI 官方课程
课程信息:
- 标题:MCP: Build Rich-Context AI Apps with Anthropic
- 讲师:Elie Schoppik (Anthropic 技术教育负责人)
- 难度:中级
- 时长:1 小时 38 分钟
- 链接:https://www.deeplearning.ai/short-courses/mcp-build-rich-context-ai-apps-with-anthropic/
学习目标:
- 理解 MCP 架构和核心概念
- 标准化 AI 应用程序与外部数据源的连接
- 构建具有动态工具集成的 MCP 兼容应用程序
课程内容:
- MCP 作为 "LLM 访问工具、数据和提示的开放协议"
- 客户端-服务器架构的深入理解
- 与 GitHub、Google Docs 等外部系统的无缝集成
实践项目指南
项目 1:智能聊天机器人升级
目标:将现有聊天机器人转换为 MCP 兼容应用程序
技能要求:
- Python 编程知识
- 基础 LLM 提示和应用开发理解
实施步骤:
设置开发环境
bashpip install fastmcp python -m mcp.inspector创建本地 MCP 服务器
python# 使用 FastMCP 创建自定义研究工具 from fastmcp import FastMCP app = FastMCP("research-tools") @app.tool() def search_papers(query: str) -> str: """搜索学术论文""" # 实现搜索逻辑 return f"找到关于 {query} 的相关论文"配置 Claude Desktop 连接
json{ "research-server": { "command": "python", "args": ["research_server.py"] } }测试服务器连接
- 使用 MCP Inspector 验证连接
- 测试工具调用和响应
项目 2:文件系统集成
目标:构建文件系统访问的 MCP 服务器
功能特性:
- 文件读取和写入
- 目录遍历
- 文件搜索和过滤
实现要点:
@app.tool()
def read_file(file_path: str) -> str:
"""安全地读取文件内容"""
# 实现文件访问控制
# 返回文件内容
@app.tool()
def search_files(pattern: str, directory: str) -> list:
"""搜索匹配模式的文件"""
# 实现文件搜索逻辑
# 返回匹配文件列表项目 3:Web 内容提取器
目标:创建 Web 内容提取的 MCP 服务
核心功能:
- 网页内容抓取
- 结构化数据提取
- 内容清理和格式化
技术栈:
- FastMCP 框架
- BeautifulSoup 或 Playwright
- 内容解析算法
开发工具和调试
MCP Inspector
功能:
- 实时服务器连接测试
- 工具调用验证
- 调试和故障排除
使用方法:
# 启动 MCP Inspector
python -m mcp.inspector
# 连接到本地服务器
# 在浏览器中访问 http://localhost:8000开发最佳实践
渐进式开发:
- 从简单的单一工具开始
- 逐步添加复杂功能
- 持续测试和验证
错误处理:
python@app.tool() def safe_operation(input_data: str) -> str: try: # 执行操作 result = process_data(input_data) return result except Exception as e: return f"操作失败: {str(e)}"输入验证:
python@app.tool() def validate_input(data: str) -> str: if not data or len(data) > 1000: raise ValueError("输入数据无效") return process_validated_data(data)
学习路径建议
初学者路径 (2-4 周)
第 1 周:基础概念
- 完成 DeepLearning.AI 官方课程
- 理解 MCP 架构和协议
- 设置开发环境
第 2 周:实践项目
- 创建第一个 MCP 服务器
- 实现基本工具函数
- 测试与 Claude Desktop 的集成
第 3-4 周:高级功能
- 多工具集成
- 错误处理和安全性
- 性能优化
中级开发者路径 (1-2 周)
快速上手:
- 直接从实践项目开始
- 关注架构设计和最佳实践
- 集成现有系统和 API
扩展应用:
- 创建复杂的多服务器架构
- 实现自定义协议扩展
- 优化性能和可扩展性
高级开发者路径 (几天到 1 周)
协议深度理解:
- 研究 MCP 协议规范
- 自定义实现和扩展
- 贡献开源项目
企业级部署:
- 生产环境配置
- 监控和运维
- 安全性和合规性
社区资源和支持
官方资源:
- GitHub 仓库:https://github.com/modelcontextprotocol
- 文档网站:https://modelcontextprotocol.io
- 示例服务器:https://github.com/modelcontextprotocol/servers
社区资源:
- Awesome MCP Servers:https://github.com/wong2/awesome-mcp-servers
- 社区讨论和问题解答
- 第三方工具和扩展
学习建议:
- 从官方课程开始,建立扎实的理论基础
- 通过实践项目加深理解
- 参与社区讨论,学习最佳实践
- 贡献自己的服务器实现,回馈社区
最佳实践
项目集成策略
渐进式采用路径
阶段一:基础集成 (1-2 周)
- 选择 1-2 个核心 MCP 服务器
- 配置基本的数据访问功能
- 验证开发工作流改进
阶段二:功能扩展 (1-2 个月)
- 添加更多专业化 MCP 服务器
- 优化性能和错误处理
- 建立监控和日志系统
阶段三:生产部署 (2-3 个月)
- 实施安全和合规要求
- 建立备份和恢复机制
- 培训团队成员使用
环境变量管理
创建 .env.mcp 文件管理敏感配置:
# 数据库连接
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
MYSQL_HOST=localhost
MYSQL_USER=app_user
MYSQL_PASSWORD=secure_password
MYSQL_DATABASE=application_db
# 存储路径
MEMORY_BANK_ROOT=./memory-bank
SQLITE_DB_PATH=./data/application.db
# API 密钥
ZAPIER_API_KEY=your_zapier_api_key
GITHUB_TOKEN=your_github_token
MAGIC_API_KEY=your_magic_api_key
# 日志配置
MCP_LOG_LEVEL=info
MCP_LOG_FILE=./logs/mcp.log验证和测试
环境检查脚本:
#!/bin/bash
# scripts/check-mcp-env.sh
echo "🔍 MCP 环境检查..."
# 检查 Node.js
if ! command -v node >/dev/null 2>&1; then
echo "❌ Node.js 未安装 (需要 >= 14.x)"
exit 1
fi
NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 14 ]; then
echo "❌ Node.js 版本过低"
exit 1
fi
echo "✅ Node.js 版本: $(node --version)"
# 测试 SQLite MCP
echo "🧪 测试 SQLite MCP..."
timeout 10s npx -y @modelcontextprotocol/server-sqlite ./test.db >/dev/null 2>&1 &
MCP_PID=$!
sleep 2
if kill -0 $MCP_PID 2>/dev/null; then
echo "✅ SQLite MCP 正常"
kill $MCP_PID 2>/dev/null
else
echo "❌ SQLite MCP 启动失败"
fi
rm -f ./test.db
echo "✅ MCP 环境检查完成"安全最佳实践
最小权限原则:
- 使用只读数据库用户
- 限制 MCP 服务器访问范围
- 定期审计权限配置
数据保护:
- 敏感数据脱敏处理
- API 密钥环境变量管理
- 传输层 TLS 加密
错误处理:
- 优雅的错误信息返回
- 详细的日志记录
- 异常情况的自动恢复
常见问题解答
技术实施类
Q: MCP 与函数调用有什么具体区别?
A: 主要区别在于抽象层次和标准化程度:
| 对比维度 | MCP | 函数调用 |
|---|---|---|
| 抽象层次 | 协议层标准化 | 应用层直接调用 |
| 接口统一 | 统一的工具/资源接口 | 每个函数独立定义 |
| 错误处理 | 标准化错误响应格式 | 各自实现错误处理 |
| 发现机制 | 动态工具发现和描述 | 静态函数绑定 |
| 权限控制 | 协议层统一管理 | 函数级别分散控制 |
| 跨语言支持 | 协议无关,支持多语言 | 需要语言绑定 |
Q: Go 语言实现的 MCP 服务器性能如何?
A: Go 实现具有出色性能,平均响应时间在 10-50ms,支持高并发连接。相比 Node.js 实现,在资源消耗和响应速度方面都有显著优势。
Q: 如何处理 MCP 服务器的错误恢复?
A: 建议实施多层错误处理:
- 工具级别的错误捕获和返回
- 服务器级别的连接恢复
- 客户端的重试机制
- 监控告警和自动重启
安全和隐私类
Q: 如何防范 MCP 的安全风险?
A: 关键措施包括:
- 使用最小权限原则配置数据库访问
- 实施输入验证和参数化查询
- 定期审计 MCP 工具权限
- 监控异常访问模式
- 使用沙盒环境隔离 MCP 服务器
Q: MCP 是否会泄露敏感数据?
A: 合理配置的 MCP 服务器不会泄露敏感数据。建议:
- 使用只读数据库用户
- 实施数据脱敏
- 配置访问日志
- 定期安全审计
兼容性和集成类
Q: MCP 是否兼容现有的 API 架构?
A: MCP 设计为补充而非替代现有 API。可以通过 MCP 服务器封装现有 REST API、GraphQL 端点或 gRPC 服务,实现统一的 AI 访问接口。
Q: 不同编程语言的 MCP 实现是否兼容?
A: 是的,MCP 协议标准确保了跨语言兼容性。Go、TypeScript、Python 等实现之间可以无缝通信。
性能和扩展类
Q: MCP 服务器如何处理大规模并发?
A: 建议使用连接池、缓存层、负载均衡等技术。Go 实现特别适合高并发场景,单个服务器可支持数千并发连接。
Q: MCP 与微服务架构相比有何优劣?
A: MCP 优势:部署简单、资源消耗低、AI 原生设计
微服务优势:独立扩展、容错性强、完整监控体系
选择建议:小中型 AI 应用优先考虑 MCP,大型分布式系统适合微服务
参考文献与数据来源
官方文档和标准
- Anthropic MCP 官方文档: https://modelcontextprotocol.io/
- MCP 协议规范: https://spec.modelcontextprotocol.io/
- Claude Code 官方文档: https://docs.anthropic.com/en/docs/claude-code
- MCP 服务器集合: https://github.com/modelcontextprotocol/servers
官方教育资源
- DeepLearning.AI MCP 课程: https://www.deeplearning.ai/short-courses/mcp-build-rich-context-ai-apps-with-anthropic/
开源项目和实现
Go MCP 实现库:
- metoro-io/mcp-golang: https://github.com/metoro-io/mcp-golang
- mark3labs/mcp-go: https://github.com/mark3labs/mcp-go
- ThinkInAIXYZ/go-mcp: https://github.com/ThinkInAIXYZ/go-mcp
技术标准和协议
- Server-Sent Events (SSE): https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
- OAuth 2.0 规范: https://tools.ietf.org/html/rfc6749
- JWT 标准: https://tools.ietf.org/html/rfc7519
脚注
[^1]: Model Context Protocol (MCP) - 由 Anthropic 于 2024 年 11 月发布的开源标准,
详见 https://modelcontextprotocol.io/
免责声明: 本报告仅供技术参考,不构成投资或商业决策建议。MCP 技术仍在快速发展中,实际使用时请以官方文档为准。
版权说明: 本报告采用 CC BY-SA 4.0 许可证发布,允许在保留署名的前提下自由分享和修改。
最后更新: 2025 年 6 月 22 日