MCP

模型上下文协议(MCP)

通过标准化协议将 Claude Code 连接到外部工具和数据源。

什么是 MCP?

MCP(Model Context Protocol,模型上下文协议)是一个开放标准,让 Claude Code 能够与外部服务通信。MCP 服务器不再需要将数据复制粘贴到提示词中,而是让 Claude 直接访问工具和资源。

可以把 MCP 服务器理解为插件,它们赋予 Claude 超越读写文件的新能力。

配置

推荐用 claude mcp add — 它会根据你指定的作用域自动写入对应的配置文件:

bash
claude mcp add --transport stdio --scope project myserver -- npx @my/server --port 8080
claude mcp list
claude mcp remove myserver
作用域加载范围存储位置
local(默认)当前项目,仅你自己~/.claude.json
project当前项目,团队通过 git 共享项目根目录下的 .mcp.json
user你的所有项目,仅你自己~/.claude.json

一个项目级的 .mcp.json 长这样:

.mcp.json
{
"mcpServers": {
  "db": {
    "command": "npx",
    "args": ["-y", "@bytebase/dbhub", "--dsn", "${DATABASE_URL}"]
  }
}
}

claude mcp add 的所有标志(--transport--env--scope--header)必须放在服务器名称之前,用 -- 与命令分隔。注意:mcpServers 不是 .claude/settings.json 的合法 key —— 必须写在 .mcp.json(project)或 ~/.claude.json(local/user)里。

常用 MCP 服务器

数据库访问

bash
claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://readonly:[email protected]:5432/analytics"

现在 Claude 可以直接查询你的数据库:这周有多少用户注册?

扩展文件系统

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

GitHub

bash
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_GITHUB_PAT"

启用功能:列出待处理的 PR检查 PR #42 的 CI 状态为这个 bug 创建一个 issue

HTTP / 远程服务器

远程 MCP 服务器优先使用 HTTP transport:

json
{
  "mcpServers": {
    "my-api": {
      "type": "http",
      "url": "https://mcp.example.com/v1",
      "headers": { "Authorization": "Bearer ${MY_API_TOKEN}" }
    }
  }
}

commandargsenvurlheaders 中的 ${VAR}${VAR:-default} 会在启动时从 shell 环境中展开。

MCP 规范里这种 transport 叫 streamable-http;Claude Code 同时接受 "type": "http""type": "streamable-http" 两种写法。老的 SSE transport(--transport sse已废弃 —— 优先用 HTTP。

其他热门服务器

  • Slack — 搜索消息、发布更新
  • Google Drive — 读取文档和电子表格
  • Figma — 提取设计规范和资源
  • Linear / Jira — 读取和创建 issue
  • Sentry — 查询错误日志和异常

可在 Anthropic Directory 浏览已审核 connectors。

作用域优先级与审批

同名服务器在多个作用域同时存在时,按优先级取最高的那一份定义:

  1. Local~/.claude.json,默认)— 仅你自己、当前项目
  2. Project.mcp.json,提交到 git)— 与团队共享
  3. User~/.claude.json)— 你的所有项目

出于安全考虑,Claude Code 第一次使用项目级 .mcp.json 中的服务器前会弹出确认。要重置选择,运行 claude mcp reset-project-choices

.claude/settings.json 里用以下 key(任意作用域)批准、拒绝或自动接受项目服务器:

json
{
  "enabledMcpjsonServers": ["db"],
  "disabledMcpjsonServers": ["risky-server"],
  "enableAllProjectMcpServers": false
}

企业级部署还可以通过 managed-settings.json 里的 allowedMcpServers / deniedMcpServers 做组织级 allow/deny。

Hooks 中的 MCP 工具

MCP 工具在所有 hook 事件中都作为普通工具出现,名称格式为 mcp__<服务器>__<工具>

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "mcp__playwright__.*",
        "hooks": [{ "type": "command", "command": "echo '浏览器操作' >> audit.log" }]
      }
    ]
  }
}

处理大型工具结果

如果你构建的 MCP tool 需要返回大量数据(schemas、配置、批量记录),在该 tool 的 tools/list entry 中添加 _meta["anthropic/maxResultSizeChars"]。Claude Code 可以把这个 tool 的 inline threshold 提高到最高 500,000 字符:

json
{
  "name": "get_schema",
  "description": "Returns the full database schema",
  "_meta": {
    "anthropic/maxResultSizeChars": 200000
  }
}

如果你不能控制 server,可以在 shell 里提高 MAX_MCP_OUTPUT_TOKENS,或请 server 作者添加该 annotation。

构建你自己的 MCP 服务器

MCP 服务器是通过 stdio 或 HTTP 通信的简单程序。用对应语言的官方 MCP SDK 构建,定义工具(Claude 可以执行的操作)、资源(Claude 可以读取的数据)和 prompts(可复用模板),再用 claude mcp add 把构建后的命令配置到 Claude Code。

MCP 是 Agent 连接世界的方式

模型上下文协议定义了 AI Agent 与外部工具之间的通用接口。理解 MCP 有助于你了解 Agent 系统是如何构建的——从单工具 Agent 到复杂的多服务编排。

学习工具使用与 Agent 架构

延伸阅读

  • Skills — 可以引用 MCP 工具的模块化工作流
  • Subagents — 可以使用受限工具权限的隔离 workers
  • Hooks — 围绕 MCP 工具使用自动执行操作
  • 工作流 — 将 MCP 集成到开发工作流中

继续实践

模型上下文协议(MCP) 的核心概念已经读完

如果你想把理解变成可复用的能力,可以到 AgentWay 继续练习