犀牛鸟 2026 研究笔记 estelledc.github.io

精读:Claude Code MCP 深度集成

MCP 对于 Claude Code 不是”可选扩展”——它是核心扩展协议。Plugin = MCP Server,Skill 发现 = MCP 工具发现,跨 Agent 协作 = MCP 互操作。理解 Claude Code 的 MCP 实现就是理解它的生态策略。

MCP 在 Claude Code 中的定位

┌──────────────────────────────────────────────┐
│              Claude Code 能力层               │
│                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ 内置工具  │  │ MCP 工具  │  │ Hook 拦截 │  │
│  │(Read/Bash)│  │(Plugin)   │  │(审计/增强) │  │
│  └─────┬────┘  └─────┬────┘  └─────┬────┘  │
│        │              │              │       │
│        └──────────────┼──────────────┘       │
│                       │                      │
│              ┌────────▼────────┐             │
│              │   MCP 协议层     │             │
│              │  (统一工具接口)   │             │
│              └────────┬────────┘             │
│                       │                      │
│         ┌─────────────┼─────────────┐        │
│         ▼             ▼             ▼        │
│  ┌────────────┐┌────────────┐┌──────────┐   │
│  │ Local MCP  ││ Remote MCP ││ Agent MCP│   │
│  │ (stdio)    ││ (HTTP/SSE) ││ (互操作) │   │
│  └────────────┘└────────────┘└──────────┘   │
└──────────────────────────────────────────────┘

源码结构

基于泄露源码分析(services/mcp/ 目录,23 个文件):

文件/模块 职责
transport/ 7 种传输实现
client.ts MCP Client 核心(连接管理、工具发现)
server.ts MCP Server 暴露(claude mcp serve
auth/ OAuth 浏览器流 + Bearer Token
elicitation.ts 用户交互表单处理
tool-search.ts 延迟加载 + 按需搜索
config.ts 三层配置合并逻辑
reconnect.ts 自动重连 + 重试
push.ts Channel 推送消息

7 种传输实现

1. stdio(默认本地传输)

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"]
    }
  }
}

2. Streamable HTTP(推荐远程传输)

{
  "mcpServers": {
    "remote-api": {
      "url": "https://mcp.example.com/v1",
      "headers": { "Authorization": "Bearer ${API_KEY}" }
    }
  }
}

3. SSE(兼容旧版)

4. WebSocket(全双工)

5. 自动重连

6. Channel(Push Messages)

7. Auth Stub(Headless/SDK 模式)


三层配置系统

优先级

Local(最高) > Project(中) > User(最低)

Local 配置

位置:~/.claude.json(当前项目路径下解析)

适用:仅个人、不共享。用于个人 API key、本地开发工具。

Project 配置

位置:.mcp.json(仓库根目录)

{
  "mcpServers": {
    "team-db": {
      "command": "npx",
      "args": ["@company/mcp-db-server"],
      "env": {
        "DB_HOST": "${DB_HOST:-localhost}",
        "DB_PORT": "${DB_PORT:-5432}"
      }
    }
  }
}

适用:团队共享(git 提交),CI/CD 环境变量展开。

环境变量语法

User 配置

位置:~/.claude.json(全局区域)

适用:个人所有项目通用的 MCP 服务器(如日历、邮件、笔记)。


OAuth 认证流

完整浏览器流程

┌─────────────┐     ┌──────────────┐     ┌────────────────┐
│ Claude Code │     │ Local HTTP   │     │ OAuth Provider │
│ (Client)    │     │ Server       │     │ (GitHub/etc)   │
└──────┬──────┘     └──────┬───────┘     └───────┬────────┘
       │                   │                      │
       │ 1. 启动本地 Server │                      │
       │──────────────────▶│                      │
       │                   │                      │
       │ 2. 打开浏览器      │                      │
       │──────────────────────────────────────────▶│
       │                   │                      │
       │                   │    3. 用户授权         │
       │                   │◀─────────────────────│
       │                   │                      │
       │ 4. 回调 + code    │                      │
       │◀──────────────────│                      │
       │                   │                      │
       │ 5. 交换 token     │                      │
       │──────────────────────────────────────────▶│
       │                   │                      │
       │ 6. 存储 token     │  7. 注入后续请求      │
       │───────────────────┘──────────────────────┘

配置选项

选项 说明
--oauth-port 固定回调端口(避免防火墙问题)
预配置凭据 跳过浏览器流(CI/CD 场景)
metadata discovery 覆盖 自定义 well-known URL
scope 限制 只申请必要权限
动态 headers 自定义认证头(非 OAuth 场景)

Elicitation 机制

什么是 Elicitation

MCP 服务器在工具执行过程中,可能需要用户提供额外信息(如确认操作、选择参数、输入凭据)。Elicitation 提供了标准化的交互方式。

两种模式

内联表单

