Claude Code 实战入门(四):MCP 服务器,让 Claude 跟任何东西对话
MCP 是让 Claude Code 伸出文件系统的插件协议。装一个(Playwright),端到端看它跑通,再学会保护它不发疯的权限模型。
如果你只学一个 Claude Code 的扩展机制,学 MCP。这是"自动补全"和"平台"之间的差别。
一分钟梗概
MCP 是 Model Context Protocol——一份小的开放规范,让 Claude Code 调用外部服务器的工具、读它们的资源。“服务器"是任何一个会说 MCP(基于 stdio 或 HTTP)的进程。Claude 把 MCP 工具当内置工具:模型决定何时调,你确认或自动 approve,结果以文本回来。
这意味着 Claude 可以:
- 驱动浏览器(Playwright MCP)
- 查 Postgres(Postgres MCP)
- 读你的 Notion 或 Obsidian 仓
- 跟你内部 API 对话
- 任何你能用 200 行 Node 包起来的东西
MCP 服务器主要是社区写的。mcp.so 有目录,Anthropic 文档里也有日益成长的列表。好的服务器都短、聚焦、对自己能做什么诚实。
装第一个 MCP 服务器
Playwright 是经典"第一个 MCP”,因为它把价值讲明白了。在你的 Shell 里——不是 Claude Code 内部:
| |
发生了三件事:
- 命令注册了一个名为
playwright的 MCP 服务器。 - “怎么跑它"是
npx @playwright/mcp@latest——npx 按需拉。 - 服务器进入了你机器级配置(
~/.claude/settings.json)。
确认:
| |
打开 Claude Code:
| |
第一次会弹一个权限确认——“Claude 想用 playwright 工具”。Approve。Agent 启 headless 浏览器、加载页面、抽标题、回复。几秒往返。
刚才发生了什么(技术上)
Claude Code --(stdio)--> @playwright/mcp 进程
| |
| v
| 真实浏览器
| |
<----- text -------------+
MCP 服务器是独立进程。Claude Code 走 stdio(或 HTTP,远程服务器用)跟它说话。工具在握手时被发现——Claude 问"你能做什么”,服务器回 schema 列表。从那之后,模型就可以像调内置工具一样调它们。
协议小到 30 分钟能读完。给一个聚焦用例自己写一个,半天能做完。
权限——这一段不能跳
每个 MCP 工具有权限等级。模型第一次调它时你拿到确认对话框,三个选项:
- 本次允许——只此一次
- 本会话允许——直到你
/clear或退出 - 永久允许——写进
.claude/settings.json
我不建议对任何会改状态的 MCP 选"永久允许"。只读工具(搜索、抓取、查询)——可以。任何写文件、发消息、有副作用的——每次确认,或者把权限开得很窄。
.claude/settings.json 里对的模式:
| |
这把 Playwright 的安全工具自动放行,把"在浏览器里跑任意 JS"那个直接禁掉。粒度到具体工具。
我真在用的几个 MCP 服务器
试了 30 多个之后留下来的:
| 服务器 | 做什么 | 为什么留下 |
|---|---|---|
playwright | 浏览器自动化 | 替代了一打手写爬虫 |
postgres | 只读 Postgres 查询 | “把行给我看"不离开 Claude |
filesystem | 项目根之外的沙箱化文件访问 | 读 ~/.config/ 里的配置等 |
slack | 搜 Slack 历史、发消息 | 站会总结自动化 |
github | 通过 GitHub API 访问 Issue/PR | 某些查询比 CLI 干净 |
模式一致:每个做一件事、一个 npm/PyPI 包、暴露 3-10 个工具。
MCP 不是什么
几件要讲清楚:
- 不是沙箱。 MCP 服务器以你的用户权限运行。恶意服务器能做你能做的一切。装之前要审。
- 不是快速通道。 每次 MCP 工具调用是进程往返。延迟真实。别在热循环里用。
- 不是唯一方式。 一次性集成有时一个跑 shell 脚本的斜杠命令更对。MCP 是为"跨会话反复调用"准备的。
自己写一个(草稿)
要自己写,SDK 是 Node 的 @modelcontextprotocol/sdk 或 Python 的 mcp。最小服务器约 50 行:
| |
这是一个能跑的 MCP 服务器。存盘、注册(claude mcp add my-echo node my-server.js)、重启,Claude 就有新工具了。难的是选要暴露什么;协议本身让路。
下一篇:Hooks——每次工具调用前后跑的代码。防御层。