Deploy Your OpenClaw Online Click to Deploy Now

什么是 MCP?

MCP(模型上下文协议)是一种将 AI 智能体连接到外部工具、数据源和服务的标准协议。MCP 不是硬编码集成,而是提供统一的接口,允许任何兼容的服务器暴露工具,供 Claw Code 智能体在运行时发现和调用。这使得智能体的能力可以在不修改核心代码库的情况下进行扩展。

6 种传输类型

Claw Code MCP 集成支持六种传输类型,定义在 config.rs 中的 McpTransport 枚举中。每种传输对应一个特定的 McpServerConfig 变体:

enum McpTransport { Stdio, Sse, Http, Ws, Sdk, ClaudeAiProxy, }

McpStdioServerConfig 是本地工具最常用的传输方式——它生成一个子进程并通过 stdin/stdout 传输 JSON 消息。远程传输(SseHttpWs)共享 McpRemoteServerConfig 结构,包括 URL、自定义请求头和可选的 OAuth 配置。

OAuth 配置

远程 MCP 服务器可能需要 OAuth 认证。McpOAuthConfig 结构体捕获必要的参数:

struct McpOAuthConfig { client_id: String, callback_port: u16, auth_server_metadata_url: Option<String>, xaa: Option<String>, }

客户端传输层将其封装在 McpClientAuth 中,值为 NoneOAuth(McpOAuthConfig)requires_user_auth() 方法检查 OAuth 配置是否需要基于浏览器的交互式授权流程。

工具命名约定

MCP 工具遵循严格的命名约定,以避免与内置工具以及不同 MCP 服务器之间的冲突:

对于 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 结构体进行引导:

struct McpClientBootstrap { server_name: String, normalized_name: String, tool_prefix: String, signature: String, transport: McpClientTransport, }

from_scoped_config 构造函数从设置条目构建引导,规范化名称、计算前缀和签名,并解析传输类型。McpClientTransport 枚举镜像了服务器端的 McpTransport,包含六个变体:StdioSseHttpWebSocketSdkClaudeAiProxy

CCR 代理处理

Claw Code MCP 集成包含对 CCR(Claude Code Runtime)代理 URL 的特殊处理。unwrap_ccr_proxy_url 函数从代理包装器中提取真实 URL,使用 CCR_PROXY_PATH_MARKERS 识别和剥离代理路径段。这允许系统即使在 URL 被中间代理层包装时也能连接到实际的 MCP 服务器端点。

配置发现

MCP 服务器配置从三个来源发现,按特异性递增的顺序合并:

  1. 用户配置——~/.claude/settings.json——在所有项目中可用的全局 MCP 服务器
  2. 项目配置——.claude/settings.json——提交到版本控制的项目特定服务器
  3. 本地配置——.claude/settings.local.json——不提交到版本控制的本地覆盖

三个来源使用深度合并策略合并。本地配置覆盖项目配置,项目配置覆盖用户配置。这允许团队在项目配置中定义共享的 MCP 服务器,同时各个开发者可以在本地配置中添加个人服务器或覆盖连接参数。

配置优先级

深度合并意味着如果同名服务器出现在多个配置来源中,最特定的那个优先。服务器签名确保重复条目(在多个级别配置的同一服务器)只连接一次。