// MCP Server  Claude Code
{
  "method": "elicitation/request",
  "params": {
    "schema": {
      "type": "object",
      "properties": {
        "environment": {
          "type": "string",
          "enum": ["dev", "staging", "production"],
          "description": "选择部署目标环境"
        },
        "confirm": {
          "type": "boolean",
          "description": "确认执行部署?"
        }
      }
    }
  }
}

Claude Code 在终端中渲染表单,用户填写后返回结果。

URL mode(2025-11-25 规范新增):

{
  "method": "elicitation/request",
  "params": {
    "url": "https://auth.example.com/consent?scope=deploy",
    "description": "请在浏览器中完成授权"
  }
}

适用于需要浏览器完成的复杂交互(如 OAuth 同意页)。


Tool Search(延迟加载)

问题

当连接多个 MCP 服务器,每个暴露 20+ 工具时,总工具数可能超过 100。把所有工具描述塞进 system prompt 会:

解决方案

所有 MCP 工具 → 元数据索引(名称 + 简短描述)
                    │
                    ▼
LLM 描述需要的能力 → 匹配算法 → 选出 Top-K 工具
                                    │
                                    ▼
                              注入当前上下文

具体实现:

  1. 连接时获取所有工具的 name + description(不含完整参数 schema)
  2. 维护轻量级索引
  3. 当 LLM 表达”我需要搜索文件”时,匹配 grep/find/search_docs 等工具
  4. 按需加载完整 schema 到当前 turn 的 system prompt

与 Codex 对比

Codex 的方案:手动配置 enabled_tools / disabled_tools(人工过滤)。

Claude Code 的方案:AI 驱动的按需发现(自动过滤)。

权衡:Claude Code 更智能但可能遗漏;Codex 更确定但需要人工维护。


MCP Server 暴露

启动方式

claude mcp serve

暴露的能力

Claude Code 作为 MCP Server 时,暴露其完整的内置工具集:

使用场景

  1. 被 Codex 调用:Codex 通过 MCP 连接 Claude Code,获取深度推理能力
  2. 多 Agent 编排:作为 Agents SDK 网络中的一个节点
  3. IDE 深度集成:Neovim 通过 WebSocket MCP 连接
  4. 自动化流水线:CI/CD 中调用 Claude Code 做代码审查

Plugin Marketplace 与 MCP

Plugin = MCP Server

Claude Code 的 Plugin Marketplace 本质上是一个 MCP Server 注册中心:

开发者发布 MCP Server → Marketplace 审核 → 用户一键安装
                                              │
                                              ▼
                                      自动添加到 .mcp.json

安装流程

claude plugin install @company/mcp-jira
# 等同于在 .mcp.json 中添加对应配置

生态飞轮

更多 MCP Server → 更多 Plugin → 更多用户 → 更多开发者 → ...

安全模型

MCP 工具权限

层级 机制
发现 连接后自动发现(tools/list
首次使用 用户确认(”允许使用 XXX 工具?”)
后续使用 Auto Mode 自动批准(或 allowedTools 白名单)
拒绝 Hook PreToolUse 可拦截

allowedTools 配置

{
  "mcpServers": {
    "database": {
      "command": "...",
      "allowedTools": ["query", "explain"],
      "blockedTools": ["drop", "truncate"]
    }
  }
}

输出大小限制

默认限制 MCP 工具输出大小(防止大量数据淹没上下文):


实际应用模式

模式 1:团队标准化工具集

// .mcp.json(git 提交,团队共享)
{
  "mcpServers": {
    "jira": { "command": "mcp-jira", "env": {"TOKEN": "${JIRA_TOKEN}"} },
    "grafana": { "command": "mcp-grafana" },
    "sentry": { "command": "mcp-sentry" },
    "postgres": { "command": "mcp-postgres", "env": {"DSN": "${DB_DSN}"} }
  }
}

新成员 clone 仓库即可获得完整工具集。

模式 2:个人效率工具

// ~/.claude.json(全局,不共享)
{
  "mcpServers": {
    "calendar": { "command": "mcp-google-calendar" },
    "notes": { "command": "mcp-obsidian" },
    "todoist": { "command": "mcp-todoist" }
  }
}

模式 3:跨 Agent 协作

// .mcp.json
{
  "mcpServers": {
    "codex": {
      "command": "codex",
      "args": ["--mcp-server"],
      "env": {"CODEX_SANDBOX": "workspace-write"}
    }
  }
}

Claude Code 将子任务委派给 Codex 在沙箱中执行。


演进路线

时间 MCP 相关里程碑
2024-11 MCP 规范发布
2025-09 Claude Code 集成 MCP Client
2025-11 MCP 规范升级(Streamable HTTP)
2025-12 MCP 捐赠 Linux Foundation
2026-01 Plugin 系统上线(基于 MCP)
2026-03 Elicitation + Tool Search
2026-04 Plugin Marketplace
2026-05 claude mcp serve(Server 模式)
2025-11-25 最新规范:Async Tasks + Extensions

交叉引用