什么是 MCP?
MCP(模型上下文协议)是一种将 AI 智能体连接到外部工具、数据源和服务的标准协议。MCP 不是硬编码集成,而是提供统一的接口,允许任何兼容的服务器暴露工具,供 Claw Code 智能体在运行时发现和调用。这使得智能体的能力可以在不修改核心代码库的情况下进行扩展。
6 种传输类型
Claw Code MCP 集成支持六种传输类型,定义在 config.rs 中的 McpTransport 枚举中。每种传输对应一个特定的 McpServerConfig 变体:
- Stdio——启动本地进程并通过 stdin/stdout 通信。通过
McpStdioServerConfig配置:command(可执行文件)、args(命令行参数)和env(环境变量)。 - SSE(Server-Sent Events)——使用服务器发送事件连接到远程 HTTP 端点进行流式传输。通过
McpRemoteServerConfig配置:url、headers、headers_helper和可选的oauth。 - HTTP——标准 HTTP 请求/响应通信。使用与 SSE 相同的
McpRemoteServerConfig。 - WebSocket (Ws)——通过 WebSocket 进行双向通信。使用
McpRemoteServerConfig。 - SDK——直接使用 MCP SDK 进行进程内集成,无需网络传输。
- ClaudeAiProxy——用于 claude.ai 托管的 MCP 服务器的代理传输。
McpStdioServerConfig 是本地工具最常用的传输方式——它生成一个子进程并通过 stdin/stdout 传输 JSON 消息。远程传输(Sse、Http、Ws)共享 McpRemoteServerConfig 结构,包括 URL、自定义请求头和可选的 OAuth 配置。
OAuth 配置
远程 MCP 服务器可能需要 OAuth 认证。McpOAuthConfig 结构体捕获必要的参数:
客户端传输层将其封装在 McpClientAuth 中,值为 None 或 OAuth(McpOAuthConfig)。requires_user_auth() 方法检查 OAuth 配置是否需要基于浏览器的交互式授权流程。
工具命名约定
MCP 工具遵循严格的命名约定,以避免与内置工具以及不同 MCP 服务器之间的冲突:
- normalize_name_for_mcp——将所有非字母数字字符替换为下划线,并折叠连续的下划线。这会产生干净的、标识符安全的名称。
- mcp_tool_prefix——返回
mcp__{normalized}__,其中normalized是规范化后的服务器名称。双下划线创建了清晰的命名空间边界。 - mcp_tool_name——通过组合前缀和工具自身名称返回完全限定的工具名称。
对于 claude.ai 托管的服务器,前缀常量 CLAUDEAI_SERVER_PREFIX 设置为 "claude.ai "(注意尾随空格)。这将 claude.ai MCP 服务器与用户配置的服务器在工具列表和日志中区分开来。
命名示例
名为"my-database"的服务器和名为"query"的工具将产生规范化名称 my_database,前缀 mcp__my_database__,以及完全限定的工具名称 mcp__my_database__query。
服务器签名和哈希
每个 MCP 服务器通过 mcp_server_signature 分配一个确定性签名。此签名用于去重——如果同一服务器在多个设置文件中配置,签名确保它只连接一次。
配置哈希使用 scoped_mcp_config_hash 函数,该函数实现了 FNV-1a(Fowler-Noll-Vo)哈希,使用标准的 64 位偏移基础 0xcbf29ce484222325。选择 FNV-1a 是因为它的简单性、速度和良好的分布特性——它在不需要加密哈希函数的情况下产生一致的哈希值。
McpClientBootstrap
当 Claw Code 运行环境启动时,每个已配置的 MCP 服务器通过 McpClientBootstrap 结构体进行引导:
from_scoped_config 构造函数从设置条目构建引导,规范化名称、计算前缀和签名,并解析传输类型。McpClientTransport 枚举镜像了服务器端的 McpTransport,包含六个变体:Stdio、Sse、Http、WebSocket、Sdk 和 ClaudeAiProxy。
CCR 代理处理
Claw Code MCP 集成包含对 CCR(Claude Code Runtime)代理 URL 的特殊处理。unwrap_ccr_proxy_url 函数从代理包装器中提取真实 URL,使用 CCR_PROXY_PATH_MARKERS 识别和剥离代理路径段。这允许系统即使在 URL 被中间代理层包装时也能连接到实际的 MCP 服务器端点。
配置发现
MCP 服务器配置从三个来源发现,按特异性递增的顺序合并:
- 用户配置——
~/.claude/settings.json——在所有项目中可用的全局 MCP 服务器 - 项目配置——
.claude/settings.json——提交到版本控制的项目特定服务器 - 本地配置——
.claude/settings.local.json——不提交到版本控制的本地覆盖
三个来源使用深度合并策略合并。本地配置覆盖项目配置,项目配置覆盖用户配置。这允许团队在项目配置中定义共享的 MCP 服务器,同时各个开发者可以在本地配置中添加个人服务器或覆盖连接参数。
配置优先级
深度合并意味着如果同名服务器出现在多个配置来源中,最特定的那个优先。服务器签名确保重复条目(在多个级别配置的同一服务器)只连接一次。