Blog
Tutorials·13 min read

Claude Code 精通指南 第7篇:MCP 服务器

通过 Model Context Protocol 将 Claude 连接到数据库、API 和外部服务。学习如何配置 MCP 服务器、使用 CLI 命令管理它们,以及将 Claude 的能力扩展到文件系统之外。

Jo Vinkenroye·January 15, 2026
Claude Code 精通指南 第7篇:MCP 服务器

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

Left exit 12 off ramp meme - 选择 MCP 而不是复制粘贴工作流
Left exit 12 off ramp meme - 选择 MCP 而不是复制粘贴工作流

这就是 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 服务器会在你的系统上执行代码。 在使用任何服务器之前:

  1. 审查源代码 — 检查它需要哪些权限
  2. 尽量使用只读模式 — 防止意外修改
  3. 缩小访问范围 — 只授权特定路径/表
  4. 信任来源 — 只使用维护良好的服务器
  5. 保护凭证 — 使用环境变量,绝不硬编码

第三方 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 让它能访问训练之后发布的文档。

Surprised Pikachu meme - Claude 自信地使用 2023 年已弃用的 API
Surprised Pikachu meme - Claude 自信地使用 2023 年已弃用的 API

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 回调...
[提供准确的、特定版本的指导]

故障排除

服务器无法连接

  1. 检查状态: 运行 /mcp 查看连接状态
  2. 启用调试模式: claude --mcp-debug 获取详细日志
  3. 验证凭证: 确保环境变量已设置
  4. 手动测试: 直接在终端运行服务器命令

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 集成、团队协作,以及从副项目扩展到生产系统的工作流。

Quick Reference

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.

Comments

Related Posts