第 11 章 MCP 协议与集成
本章目标
- 理解 MCP 协议的定位和架构
- 掌握 MCP Server 的配置方法
- 了解常用 MCP 工具及其应用
- 了解自定义 MCP Server 的编写要点
- 理解 MCP 使用的安全注意事项
11.1 MCP 概述
**MCP(Model Context Protocol,模型上下文协议)**是 Anthropic 提出的一种开放协议,用于标准化 AI 模型与外部工具、数据源之间的通信方式。
协议定位
flowchart LR
subgraph AI 侧
A[Claude Code
Host] end subgraph 协议层 B[MCP Protocol] end subgraph 工具/数据侧 C[Filesystem Server] D[Database Server] E[API Server] F[自定义 Server] end A <-->|标准协议| B B <--> C B <--> D B <--> E B <--> F
Host] end subgraph 协议层 B[MCP Protocol] end subgraph 工具/数据侧 C[Filesystem Server] D[Database Server] E[API Server] F[自定义 Server] end A <-->|标准协议| B B <--> C B <--> D B <--> E B <--> F
为什么需要 MCP
在 MCP 之前,每个 AI 工具接入外部系统都需要单独开发适配器。MCP 的价值:
| 问题 | MCP 的解决方案 |
|---|---|
| 每家 API 接入方式不同 | 统一的协议规范,一次编写到处使用 |
| 安全和权限各自实现 | 标准化的权限边界和沙箱模型 |
| 工具发现困难 | Client 自动发现 Server 提供的能力 |
| 跨平台不兼容 | 协议层抽象,不绑定平台或语言 |
11.2 MCP 架构
flowchart TD
subgraph Host
A[Claude Code]
end
subgraph Client
B[MCP Client
协议实现] end subgraph Transport C[stdio / HTTP] end subgraph Server D[Tools 工具定义] E[Resources 资源定义] F[Prompts 提示模板] end A --> B B <-->|Transport Layer| C C <--> D C <--> E C <--> F
协议实现] end subgraph Transport C[stdio / HTTP] end subgraph Server D[Tools 工具定义] E[Resources 资源定义] F[Prompts 提示模板] end A --> B B <-->|Transport Layer| C C <--> D C <--> E C <--> F
核心概念
| 概念 | 说明 |
|---|---|
| Host | AI 应用本身(如 Claude Code) |
| Client | MCP 协议的客户端实现,负责与 Server 通信 |
| Server | 提供工具/资源/提示的服务端 |
| Tools | Server 暴露的可调用功能(如"读取文件"、"执行 SQL") |
| Resources | Server 暴露的数据资源(如"数据库表结构") |
| Prompts | Server 提供的提示模板(如"帮我分析这个数据") |
| Transport | 通信方式:stdio(标准输入输出)或 HTTP |
11.3 配置 MCP Server
基本配置格式
在 settings.json 中通过 mcpServers 字段配置:
json
{
"mcpServers": {
"server-name": {
"command": "可执行命令",
"args": ["参数1", "参数2"],
"env": {
"ENV_VAR": "value"
}
}
}
}
配置示例
Filesystem Server --- 提供安全的文件系统访问:
json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-filesystem", "/path/to/allowed/dir"]
}
}
}
Database Server --- 提供数据库查询能力:
json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-postgres"],
"env": {
"DATABASE_URL": "postgresql://localhost:5432/mydb"
}
}
}
}
常用 MCP Server
| Server | 功能 | 典型场景 |
|---|---|---|
| filesystem | 安全的文件系统读写 | 访问项目外的受限目录 |
| database / postgres | 数据库查询与探索 | 让 Claude Code 直接查询和分析数据库 |
| brave-search | 网页搜索 | 搜索技术文档和解决方案 |
| memory | 持久化记忆存储 | 跨会话的知识保存 |
| github | GitHub API 交互 | 管理 Issues、PRs 等 |
| slack | Slack 消息 | 发送通知或查询消息 |
💡 MCP Server 是进程级的,启动 Claude Code 时自动拉起。如果配置有误(命令路径错误、依赖缺失),启动时会在日志中看到错误提示。
11.4 自定义 MCP Server
基本原理
编写一个 MCP Server 就是实现 MCP 协议的一个程序。它通过 stdio 或 HTTP 与 Claude Code 通信。
核心接口
一个最简 MCP Server 需要实现:
| 接口 | 说明 |
|---|---|
ListTools |
返回这个 Server 提供哪些工具及其参数定义 |
CallTool |
处理工具调用请求,执行实际逻辑并返回结果 |
简单示例结构(概念代码)
一个查询天气预报的 MCP Server 的核心结构:
json
// ListTools 返回的工具定义
{
"tools": [
{
"name": "get_weather",
"description": "获取指定城市的天气信息",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": ["city"]
}
}
]
}
Server 收到 CallTool 请求时:
- 解析 tool name 和参数
- 调用实际的天气 API
- 返回结构化结果
💡 MCP Server 可以用任何语言编写(Python、Node.js、Go 等),只要能通过 stdio 收发 JSON-RPC 消息即可。Anthropic 提供了各语言的 SDK 简化开发。
测试你的 MCP Server
配置好 Server 后,在 Claude Code 中测试:
请用 get_weather 工具查一下北京今天的天气。
如果配置正确,Claude Code 会自动发现该工具并调用它。
11.5 MCP 安全注意事项
权限边界
MCP Server 自身是一把双刃剑 ------ 它赋予了 Claude Code 访问外部系统的能力:
| 风险 | 缓解措施 |
|---|---|
| Server 可访问的文件范围过大 | filesystem Server 只授权必要的目录 |
| 数据库 Server 可能执行写操作 | 使用只读数据库用户连接 |
| 第三方 Server 的安全漏洞 | 审查 Server 源码,使用官方维护的 Server |
| HTTP Transport 暴露端口 | 使用 stdio Transport(默认),不用 HTTP |
安全最佳实践
- 最小权限:Filesystem Server 只给必要的目录,Database Server 使用只读账号
- 敏感数据隔离:MCP Server 的 env 中不直接写密钥,使用环境变量引用
- 来源可信:优先使用 Anthropic 官方维护的 MCP Server
- 审计日志:通过 Hook 记录 MCP 工具调用(详见第 8 章)
flowchart TD
A[Claude Code] -->|信任边界| B[MCP Server]
B -->|外部系统| C[数据库]
B -->|外部系统| D[文件系统]
B -->|外部系统| E[第三方 API]
style A fill:#4a9,stroke:#333
style B fill:#da4,stroke:#333
style C fill:#f88,stroke:#333
style D fill:#f88,stroke:#333
style E fill:#f88,stroke:#333
⚠️ MCP Server 扩展了 Claude Code 的能力边界。每增加一个 Server,就多一条通往外部系统的路径。只添加你真正需要的 Server,定期审查配置。
本章要点回顾
- MCP 是 Anthropic 提出的开放协议,标准化 AI 与外部工具/数据的通信
- 架构三层:Host (Claude Code)→ Client (协议实现)→ Server(工具/资源提供者)
- Server 通过
settings.json的mcpServers字段配置,支持 stdio 和 HTTP 传输 - 自定义 MCP Server 只需实现
ListTools和CallTool两个核心接口 - 安全底线:最小权限 、来源可信 、审计日志