MCP(Model Context Protocol)
如果你刚开始接触 Claude Code,MCP 基本是绕不过去的一环。它解决的不是"怎么写提示词",而是"怎么把外部数据和工具,安全地接进 AI 工作流里"。
这篇文章主要讲三件事:MCP 是什么、怎么配置,以及它和 Skill 到底该怎么选。
官方简介:模型上下文协议(MCP)是一种开放标准,它使开发人员能够在数据源和 AI 工具之间构建安全的双向连接。其架构非常简单:开发人员既可以通过 MCP 服务器公开数据,也可以构建连接到这些服务器的 AI 应用程序(MCP 客户端)。
MCP 到底是什么
MCP 本质上是一个典型的客户端-服务端应用框架。放到 Claude Code 这个场景里看,Claude Code 相当于 MCP 的客户端,MCP Server 作为服务端提供数据来源,两边通过 JSON-RPC 2.0 协议通信。
| 组件 | 角色 | 说明 |
|---|---|---|
| MCP Client | 请求方 | 内置于 Claude Code,负责发现和调用工具 |
| MCP Server | 提供方 | 暴露工具和资源的服务程序 |
| 传输层 | 通信管道 | stdio、SSE、HTTP 三种方式 |
其中 SSE 的方式在最新版本的 Claude 中已经弃用。
传输层怎么通信
下面的示例是用户级配置。用命令行添加全局 MCP 后,在 mac 系统里,配置会落到用户目录下的 .claude.json 文件中。
本地 stdio 服务器
本地进程服务适合系统访问和自定义脚本工具。比如,你可以把一个本地接口查询服务封装成 MCP Server。
先看添加命令:
bash
# 基本语法
claude mcp add [options] <name> -- <command> [args...]
# 真实示例:添加 openapi 接口查询服务
claude mcp add openapi-local -- node /Users/macos/mcp-server/openapi-local/index.js
生成的 JSON 内容大概是这样:
json
"openapi-local": {
"type": "stdio",
"command": "node",
"args": [
"/Users/macos/mcp-server/openapi-local/index.js"
]
}
HTTP 服务器
如果你要接的是一个已经启动好的服务,比如 Figma UI 查询服务,可以直接走 HTTP。
添加命令如下:
bash
# 基本语法
claude mcp add --transport http <name> <url>
# 真实示例:添加 figma UI 查询服务
claude mcp add --transport http figma http://127.0.0.1:3845/mcp
生成的 JSON 内容如下:
json
"figma": {
"type": "streamable-http",
"url": "http://127.0.0.1:3845/mcp"
}
streamable-http 是基于 HTTP POST/SSE 混合模式的现代化通信协议,主要用于 MCP 传输层。它解决了连接不可恢复、长连接负担重、传输不灵活等问题。
MCP 怎么管理
位置决定作用范围
这一点很关键。MCP 配在哪里,决定了它影响哪些项目、要不要进版本库。
| 位置 | 文件路径 | 作用范围 | CLI scope | 是否提交 git |
|---|---|---|---|---|
| 用户全局 | ~/.claude.json | 所有项目 | local(默认) | 否 |
| 用户设置 | ~/.claude/settings.json | 所有项目 | user | 否 |
| 项目共享 | /.claude/settings.json | 当前项目,团队共享 | project | 是 |
| 项目本地 | /.claude/settings.local.json | 当前项目,仅自己 | - | 否(gitignore) |
生效遵循就近原则:项目本地 > 项目共享 > 用户设置 > 用户全局。
常用命令
日常管理 MCP,基本就是下面这几条命令。
bash
# 添加服务
claude mcp add [options] <name> -- <command> [args...]
# 或者
claude mcp add --transport http <name> <url>
# 列出所有配置的服务器
claude mcp list
# 获取特定服务器的详细信息
claude mcp get github
# 删除服务器
claude mcp remove github
# 在 Claude Code 中检查服务器状态
/mcp
用命令行配置时,最好确保 VSCode 和 Claude 都是最新版本,避免因为读取规则不同,出现只有一端生效的情况。
MCP 和 Skill 到底怎么选
实际使用里,很多人会觉得 Skill 可以替代 MCP。我的判断是,这两者根本不是一个层面的东西,硬替代基本走不通。
MCP 更像一个 Adapter,负责把各种外部工具和数据源接进来;Skill 更像 SOP,负责告诉 Claude 应该按什么流程做事。只要牵涉到外部数据来源,MCP 就更合适。前端常用的 Figma,就是一个很典型的 MCP 场景:外部服务交互这件事,Claude 不需要理解 Figma 的内部协议细节;如果只靠 Skill,就得更多依赖 LLM 自己去理解和处理,Token 消耗也会明显更高。
主要差异可以直接看这张表:
| 维度 | MCP 服务器 | Skill |
|---|---|---|
| 本质 | 独立进程,提供工具(函数调用) | 提示词模板,指导 Claude 如何做事 |
| 跨项目 | 天然支持,配置在全局即可 | 需要复制 Skill 目录到每个项目 |
| 数据处理 | 服务端处理,只返回结果,省 token | Claude 需要理解整个提示词,可能消耗更多上下文 |
| 状态/计算 | 可以做复杂逻辑(过滤、聚合、转换) | 依赖 Claude 自己推理 |
| 适合场景 | 数据查询、外部服务交互、文件操作 | 工作流编排、输出规范、决策指导 |
最后说一句
MCP 用起来很顺手,但安全这件事不能大意。尤其是接本地脚本和敏感数据源的时候,最好先想清楚权限边界,别让恶意脚本把不该读的东西读走了。