Model Context Protocol(MCP)是让 Claude Code 与外部工具和服务交互的标准协议。通过 MCP,Claude 可以直接访问数据库、调用 API、操作文件系统,乃至控制浏览器——将 AI 的能力与现实世界的工具无缝连接。
什么是 MCP?
MCP 是一个开放协议,标准化了 AI 模型与外部工具之间的通信方式。可以把它理解为 AI 工具的「USB 接口」——任何按照 MCP 规范实现的工具,都可以直接接入 Claude Code,无需定制集成。
MCP 的工作方式:
- MCP 服务器以工具定义的形式声明其能力
- Claude Code 在启动时发现并加载这些工具
- Claude 在需要时调用工具,获取结果并继续工作
快速添加第一个 MCP 服务器
方法一:通过 /mcp 命令
> /mcp
# 选择「添加新服务器」
# 输入服务器名称和启动命令方法二:直接编辑 .mcp.json
在项目根目录创建 .mcp.json:
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token-here"
}
},
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/your-username/projects"]
}
}
}方法三:HTTP 型 MCP 服务器
{
"mcpServers": {
"pipedream": {
"type": "http",
"url": "https://mcp.pipedream.net/v2"
}
}
}常用 MCP 服务器推荐
开发工具类
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
},
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://localhost/mydb"]
},
"sqlite": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "./database.db"]
}
}
}生产力工具类
{
"mcpServers": {
"google-drive": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-gdrive"]
},
"slack": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": { "SLACK_BOT_TOKEN": "xoxb-..." }
},
"linear": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@linear/mcp-server"],
"env": { "LINEAR_API_KEY": "lin_api_..." }
}
}
}MCP 服务器作用域
| 配置文件位置 | 作用域 | 适合场景 |
|---|---|---|
~/.claude/mcp.json | 所有项目 | 个人常用工具(GitHub、Slack) |
./.mcp.json | 当前项目 | 项目特定工具(PostgreSQL、Redis) |
~/.claude/settings.json | 所有项目 | 通过设置文件管理 |
在 Subagent 中限制 MCP 工具
通过 Subagent 的 mcpServers frontmatter,控制哪个 Subagent 能访问哪些 MCP 服务器:
---
name: db-analyst
description: 数据库分析专家,只能访问数据库
mcpServers:
- postgres
- sqlite
tools: Read, Bash
---
你是数据库分析专家。分析数据库结构和查询性能,提供优化建议。在 Hooks 中使用 MCP 工具名
MCP 工具在 Hooks 中遵循命名模式 mcp__<server>__<tool>:
{
"hooks": {
"PreToolUse": [
{
"matcher": "mcp__github__create_issue",
"hooks": [{
"type": "command",
"command": "./hooks/validate-issue.sh"
}]
},
{
"matcher": "mcp__.*__write.*",
"hooks": [{
"type": "command",
"command": "./hooks/log-writes.sh"
}]
}
]
}
}成本优化:减少 MCP 服务器开销
每个 MCP 服务器都会将工具定义加入上下文,即使处于空闲状态:
# 查看上下文占用情况
> /context
# 禁用未使用的服务器
> /mcp优先使用 CLI 工具:gh、aws、gcloud 比对应的 MCP 服务器更省上下文,因为它们不添加持久的工具定义。Claude 可以直接通过 Bash 工具运行 CLI 命令。
自动工具搜索:当 MCP 工具描述超过上下文的 10%,Claude Code 自动切换为按需加载模式。
# 降低触发阈值(工具超过 5% 时触发按需加载)
export ENABLE_TOOL_SEARCH=auto:5常见 MCP 使用场景
场景 1:自动化代码审查流程
> 用 GitHub MCP 获取 PR #142 的改动,
然后进行安全审查,
将发现作为 PR 评论发布
场景 2:数据库辅助开发
> 用 Postgres MCP 查看 users 表的结构,
然后生成一个 API 端点来处理用户注册,
包括适当的数据验证和错误处理
场景 3:��工具工作流
> 从 Linear MCP 获取本周的 Sprint 任务,
对每个任务检查对应的 GitHub 分支状态,
生成一份进度报告发到 Slack
调试 MCP 连接
# 检查 MCP 服务器状态
> /mcp
# 查看 MCP 工具列表
> /context # 查看哪些工具在上下文中
# 测试 MCP 工具
> 列出可用的 github MCP 工具
> 用 github MCP 列出我最近的 5 个 PR常见问题:
- 服务器启动失败:检查命令路径和环境变量
- 认证失败:确认 API Token 格式正确
- 工具不出现:重启 Claude Code 重新加载 MCP 配置
自定义 MCP 服务器开发
用 Node.js 快速创建自定义 MCP 服务器:
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server(
{ name: 'my-custom-server', version: '1.0.0' },
{ capabilities: { tools: {} } }
);
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: 'get_company_data',
description: '获取公司内部数据',
inputSchema: {
type: 'object',
properties: { department: { type: 'string' } },
required: ['department']
}
}]
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'get_company_data') {
const { department } = request.params.arguments;
// 实现你的业务逻辑
return { content: [{ type: 'text', text: `${department} 部门数据...` }] };
}
});
const transport = new StdioServerTransport();
await server.connect(transport);原文:MCP - Claude Code Docs | 来源:Claude Code 官方文档