本页面涵盖 Agent SDK 的 MCP 配置。要将 MCP 服务器添加到 Claude Code CLI 以便在每个项目中加载,请参阅 MCP 安装范围。
快速开始
此示例使用 HTTP 传输 连接到 Claude Code 文档 MCP 服务器,并使用allowedTools 与通配符来允许来自服务器的所有工具。
添加 MCP 服务器
您可以在调用query() 时在代码中配置 MCP 服务器,或在通过 settingSources 加载的 .mcp.json 文件中配置。
在代码中
在mcpServers 选项中直接传递 MCP 服务器:
从配置文件
在项目根目录创建一个.mcp.json 文件。当启用 project 设置源时,该文件会被选中,这对默认 query() 选项是默认的。如果您显式设置 settingSources,请包含 "project" 以便加载此文件:
允许 MCP 工具
MCP 工具需要明确的权限才能让 Claude 使用它们。没有权限,Claude 会看到工具可用,但无法调用它们。工具命名约定
MCP 工具遵循命名模式mcp__<server-name>__<tool-name>。例如,名为 "github" 的 GitHub 服务器与 list_issues 工具变成 mcp__github__list_issues。
使用 allowedTools 自动批准
使用allowedTools 自动批准特定的 MCP 工具,以便 Claude 可以在没有权限提示的情况下使用它们:
*) 让您允许来自服务器的所有工具,而无需逐个列出每一个。
发现可用工具
要查看 MCP 服务器提供的工具,请检查服务器的文档或连接到服务器并检查system init 消息:
传输类型
MCP 服务器使用不同的传输协议与您的代理通信。检查服务器的文档以查看它支持哪种传输:- 如果文档给您一个要运行的命令(如
npx @modelcontextprotocol/server-github),请使用 stdio - 如果文档给您一个 URL,请使用 HTTP 或 SSE
- 如果您在代码中构建自己的工具,请使用 SDK MCP 服务器
stdio 服务器
通过 stdin/stdout 通信的本地进程。对于在同一台机器上运行的 MCP 服务器,请使用此选项:- 在代码中
- .mcp.json
HTTP/SSE 服务器
对于云托管的 MCP 服务器和远程 API,请使用 HTTP 或 SSE:- 在代码中
- .mcp.json
"type": "http"。在 .mcp.json 和其他 JSON 配置文件中,"streamable-http" 被接受作为 "http" 的别名。编程式 mcpServers 选项仅接受 "http"。
SDK MCP 服务器
直接在应用程序代码中定义自定义工具,而不是运行单独的服务器进程。有关实现详情,请参阅 自定义工具指南。MCP 工具搜索
当您配置了许多 MCP 工具时,工具定义可能会消耗上下文窗口的很大一部分。工具搜索通过从上下文中隐藏工具定义并仅加载 Claude 每轮需要的工具来解决此问题。 工具搜索默认启用。有关配置选项和详情,请参阅 工具搜索。 有关更多详情,包括最佳实践和将工具搜索与自定义 SDK 工具一起使用,请参阅 工具搜索指南。身份验证
大多数 MCP 服务器需要身份验证才能访问外部服务。通过服务器配置中的环境变量传递凭据。通过环境变量传递凭据
使用env 字段将 API 密钥、令牌和其他凭据传递给 MCP 服务器:
- 在代码中
- .mcp.json
远程服务器的 HTTP 标头
对于 HTTP 和 SSE 服务器,直接在服务器配置中传递身份验证标头:- 在代码中
- .mcp.json
OAuth2 身份验证
MCP 规范支持 OAuth 2.1 用于授权。SDK 不会打开浏览器或运行交互式 OAuth 流程。当配置的服务器返回授权质询且没有可用的存储令牌时,代理运行将继续而不使用该服务器的工具,并且该服务器在 系统初始化消息 的mcp_servers 数组中报告状态为 needs-auth。如果您的代理依赖于特定服务器的连接,请在启动时检查该数组。
要提供凭据,请在您自己的应用程序中完成 OAuth 流程,并在服务器的 headers 中传递生成的访问令牌:
示例
从存储库列出问题
此示例连接到 GitHub MCP 服务器 以列出最近的问题。该示例包括调试日志以验证 MCP 连接和工具调用。 在运行之前,创建一个具有repo 范围的 GitHub 个人访问令牌 并将其设置为环境变量:
查询数据库
此示例使用 Postgres MCP 服务器 查询数据库。连接字符串作为参数传递给服务器。代理自动发现数据库架构、编写 SQL 查询并返回结果:错误处理
MCP 服务器可能因各种原因连接失败:服务器进程可能未安装、凭据可能无效,或远程服务器可能无法访问。 SDK 在每个查询开始时发出一个system 消息,子类型为 init。此消息包括每个 MCP 服务器的连接状态。检查 status 字段以在代理开始工作之前检测连接失败:
故障排除
服务器显示”失败”状态
检查init 消息以查看哪些服务器连接失败:
- 缺少环境变量:确保设置了所需的令牌和凭据。对于 stdio 服务器,检查
env字段是否与服务器期望的匹配。 - 服务器未安装:对于
npx命令,验证包存在且 Node.js 在您的 PATH 中。 - 无效的连接字符串:对于数据库服务器,验证连接字符串格式以及数据库是否可访问。
- 网络问题:对于远程 HTTP/SSE 服务器,检查 URL 是否可达以及任何防火墙是否允许连接。
工具未被调用
如果 Claude 看到工具但不使用它们,请检查您是否已使用allowedTools 授予权限:
连接超时
MCP 服务器连接默认超时为 30 秒。如果您的服务器需要更长时间才能启动,连接将失败。使用MCP_TIMEOUT 环境变量提高限制,单位为毫秒。对于需要更多启动时间的服务器,还应考虑:
- 使用更轻量级的服务器(如果可用)
- 在启动代理之前预热服务器
- 检查服务器日志以了解缓慢初始化的原因
工具输出超过最大允许令牌数
SDK 应用与 Claude Code 相同的 MCP 输出限制。当工具结果大于 25,000 令牌时,完整输出被保存到文件,工具结果被替换为错误消息,该消息命名文件路径,以便代理可以分部分读取输出。使用MAX_MCP_OUTPUT_TOKENS 环境变量提高限制。有关完整行为(包括服务器如何声明更高的每工具限制),请参阅 MCP 输出限制和警告。
相关资源
- 自定义工具指南:构建您自己的 MCP 服务器,与您的 SDK 应用程序在进程中运行
- 权限:使用
allowedTools和disallowedTools控制您的代理可以使用哪些 MCP 工具 - MCP 输出限制和警告:SDK 如何处理超过
MAX_MCP_OUTPUT_TOKENS的工具结果,包括持久化到磁盘的回退和anthropic/maxResultSizeChars按工具注解 - TypeScript SDK 参考:完整的 API 参考,包括 MCP 配置选项
- Python SDK 参考:完整的 API 参考,包括 MCP 配置选项
- MCP 服务器目录:浏览可用的 MCP 服务器,用于数据库、API 等