第六章:MCP 与工具链集成
什么是 MCP?
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 推出的一种开放协议,旨在标准化 AI 模型与外部工具、数据源之间的通信方式。你可以将 MCP 理解为 AI 世界的 "USB 接口"——它定义了一套统一的规范,让 Claude Code 能够无缝连接各种外部服务(文件系统、数据库、API 等),而不需要为每个工具单独定制集成方案。
在 Claude Code 中,MCP 是其工具链扩展的核心机制。通过 MCP 服务器,Claude Code 可以执行超出自身能力范围的操作,例如读写本地文件、操作 Git 仓库、与 GitHub API 交互、查询数据库等。
MCP 与普通工具调用的区别
Claude Code 本身已经内置了一些基础工具(如文件读写、命令执行等),但 MCP 将工具能力提升到了一个新的层次。两者的核心区别如下:
| 对比维度 | 普通工具调用 | MCP 服务调用 |
|---|---|---|
| 扩展方式 | 固定内置,无法自定义 | 可自由添加第三方或自定义服务 |
| 能力范围 | 限于 Claude Code 内置功能 | 无限扩展,可对接任意外部系统 |
| 配置复杂度 | 无需配置 | 需配置 settings.json |
| 上下文感知 | 基本无状态 | 可携带上下文,支持连续交互 |
| 复用性 | 无法跨项目共享 | 可封装为独立服务,多项目共享 |
| 安全性 | 受 Claude Code 沙箱控制 | 需自行管理凭证与权限 |
简单来说,普通工具调用是 Claude Code 自带的 "手脚",而 MCP 让你可以为它装上各种 "外挂设备"。
内置 MCP 服务器
Claude Code 附带了一系列官方 MCP 服务器,覆盖了日常开发中最常用的场景:
文件系统(Filesystem) 提供安全的文件操作能力,包括读写文件、创建目录、文件搜索等。与直接使用 Bash 命令不同,文件系统 MCP 服务器会遵循 Claude Code 的安全策略,在执行危险操作前进行确认。
Git 封装了常用的 Git 操作,如 status、diff、log、commit、branch 管理等。通过 Git MCP 服务器,Claude Code 可以理解仓库状态并执行版本控制操作。
GitHub 对接 GitHub API,支持创建 PR、审查代码、管理 Issue、查看 Workflow 运行状态等。这对于需要与 GitHub 协作的工作流极为有用。
Shell(命令执行) 提供安全的命令执行环境,支持设置允许/禁止的命令列表,以及对危险命令进行拦截确认。
配置 MCP 服务器
你可以在项目的 .claude/settings.json 中注册 MCP 服务器配置。以下是一个典型的配置示例:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@anthropic-ai/mcp-server-filesystem",
"/path/to/allowed/directory"
]
},
"github": {
"command": "npx",
"args": [
"-y",
"@anthropic-ai/mcp-server-github",
"--token",
"your_github_token"
]
},
"git": {
"command": "npx",
"args": [
"-y",
"@anthropic-ai/mcp-server-git"
]
}
}
}
配置完成后,重新启动 Claude Code,它就会自动加载并初始化这些 MCP 服务器。你可以通过 /tools 命令查看当前可用的所有工具,MCP 服务器提供的工具会以额外条目列出。
自定义 MCP 服务器开发入门
当内置 MCP 服务器无法满足需求时,你可以开发自己的 MCP 服务器。一个 MCP 服务器本质上是一个符合 MCP 协议的可执行程序,它通过标准输入输出(stdio)与 Claude Code 通信。
下面是一个最简单的 MCP 服务器示例,它提供一个天气查询工具:
import { Server } from "@anthropic-ai/mcp-sdk";
const server = new Server({
name: "weather-server",
version: "1.0.0",
});
server.tool(
"get_weather",
{
city: { type: "string", description: "城市名称" },
},
async ({ city }) => {
// 模拟天气查询
const weathers: Record<string, string> = {
"北京": "晴,25°C",
"上海": "多云,28°C",
"深圳": "小雨,26°C",
};
return {
content: [
{
type: "text",
text: `${city} 的天气:${weathers[city] || "未知"}`,
},
],
};
}
);
server.listen();
开发完成后,编译成可执行文件并在 settings.json 中注册:
{
"mcpServers": {
"weather": {
"command": "node",
"args": ["/path/to/weather-server.js"]
}
}
}
实战:连接数据库 MCP 服务器
假设我们需要让 Claude Code 能够查询和分析 PostgreSQL 数据库。我们可以使用社区开发的 PostgreSQL MCP 服务器。
首先在项目中安装依赖:
npm install @anthropic-ai/mcp-server-postgres
然后在 settings.json 中配置连接信息:
{
"mcpServers": {
"postgres": {
"command": "node",
"args": [
"node_modules/@anthropic-ai/mcp-server-postgres/dist/index.js",
"--connection-string",
"postgresql://user:password@localhost:5432/mydb"
]
}
}
}
配置完成后,你可以在 Claude Code 中直接这样使用:
"查询 users 表中最近注册的 10 个用户,分析他们的注册趋势" "对比上个月和这个月的订单量,用表格展示" "找出数据库中所有缺少索引的表,并生成创建索引的 SQL"
Claude Code 会通过 MCP 服务器连接到数据库,执行 SQL 查询,并将结果返回给你。整个过程就像在对话一样自然,无需手写任何 SQL 语句。
通过 MCP 协议,Claude Code 的工具链扩展能力几乎是无限的。你可以连接数据库、调用外部 API、操作云服务,甚至控制物联网设备——只要有一个符合 MCP 协议的服务器程序。