Appearance
Skills的能力还是在本地文件系统里打转。想让Claude帮你查网页、连数据库、调第三方API?MCP就是解决这个问题的。
MCP是什么
MCP全称Model Context Protocol,是Anthropic推出的开源标准协议。可以把它理解成AI世界的USB接口——
- 电脑通过USB连接键盘、鼠标、U盘
- Claude Code通过MCP连接浏览器、数据库、搜索引擎、任何外部服务
没有MCP的Claude Code:只能读写文件和跑Bash
有了MCP的Claude Code:
- 打开浏览器帮你调试前端页面
- 连上PostgreSQL跑SQL查询
- 调GitHub API创建Issue和PR
- 搜索Brave Search查最新资料
- 操控你正在浏览的网页
基本概念
| 概念 | 说明 |
|---|---|
| MCP Server | 提供能力的服务端,一个Server包含一组Tools |
| Tool | 具体的动作,比如brave_web_search、puppeteer_navigate |
| Resource | 数据源,比如数据库表、文件系统 |
通信方式有三种:HTTP(远程服务,推荐)、SSE(已废弃)、stdio(本地进程)。
从零配置一个MCP Server
配MCP Server最快的方式是用claude mcp add命令。
远程服务器(HTTP)
bash
# 连接 Notion
claude mcp add --transport http notion https://mcp.notion.com/mcp
# 带认证的服务
claude mcp add --transport http stripe https://mcp.stripe.com \n --header "Authorization: Bearer your-token"本地服务器(stdio)
bash
# Airtable
claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \n -- npx -y airtable-mcp-server注意参数顺序:所有选项(--transport、--env、--scope)必须在服务器名之前。
--分隔符之后是传给MCP服务器的启动命令。
用JSON配置
也可以直接写JSON或写在项目根目录的.mcp.json里,团队共享:
json
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/sse",
"headers": {
"Authorization": "Bearer ${SENTRY_AUTH_TOKEN}"
}
}
}
}${SENTRY_AUTH_TOKEN}会自动展开成环境变量,密钥不用硬编码在配置文件里。
三种作用域
| 作用域 | 存储位置 | 什么时候用 |
|---|---|---|
| local(默认) | ~/.claude.json | 个人实验、敏感凭据 |
| project | .mcp.json | 团队共享,提交到Git |
| user | ~/.claude.json全局 | 跨项目的个人常用工具 |
bash
# 团队共享
claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp
# 跨项目个人使用
claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic配好之后,输入/mcp可以查看所有已连接的Server、工具数量和状态。
实用MCP Server推荐
浏览器自动化
Chrome集成(推荐)
Claude Code原生支持Chrome集成,用--chrome启动或在会话中输入/chrome。需要安装Claude in Chrome扩展(v1.0.36+),然后Claude就能:
- 读取你当前浏览器页面的内容和DOM
- 在Console里执行JavaScript调试
- 截图做视觉验证
- 操控页面元素(点击、填表、滚动)
最大的亮点是共享你的浏览器登录状态——Claude可以帮你操作Google Docs、Notion、内部管理后台这些需要登录的应用,不用单独给它凭据。
Playwright MCP
需要更强的自动化能力(比如跑端到端测试):
bash
claude mcp add playwright -- npx @anthropic-ai/mcp-playwright搜索
Brave Search
bash
claude mcp add --transport stdio --env BRAVE_API_KEY=YOUR_KEY brave \n -- npx -y @anthropic-ai/mcp-brave-search让Claude可以搜索最新的信息,不再局限于训练数据的知识截止日期。
数据库
PostgreSQL
bash
claude mcp add --transport stdio --env DATABASE_URL=postgresql://... postgres \n -- npx -y @anthropic-ai/mcp-postgresClaude可以直接跑SQL查询、查看表结构、分析数据。
代码搜索
grep.app
在GitHub上百万个公开仓库里搜索真实的代码用法。当你不确定某个API怎么用的时候,让Claude去搜一下别人怎么写的,比看文档快。
文档查询
Context7
专门查最新的框架和库文档。解决Claude知识截止的问题——它训练数据里的React可能还是旧版API,但Context7能查到最新的。
自己写一个MCP Server
大部分场景用社区现成的Server就够了。但如果要连接内部API、私有服务,可能需要自己写一个。
用Python的FastMCP框架,几十行就能搞定:
python
from fastmcp import FastMCP
mcp = FastMCP("weather")
@mcp.tool()
def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 调用你的天气 API
return f"{city}: 晴天, 28°C"
mcp.run()TypeScript版本用@anthropic-ai/sdk也差不多。写完之后用stdio方式注册:
bash
claude mcp add weather -- python weather_server.py什么时候该自建:
- 要连接公司内部的API(不会有公开的MCP Server)
- 要封装特定的业务逻辑
- 现有的MCP Server不满足需求
什么时候不该自建:
- 能用Bash + curl解决的事
- 只需要静态知识(用Skills的references目录就行)
给Agent设计工具和给人设计API不是一回事
很多人踩过坑。直觉上会把现有的REST API一个接口封装成一个MCP工具——create_file一个、write_content一个、set_permissions一个。但Agent用起来就很痛苦,它得协调三个工具才能完成一件事。
更好的做法是按Agent的目标来设计:直接给一个create_script(path, content, executable)一步搞定。这个思路叫ACI(Agent-Computer Interface)。
几个实用原则:
- 工具名按系统分层:github_pr_create、jira_issue_search,Claude看名字就知道是干什么的
- 错误信息要教Agent怎么修:告诉它「参数X格式应该是YYYY-MM-DD」
- 大响应支持精简模式:加一个
response_format: concise选项 - 每个工具附1-2个调用示例:加了示例后工具调用准确率可以从72%提升到90%
MCP的隐形代价
MCP很强,但有代价,而且这个代价很多人没意识到。
上下文成本
每个MCP Server启动后,它的所有工具定义会被加载到上下文里。一个典型的MCP Server有20-30个工具定义,每个约200 tokens,合计4000-6000 tokens。
接5个MCP Server,光工具定义的固定开销就到了25000 tokens——占200K上下文的12.5%。
Tool Output噪声
MCP和Skills在这点上有很大区别——很多MCP Server会把完整结果直接返回给Claude,一次查询就可能灌回来几千tokens。Claude不需要看这么多,但只要数据进了上下文,token就实打实消耗了。
相比之下,Skills通常更轻量——它走的是CLI + 短描述的方式。所以能用Skill解决的就不要上MCP。MCP的真正优势是需要维护状态的任务(比如Playwright操控浏览器)。
怎么优化
Tool Search(官方方案)
Claude Code有Tool Search机制缓解工具定义开销。设了ENABLE_TOOL_SEARCH=true之后,MCP工具不会全量加载到上下文里,固定开销从几万tokens降到几乎为零:
json
{
"env": {
"ENABLE_TOOL_SEARCH": "true"
}
}限制返回数据量
MAX_MCP_OUTPUT_TOKENS可以限制MCP工具返回的最大token数。
及时断开不用的Server
/mcp命令可以查看每个Server的连接状态和工具数量,该关的关掉。
