Part 7 of 10
你正在调试一个问题,需要查数据库。于是你打开终端,连接 PostgreSQL,写查询,复制结果,粘贴到 Claude 里,解释 Schema……如果 Claude 能直接查询数据库岂不是更方便?

这就是 MCP 服务器的作用。它们是连接 Claude 与外部服务的桥梁——数据库、GitHub、云平台、文档源——让 Claude 能与你的整个开发生态系统协作,而不仅仅是本地文件。
什么是 MCP?
MCP(Model Context Protocol,模型上下文协议)是一个用于 AI 工具集成的开放标准。可以把它想象成一个万能适配器,让 Claude 连接任何支持该协议的服务。
Claude Code ←→ MCP 服务器 ←→ 外部服务│(处理认证、数据格式化、速率限制)
MCP 服务器处理所有复杂性——认证、API 协议、数据转换——让 Claude 可以自然地交互。你问"显示上周注册的用户",Claude 就直接查询你的数据库。
为什么重要:
- 告别复制粘贴 — Claude 直接在数据源头访问数据
- 实时信息 — 始终是最新的,不是过期的上下文
- 安全设计 — 服务器处理凭证,而不是 Claude
- 开放标准 — 跨工具通用,不仅限于 Claude
以基础为起点:第1篇中的基本命令控制 Claude 在本地项目中的行为,而 MCP 服务器则扩展了 Claude 能访问的范围——数据库、API、外部服务等等。
安全第一
MCP 服务器会在你的系统上执行代码。 在使用任何服务器之前:
- 审查源代码 — 检查它需要哪些权限
- 尽量使用只读模式 — 防止意外修改
- 缩小访问范围 — 只授权特定路径/表
- 信任来源 — 只使用维护良好的服务器
- 保护凭证 — 使用环境变量,绝不硬编码
第三方 MCP 服务器未经 Anthropic 验证。获取外部内容的服务器可能让你面临 Prompt 注入攻击。务必小心。
配置位置
MCP 服务器可以在不同级别配置:
项目级别(推荐团队使用):
.mcp.json # 版本控制,与团队共享.claude/settings.local.json # 本地覆盖,gitignore
用户级别(个人工具):
~/.claude/settings.json # 所有项目通用~/.claude/settings.local.json # 个人覆盖
项目级别配置(.mcp.json)是最干净的选择——提交到 git,团队所有人都能获得相同的配置。
配置结构
{"mcpServers": {"server-name": {"command": "npx","args": ["-y", "@package/mcp-server"],"env": {"API_KEY": "${MY_API_KEY}"}}}}
command — 要运行的可执行文件(Node 服务器通常是 npx)
args — 命令参数,通常是包名
env — 环境变量,使用 ${VAR} 语法引用密钥
/mcp 命令
在 Claude Code 中管理 MCP 服务器:
# 检查服务器状态/mcp# 输出:# MCP Server Status# • github: connected# • postgres: connected# • context7: failed (connection timeout)
在终端中使用 CLI 命令:
# 添加服务器claude mcp add github --scope user# 列出已配置的服务器claude mcp list# 查看服务器配置claude mcp get github# 移除服务器claude mcp remove github
作用域选项:
--scope local— 仅当前会话,临时使用--scope user— 跨所有项目持久化--scope project— 保存到.mcp.json,便于团队共享
常用 MCP 服务器
GitHub
完整的仓库集成——PR、Issue、代码审查、发布。
{"mcpServers": {"github": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-github"],"env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"}}}}
Claude 能做什么:
- 创建和审查 Pull Request
- 管理 Issue 和标签
- 跨仓库搜索代码
- 触发工作流
示例:
"审查我们仓库中的未关闭 PR,总结哪些已经可以合并了"
PostgreSQL
直接的数据库访问,带 Schema 感知。
{"mcpServers": {"postgres": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-postgres"],"env": {"DATABASE_URL": "${DATABASE_URL}","READ_ONLY": "true"}}}}
Claude 能做什么:
- 用自然语言查询数据表
- 理解 Schema 关系
- 生成迁移脚本
- 调试数据问题
示例:
"查找所有一月份注册但还没有购买记录的用户"
Context7
实时的、特定版本的库文档。
{"mcpServers": {"context7": {"command": "npx","args": ["-y", "@context7/mcp-server"]}}}
Claude 能做什么:
- 获取任何 npm 包的最新文档
- 获取特定版本的 API 详情
- 避免使用不存在的 API(幻觉)
- 跟进库的最新变化
示例:
"使用 context7 查找 React Query 的 useInfiniteQuery hook 的正确 API"
这特别有价值,因为 Claude 的训练数据有截止日期——Context7 让它能访问训练之后发布的文档。

Filesystem
访问当前项目之外的文件。
{"mcpServers": {"filesystem": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]}}}
Claude 能做什么:
- 从其他目录读取文件
- 访问共享配置
- 跨多个项目工作
示例:
"检查我的 dotfiles 仓库里 ESLint 是怎么配置的"
Supabase
完整的 Supabase 平台集成。
{"mcpServers": {"supabase": {"command": "npx","args": ["-y", "@supabase/mcp-server"],"env": {"SUPABASE_URL": "${SUPABASE_URL}","SUPABASE_SERVICE_KEY": "${SUPABASE_SERVICE_KEY}"}}}}
Claude 能做什么:
- 查询 Supabase 数据表
- 管理认证用户
- 操作存储桶
- 生成 RLS 策略
Web Fetch
获取和处理网页内容。
{"mcpServers": {"fetch": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-fetch"]}}}
Claude 能做什么:
- 抓取网页和 API
- 处理文档站点
- 检查服务状态
- 研究最新信息
Playwright
用于测试和网页交互的浏览器自动化。
{"mcpServers": {"playwright": {"command": "npx","args": ["-y", "@anthropic/mcp-server-playwright"]}}}
Claude 能做什么:
- 导航网页并与页面元素交互
- 截图并捕获页面状态
- 填写表单和点击按钮
- 运行端到端测试场景
- 通过查看屏幕内容来调试 UI 问题
示例:
"使用 Playwright 导航到我们的预发布环境,检查登录表单是否正常工作"
服务器分类
数据库
PostgreSQL — @modelcontextprotocol/server-postgres — 完整 SQL 访问
MySQL — @modelcontextprotocol/server-mysql — MySQL 集成
SQLite — @modelcontextprotocol/server-sqlite — 本地数据库
MongoDB — 社区服务器可用 — 文档数据库
云服务 & DevOps
GitHub — @modelcontextprotocol/server-github — 完整 GitHub API
GitLab — 社区服务器 — GitLab 集成
Cloudflare — @cloudflare/mcp-server-cloudflare — Workers、KV、D1、R2
AWS — 社区服务器 — S3、Lambda 等
测试 & 自动化
Playwright — @anthropic/mcp-server-playwright — 浏览器自动化和 E2E 测试
文档 & 研究
Context7 — @context7/mcp-server — 实时库文档
Perplexity — 社区服务器 — AI 驱动搜索
Fetch — @modelcontextprotocol/server-fetch — 网页内容
多服务器协同
大多数项目受益于多个 MCP 服务器协同工作:
{"mcpServers": {"github": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-github"],"env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"}},"postgres": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-postgres"],"env": {"DATABASE_URL": "${DATABASE_URL}","READ_ONLY": "true"}},"context7": {"command": "npx","args": ["-y", "@context7/mcp-server"]}}}
Claude 根据你的请求自动选择正确的服务器。问数据库 Schema,用 PostgreSQL。问 PR,用 GitHub。
实际工作流
数据库驱动开发
你:"给我看 orders 表的 Schema"Claude:[通过 postgres MCP 查询]orders 表包含:- id (uuid, 主键)- user_id (uuid, 外键 → users)- total_amount (decimal)- status (枚举: pending, paid, shipped, delivered)- created_at (timestamp)你:"查找金额超过 $500 且状态仍为 pending 的订单"Claude:[执行查询]找到 23 条匹配记录。最早的一条是 3 天前的...
跨服务自动化
你:"为我们讨论的 bug 创建一个 GitHub Issue,指派给我"Claude:[使用 github MCP]已创建 Issue #234: "Fix race condition in order processing"- 添加标签: bug, priority-high- 指派给: @yourusername- 关联了最近提及 orders 表的提交
文档感知编码
你:"使用 context7 查找 TanStack Query v5 中处理乐观更新的正确方式"Claude:[通过 context7 获取最新文档]在 TanStack Query v5 中,乐观更新使用 onMutate 回调...[提供准确的、特定版本的指导]
故障排除
服务器无法连接
- 检查状态: 运行
/mcp查看连接状态 - 启用调试模式:
claude --mcp-debug获取详细日志 - 验证凭证: 确保环境变量已设置
- 手动测试: 直接在终端运行服务器命令
Windows 特定问题
在原生 Windows(非 WSL)上,npx 需要一个包装器:
{"command": "cmd","args": ["/c", "npx", "-y", "@modelcontextprotocol/server-github"]}
不加 cmd /c 会出现 "Connection closed" 错误。
Token 限制
MCP 输出有限制以防止上下文溢出:
- 警告阈值: 10,000 tokens
- 默认最大值: 25,000 tokens
如需调整,设置 MAX_MCP_OUTPUT_TOKENS 环境变量。
服务器无响应
某些服务器需要时间初始化。如果服务器启动后立刻显示"failed",稍等片刻然后再次运行 /mcp。
最佳实践
1. 最小权限原则
只请求必要的权限:
{"env": {"READ_ONLY": "true","ALLOWED_PATHS": "/specific/directory"}}
2. 环境变量存储密钥
绝不硬编码 Token:
{"env": {"GITHUB_TOKEN": "${GITHUB_TOKEN}"}}
在 Shell 配置或 .env 文件中设置变量。
3. 项目 vs 用户作用域
- 项目作用域(
.mcp.json):数据库连接、项目特定工具 - 用户作用域(
~/.claude/settings.json):GitHub、个人工具
4. 审查服务器代码
安装任何 MCP 服务器之前,检查:
- 它能执行哪些命令
- 需要什么网络访问权限
- 谁在维护
- 最近的活动和 Issue
查找 MCP 服务器
官方服务器:
社区目录:
搜索 GitHub:
- Topic:
mcp-server - 搜索:package.json 中的
"@modelcontextprotocol"
下一步
MCP 服务器将 Claude 的触达范围扩展到了外部服务。结合我们已经介绍的所有内容——命令、技能和子代理——你现在拥有了一套强大的 AI 辅助开发工具包。
在第8篇:生产工作流中,我们将把这一切整合起来,介绍真实世界的模式:CI/CD 集成、团队协作,以及从副项目扩展到生产系统的工作流。
CLI 命令
claude mcp add [name] --scope [user|project|local]
claude mcp list
claude mcp get [name]
claude mcp remove [name]
会话内 — /mcp(检查状态)
调试 — claude --mcp-debug
文件位置
.mcp.json — 项目级(版本控制)
.claude/settings.local.json — 项目级(gitignore)
~/.claude/settings.json — 用户级(所有项目)
Stay Updated
Get notified about new posts on automation, productivity tips, indie hacking, and web3.
No spam, ever. Unsubscribe anytime.

