MCP 集成
本教程共 34 篇 · 第 19 篇 · 更新于 2026-07-26 · 约 9 分钟阅读
19. MCP 集成
本节目标:搞懂 MCP(Model Context Protocol)是什么、为什么 Claude Code 需要它。学会用
claude mcp add添加 HTTP、SSE、stdio 三种服务器,搞清三种配置范围(本地/项目/用户)怎么选,了解工具搜索怎么省上下文。学完你能把 Claude Code 连上数据库、工单系统、监控平台等外部工具,从”只能看本地代码”变成”全链路协作”。
MCP 到底解决什么问题
没有 MCP 之前,Claude Code 的能力被锁在你当前打开的项目文件夹里。它看不到你的 Jira 工单、查不了你的数据库、不知道 Sentry 上报了啥错误。你要让它干这些事,只能手动复制粘贴数据进对话框。
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 推出的开放标准,专门解决这个痛点。它的核心思路是:别让 AI 去学所有工具的用法,而是让所有工具都提供一个统一接口给 AI。
打个比方:MCP 像现实中的通用插座。不用让每个电器适配不同插座,只要插座统一标准,所有电器都能直接用。Claude Code 装上 MCP 服务器后,就能直接读 Jira 工单、查 PostgreSQL 数据库、看 Sentry 错误、操作 Figma 设计。
连接 MCP 服务器后,你能让 Claude Code 干这些事:
- 从 Jira 工单实现功能,再在 GitHub 上创建 PR
- 分析 Sentry 和监控数据,定位生产错误
- 查 PostgreSQL 数据库,找符合条件的用户
- 基于 Figma 设计更新代码模板
- 创建 Gmail 草稿,邀请用户参加反馈会
三种传输方式
MCP 服务器按运行位置分三种传输方式。选哪种看服务器是托管的还是本地的。
HTTP 服务器(推荐)
远程 HTTP 服务器是连接托管服务的推荐方式,云服务最广泛支持。
# 基本语法
claude mcp add --transport http <名字> <url>
# 示例:连接 Notion
claude mcp add --transport http notion https://mcp.notion.com/mcp
# 带 Bearer 令牌认证
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
JSON 配置里 type 字段写 http(或 streamable-http,是别名,跟 MCP 规范一致,从服务器文档复制配置不用改)。
WarningJSON 配置里没
type但有url是配置错误—Claude Code 会把没type的条目当 stdio 服务器读。会跳过并报错让你加"type": "http"。
SSE 服务器(已弃用)
SSE(Server-Sent Events)传输已弃用,能用 HTTP 就用 HTTP。
# 基本语法
claude mcp add --transport sse <名字> <url>
# 示例:连接 Asana
claude mcp add --transport sse asana https://mcp.asana.com/sse
# 带认证头
claude mcp add --transport sse private-api https://api.company.com/sse \
--header "X-API-Key: your-key-here"
stdio 服务器(本地)
stdio 服务器在你机器上作为本地进程运行,适合需要直接系统访问或自定义脚本的工具。
# 基本语法
claude mcp add [选项] <名字> -- <命令> [参数...]
# 示例:添加 Airtable 服务器
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-server
Note必须用
--分隔服务器参数。--把 Claude 自己的选项(--transport、--env、--scope)跟运行服务器的命令和参数分开。--之后的所有内容原封不动传给服务器。
claude mcp add --transport stdio myserver -- npx server跑npx server- 没
--,Claude Code 会把服务器的标志(如--port)当自己的选项解析,报错。
Claude Code 在生成的服务器环境里设了 CLAUDE_PROJECT_DIR 指向项目根目录,你的服务器能用它解析项目相对路径。注意这变量在服务器环境里设,不是 Claude Code 自己的环境,所以 .mcp.json 里 ${VAR} 扩展引用它得带默认值:${CLAUDE_PROJECT_DIR:-.}。
WebSocket 服务器
WebSocket 保持持久双向连接,适合主动推送事件的远程服务器。只响应请求的服务器用 HTTP 更好—HTTP 支持 OAuth 和 claude mcp add --transport 标志,WebSocket 都不支持。
只能用 JSON 配置:
claude mcp add-json events-server \
'{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'
四步上手:添加、验证、使用、清理
以 Claude Code 文档 MCP 服务器为例(不用认证,适合测试):
1. 添加服务器
在终端(不是 claude 会话内)跑:
claude mcp add --transport http claude-code-docs https://code.claude.com/docs/mcp
命令拆开看:claude mcp add 注册服务器,--transport http 是托管 URL,claude-code-docs 是你起的名字,URL 是服务器地址。
2. 检查连接状态
claude mcp list
状态指示器含义:
| 状态 | 含义 |
|---|---|
✓ Connected | 就绪 |
! Connected · tools fetch failed | 连上了但列不出工具,跑 claude mcp get <name> 看详情 |
! Needs authentication | 要浏览器登录或传 --header 令牌 |
✗ Failed to connect | 服务器没响应 |
⏸ Pending approval | 项目范围服务器还没批准 |
3. 在会话里用
claude
Use the claude-code-docs server to look up what MCP_TIMEOUT does
Claude 第一次调服务器时会问你要权限。批准后,工具调用标着服务器名字,你能确认答案来自 MCP 服务器而不是 Claude 的内置知识。
Tip平时不用在提示里点名服务器,Claude 会自动选相关工具。点名是演示时为了确保走新服务器。
4. 删除服务器(可选)
claude mcp remove claude-code-docs
每个连上的服务器在上下文窗口里占点空间(工具名和说明加载进每个会话)。不用的删掉,保持上下文清爽。
管理服务器
# 列出所有配置的服务器
claude mcp list
# 看某个服务器详情
claude mcp get github
# 删服务器
claude mcp remove github
# 在会话里检查状态
/mcp
/mcp 面板在每个连上的服务器旁边显示工具计数,还会标记声称有工具功能但没公开任何工具的服务器。
自动重连
HTTP 或 SSE 服务器会话中途断了,Claude Code 自动用指数退避重连:最多五次尝试,从 1 秒延迟开始每次加倍。重连时服务器在 /mcp 里显示待处理。五次失败后标记为失败,你能从 /mcp 手动重试。stdio 服务器是本地进程,不自动重连。
启动时初始连接失败也用同样退避。瞬时错误(5xx、连接被拒、超时)最多重试三次;认证和未找到错误不重试—得改配置才能解决。
动态工具更新
Claude Code 支持 MCP list_changed 通知,服务器能动态更新可用工具、提示和资源,不用断开重连。
三种配置范围
添加服务器时用 --scope(或 -s)指定范围,控制服务器在哪加载、配不配共享:
| 范围 | 加载位置 | 跟团队共享吗 | 存哪 |
|---|---|---|---|
local(默认) | 仅当前项目 | 不 | ~/.claude.json 该项目条目下 |
project | 仅当前项目 | 是,通过版本控制 | 项目根目录的 .mcp.json |
user | 你的所有项目 | 不 | ~/.claude.json 顶级 mcpServers 键下 |
local:个人私有,仅此项目
默认范围。服务器只在你添加它的项目里加载,对你私密。个人开发服务器、实验配置、含不想进版本控制的凭证的服务器用这个。
# 默认就是 local
claude mcp add --transport http stripe https://mcp.stripe.com
# 显式指定
claude mcp add --transport http stripe --scope local https://mcp.stripe.com
NoteMCP 的”本地范围”跟一般本地设置不一样。MCP 本地范围存
~/.claude.json(主目录),一般本地设置用.claude/settings.local.json(项目目录)。
project:团队共享
通过项目根目录的 .mcp.json 文件共享,设计成检入版本控制,团队成员都能用同样的工具。
claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp
生成的 .mcp.json:
{
"mcpServers": {
"paypal": {
"type": "http",
"url": "https://mcp.paypal.com/mcp"
}
}
}
出于安全,Claude Code 用 .mcp.json 里的项目范围服务器前会提示批准。要重置批准选择,跑 claude mcp reset-project-choices。
Warningv2.1.196 起,克隆的仓库不能批准自己的服务器。提交到
.claude/settings.json的enableAllProjectMcpServers或enabledMcpjsonServers在不受信任的文件夹里被忽略,服务器保持⏸ Pending approval状态。得先信任工作区(跑claude接受信任对话框),才能批准。
user:个人私有,所有项目
claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
存在 ~/.claude.json 顶级 mcpServers 键下,你机器上所有项目都能用。
范围优先级
同名服务器在多个范围定义时,Claude Code 连一次,用最高优先级的定义(整个条目来自那个源,字段不跨范围合并):
- 本地范围
- 项目范围
- 用户范围
- 插件提供的服务器
- claude.ai 连接器
.mcp.json 支持环境变量扩展
团队共享配置但敏感值(API 密钥、路径)因机器而异时,用环境变量扩展:
${VAR}— 展开为环境变量VAR的值${VAR:-default}— 设了VAR就用VAR,否则用default
能扩展的位置:command、args、env、url、headers。
{
"mcpServers": {
"api-server": {
"type": "http",
"url": "${API_BASE_URL:-https://api.example.com}/mcp",
"headers": {
"Authorization": "Bearer ${API_KEY}"
}
}
}
}
没设环境变量又没默认值,Claude Code 保留字面 ${VAR} 文本并报缺失变量警告。配置照样加载,你设好变量或加 :-default 回退,服务器就能用想要的值启动。
工具搜索:让上下文不被 MCP 吃光
每连一个 MCP 服务器,它的工具名和说明就加载进上下文窗口。连多了,光工具定义就占掉大半上下文。
工具搜索(Tool Search)解决这个:延迟工具定义,等 Claude 需要时再加载。会话启动时只加载工具名和服务器说明,加更多 MCP 服务器对上下文窗口影响最小。Claude Code 不对每个服务器设固定工具上限,实际限制是你的上下文窗口预算。
工具搜索默认开启。想基于阈值加载,设 ENABLE_TOOL_SEARCH=auto,工具在上下文窗口 10% 以内时预加载架构,只延迟溢出部分。
用 ENABLE_TOOL_SEARCH 环境变量控制:
| 值 | 行为 |
|---|---|
true(默认) | 工具延迟,按需发现 |
auto | 阈值加载,能塞进 10% 上下文就预加载 |
false | 禁用,所有工具定义启动时全加载 |
Note工具搜索需要支持
tool_reference块的模型:Sonnet 4.5、Haiku 4.5、Opus 4.5 及更高。Google Cloud 的 Agent Platform 上默认禁用,ANTHROPIC_BASE_URL指向非第一方主机时也禁用(多数代理不转发tool_reference块)。显式设ENABLE_TOOL_SEARCH覆盖回退。
也能单独禁用 ToolSearch 工具:
{
"permissions": {
"deny": ["ToolSearch"]
}
}
需要登录的服务器
很多托管 MCP 服务器要 OAuth 2.0 登录才能用。添加后,在会话里跑 /mcp,选要认证的服务器,浏览器会打开登录页。登录完,服务器就能用了。
# 添加需要登录的服务器
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
# 在会话里认证
/mcp
认证完就能直接问:
过去 24 小时内最常见的错误是什么?
显示我错误 ID abc123 的堆栈跟踪
Note如果你配了
headers.Authorization但服务器拒绝那个头,Claude Code 会报连接失败而不是回退到 OAuth。检查令牌对 MCP 端点是否有效,或删掉头用 OAuth 流程。
频道:让服务器主动推送
MCP 服务器还能直接把消息推进你的会话,让 Claude 对外部事件做反应—CI 结果、监控警报、聊天消息。服务器声明 claude/channel 功能,启动时用 --channels 标志选择加入。
这让 Claude Code 从”你问它答”变成”事件驱动”—Telegram 来消息、Discord 有聊天、webhook 触发,Claude 都能自动响应。
常用 MCP 服务器
| 服务器 | 干啥 | 添加命令 |
|---|---|---|
| Claude Code 文档 | 全文搜索官方文档 | claude mcp add --transport http claude-code-docs https://code.claude.com/docs/mcp |
| Notion | 读写 Notion 页面 | claude mcp add --transport http notion https://mcp.notion.com/mcp |
| Sentry | 查错误和堆栈 | claude mcp add --transport http sentry https://mcp.sentry.dev/mcp |
| Playwright | 浏览器自动化 | claude mcp add playwright -- npx -y @playwright/mcp@latest |
| Airtable | 操作 Airtable 表 | claude mcp add --env AIRTABLE_API_KEY=KEY --transport stdio airtable -- npx -y airtable-mcp-server |
在 Anthropic Directory 浏览已审核的连接器。Directory 连接器用跟 Claude Code 一样的 MCP 基础设施,列出的远程服务器都能用 claude mcp add 添加。
Warning连接每个服务器前,验证你信任它。获取外部内容的服务器可能让你面临提示注入风险—服务器返回的内容里可能藏着恶意指令。
超时和输出限制
几个环境变量控制 MCP 行为:
| 变量 | 作用 | 示例 |
|---|---|---|
MCP_TIMEOUT | 服务器启动超时 | MCP_TIMEOUT=10000 claude 设 10 秒 |
MCP_TOOL_TIMEOUT | 工具执行超时(约 28 小时默认) | 每服务器可用 .mcp.json 里 timeout 字段覆盖(毫秒) |
MAX_MCP_OUTPUT_TOKENS | 工具输出上限(默认 25000) | MAX_MCP_OUTPUT_TOKENS=50000 提高 |
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT | 空闲超时(HTTP/SSE/WS 默认 5 分钟,stdio 默认 30 分钟) | 设 0 禁用检查 |
工具输出超 10000 token 时显示警告,默认限制 25000 token。
每个服务器的 timeout(至少 1000 毫秒)是每个工具调用的硬时钟限制,服务器发的进度通知不会延长它。HTTP/SSE/连接器服务器还有个每请求计时器(从请求到第一个响应字节),默认 60 秒。
插件提供的 MCP 服务器
插件能捆绑 MCP 服务器,启用插件时自动提供工具。跟手动配的服务器工作方式一样,但通过插件安装管理,不是 /mcp 命令。
插件 MCP 工具的名字格式是 mcp__plugin_<插件名>_<服务器名>__<工具名>。在权限规则、技能的 allowed-tools、子代理的 tools 字段、钩子匹配器里引用时,用这个完整名字。
好处是捆绑分发、自动设置、团队一致—装插件就拿到一样的工具。
安全要点
- 信任验证:首次代码库运行和新 MCP 服务器要信任验证。用
-p非交互模式时信任验证禁用。 - 权限规则:能给 MCP 工具配权限。
mcp__<服务器>__<工具>格式,或用mcp__*匹配所有 MCP 工具。 - 沙箱:MCP 工具的网络访问受沙箱网络隔离控制(如果开了沙箱)。
- 提示注入:服务器返回的内容可能含恶意指令。WebFetch 用单独上下文窗口隔离,但 MCP 工具直接进主上下文。敏感操作靠权限规则兜底。
MCP 让 Claude Code 从”只能看本地代码”变成”全链路协作伙伴”。连上你常用的工具,Claude 就能直接读工单、查数据库、看监控、操作设计,不用你再来回复制粘贴。配好范围和权限,团队也能共享同一套工具配置。