MCP 从零到实战 —— Claude Code 连接外部世界
MCP 从零到实战 —— Claude Code 连接外部世界
读完这篇你会知道:MCP 到底是什么、怎么配、怎么用。没有任何抽象概念,全程实操。
一、一句话说清楚 MCP
Claude Code 只能操作你本机的文件。MCP 让它能操作 GitHub、数据库、Jira、Slack……任何你能想到的外部服务。
没有 MCP 有 MCP
══════════════════════ ══════════════════════
Claude Code Claude Code
│ │
│ 能做的事: │ 能做的事:
├─ 读写本地文件 ├─ 读写本地文件
├─ 执行本地命令 ├─ 执行本地命令
└─ 搜索项目代码 ├─ 搜索项目代码
├─ 查 GitHub Issue
├─ 执行数据库 SQL
├─ 发 Slack 消息
├─ 建 Jira 任务
├─ 操作 Notion 文档
└─ ... 无限扩展
二、MCP 是怎么工作的
不写代码,用人话解释
MCP 三要素
═══════════════════════════════════════════════════════════
┌──────────────────┐
│ MCP 客户端 │ Claude Code 自己就是客户端
│ (Client) │ 它的工作:发起请求
└────────┬─────────┘
│
│ 通过 MCP 协议通信(标准化的 JSON 格式)
│ 相当于两个人约定好的"接头暗号"
│
▼
┌──────────────────┐
│ MCP 服务器 │ 另一个人写的"插件程序"
│ (Server) │ 它的工作:执行实际操作
└────────┬─────────┘
│
│ 用自己最擅长的方式操作目标系统
│ (SQL 操作数据库、API 操作 GitHub……)
▼
┌──────────────────┐
│ 外部系统 │ GitHub、MySQL、Slack、Jira……
│ (Target) │ 你想让 AI 操作的任何东西
└──────────────────┘
打个比方
把 Claude Code 想成 一个人,MCP 服务器想成 翻译官:
- 你想跟一个法国人(GitHub)说话,但你不懂法语
- 你请了一个法语翻译(GitHub MCP Server)
- 你跟翻译说中文,翻译转成法语跟法国人沟通
- 法国人回法语,翻译转成中文告诉你
MCP 就是翻译官的「工作协议」——规定了翻译官该怎么干活、怎么汇报。
三、配置文件在哪
MCP 的配置写在 .claude/settings.json 里。你要么放在项目里(只对这个项目生效),要么放在用户目录(所有项目生效):
项目级配置 用户级配置
══════════════════ ══════════════════
项目目录/ ~/.claude/
└── .claude/ └── settings.json
└── settings.json ↑
↑ 对所有项目生效
只对当前项目生效
建议:GitHub Token 这种个人密钥放用户级,数据库连接这种和项目绑定的放项目级。
四、你的第一个 MCP:连接 GitHub
4.1 配置
在 .claude/settings.json 中写入:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.github.com/mcp",
"headers": {
"Authorization": "Bearer ghp_xxxxxxxxxxxx"
}
}
}
}
就这几行。ghp_xxxxxxxxxxxx 换成你自己的 GitHub Personal Access Token。
Token 去哪搞?
- 打开 https://github.com/settings/tokens
- 点 “Generate new token (classic)”
- 勾上 repo、read:org、read:user 权限
- 生成 → 复制
4.2 配置完能做什么
配置完重启 Claude Code(或新开对话),MCP 自动生效。然后你就可以这样对话:
你:帮我看看我有哪些 open 的 issue
Claude Code 内部:
→ 发现你配置了 github MCP
→ 调用 MCP 工具:list_issues
→ GitHub 返回 issue 列表
→ 用中文整理好给你看
⏶ 对话效果:
你:帮我创建一个 issue,标题是「用户注册接口响应太慢」,
描述是「POST /api/users/register 接口响应时间超过 2s,
怀疑是数据库查询慢,需要加索引」
标签打上 bug 和 performance
Claude Code:
已创建 Issue #42 ——「用户注册接口响应太慢」
https://github.com/yourname/yourproject/issues/42
你:帮我看看 feature/payment 分支和 main 有什么差异,
列出改动的文件,每个文件改了什么
Claude Code(通过 GitHub MCP):
## feature/payment vs main
| 文件 | 状态 | 变更 |
|------|------|------|
| PaymentController.java | 新增 | +156 行 |
| PaymentService.java | 新增 | +234 行 |
| application.yml | 修改 | +5 / -2 |
| pom.xml | 修改 | +4 行(新增依赖)|
总结:主要新增了支付模块,包含微信支付和支付宝两个渠道……
你:帮我 peer review 一下 PR #38
Claude Code:
1. 拉取 PR #38 的 diff
2. 逐文件审查
3. 输出审查意见:
### PR #38 Review
⚠️ OrderService.java:45
扣库存的逻辑没有加事务注解,并发下可能超卖。
💡 PaymentController.java:23
建议把金额校验提取到 DTO 的 @DecimalMin 注解,不要在 Controller 里做。
✅ 其他部分没有问题,代码风格符合项目规范。
4.3 你实际看到的权限提示
每次 AI 调用 MCP 工具,你都会看到类似这样的提示:
┌─────────────────────────────────────────────┐
│ Claude Code 想要使用 MCP 工具 │
│ │
│ 服务器:github │
│ 工具:list_issues │
│ 参数:{ "repo": "yourname/yourproject" } │
│ │
│ [ 允许 ] [ 拒绝 ] [ 总是允许 ] │
└─────────────────────────────────────────────┘
频率高的操作可以选「总是允许」,和文件操作一样的逻辑。
五、第二个 MCP:连接本地数据库
5.1 安装与配置
数据库 MCP 服务器是跑在本地的 Node.js 程序。先安装:
# 以 SQLite 为例(最简单,无需额外安装数据库软件)
npm install -g @anthropic/mcp-server-sqlite
然后配置:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.github.com/mcp",
"headers": {
"Authorization": "Bearer ghp_xxxxxxxxxxxx"
}
},
"sqlite": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@anthropic/mcp-server-sqlite",
"--db-path",
"./data/myapp.db"
]
}
}
}
对比一下两种类型:
HTTP 类型 Local 类型
══════════════ ═══════════════
服务器跑在远程 服务器跑在本地
本质是调用 HTTP API 本质是启动一个本地进程
需要 URL + Token 需要 command + args
"type": "http", "type": "local",
"url": "https://xxx/mcp", "command": "python",
"headers": { ... } "args": ["server.py"]
5.2 数据库 MCP 能做什么
你:帮我看一下 user 表的结构
Claude Code → 调用 MCP describe_table
→ 返回:id, username, email, password_hash, created_at, status
你:最近一周每天的新注册用户数,帮我查一下
Claude Code → 调用 MCP execute_sql
→ SELECT DATE(created_at) as date, COUNT(*) FROM users
WHERE created_at >= datetime('now', '-7 days')
GROUP BY DATE(created_at)
ORDER BY date
→ 结果:
| 日期 | 新注册 |
|------|--------|
| 7/1 | 23 |
| 7/2 | 31 |
| 7/3 | 18 |
| 7/4 | 45 |
你:帮我查出哪些用户注册了但从没下过单,
把他们的邮箱列出来
Claude Code → 自动理解需求 → 写 JOIN 查询 → 返回结果
你不需要写 SQL。你描述需求,AI 写 SQL 并通过 MCP 执行。
5.3 MySQL / PostgreSQL 同理
{
"mysql": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@anthropic/mcp-server-mysql",
"--host", "localhost",
"--port", "3306",
"--user", "readonly_user",
"--password", "${MYSQL_PASSWORD}",
"--database", "myapp"
]
}
}
⚠️ 安全提醒:生产数据库用只读账号,不要给 root。不要在生产环境配 MCP 除非你真的知道在做什么。
六、第三个 MCP:连接文件系统(访问其他目录)
默认情况下 Claude Code 只能操作当前项目目录。加一个 filesystem MCP 就能让它访问其他目录:
{
"filesystem": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@anthropic/mcp-server-filesystem",
"--root",
"/Users/me/Documents",
"--root",
"/Users/me/Downloads"
]
}
}
你:帮我在 Documents 目录下找一下所有和「合同」相关的 PDF 文件
Claude Code → filesystem MCP 搜索 → 列出结果
七、常见的 MCP 服务器列表
| MCP 服务器 | 安装方式 | 能做什么 |
|---|---|---|
| GitHub | HTTP 连接 | Issue/PR/Release 管理、代码搜索、Actions 查看 |
| GitLab | HTTP 连接 | 同上,针对 GitLab |
| SQLite | npx @anthropic/mcp-server-sqlite |
查询本地 SQLite 数据库 |
| MySQL | npx @anthropic/mcp-server-mysql |
查询 MySQL 数据库 |
| PostgreSQL | npx @anthropic/mcp-server-postgres |
查询 PostgreSQL 数据库 |
| Filesystem | npx @anthropic/mcp-server-filesystem |
访问项目外的目录 |
| Slack | HTTP 连接 | 发送/读取消息 |
| Jira | HTTP 连接 | 管理 Issue/Sprint |
| Notion | HTTP 连接 | 读写文档/数据库 |
| Playwright | npx @anthropic/mcp-server-playwright |
浏览器自动化(E2E 测试用) |
| Docker | npx @anthropic/mcp-server-docker |
管理容器和镜像 |
八、MCP 工具在对话中是怎么被调用的
你不必手动指定用哪个工具——描述你的需求,AI 自动选择:
你说:"帮我把 issue #12 的状态改成 done"
Claude Code 内部决策链:
┌──────────────────────────────────────────────┐
│ 1. "改 issue 状态" → 这是 GitHub 的操作 │
│ 2. 我有 github MCP 吗?→ 有 │
│ 3. github MCP 有什么工具?→ list_issues, │
│ update_issue, create_issue, ... │
│ 4. "改状态" → 用 update_issue 工具 │
│ 5. update_issue 需要什么参数?→ │
│ - owner: "yourname" │
│ - repo: "yourproject" │
│ - issue_number: 12 │
│ - state: "closed" │
│ 6. 调用工具 → 等待结果 → 告诉你 │
└──────────────────────────────────────────────┘
整个决策过程不需要你参与,你只需要说人话。
九、常见问题
Q1:MCP 和内置工具有什么区别?
内置工具(Read/Write/Edit/Bash/...) MCP 工具
════════════════════════════════ ═══════════════════
Claude Code 自带的 需要额外配置才有
操作本地文件和命令 操作外部服务
所有人都有,不能增减 你可以无限扩展
MCP 不会替换内置工具,两者共存。AI 根据任务自动选。
Q2:我怎么知道配置成功了?
配好 MCP 后启动 Claude Code,如果看到类似这样的日志就说明成了:
✓ Connected to MCP server: github (1 tool loaded)
✓ Connected to MCP server: sqlite (3 tools loaded)
或者在对话中直接试:
你:用 github MCP 帮我查一下我的仓库列表
如果正常返回了仓库列表,说明配置成功。
Q3:一个项目可以配多少个 MCP?
没有硬性限制。一个典型的项目配置 3-5 个:
{
"mcpServers": {
"github": { ... }, // 代码管理
"mysql": { ... }, // 数据库查询
"jira": { ... }, // 任务管理
"slack": { ... } // 通知
}
}
Q4:Token 和密码怎么安全存储?
❌ 不要这样:
{
"headers": {
"Authorization": "Bearer ghp_abc123def456" ← 明文写死!
}
}
✅ 用环境变量:
{
"headers": {
"Authorization": "Bearer ${GITHUB_TOKEN}" ← 引用环境变量
}
}
然后在终端设置 export GITHUB_TOKEN="ghp_abc..." 或者加到 ~/.bashrc。
十、总结
MCP 的本质就一句话:把 Claude Code 的工具列表从「固定的 10 个」变成「你想要的任意个」。
学 MCP 只需要记住三步:
1. 找到/写一个 MCP Server(npm 上搜 @anthropic/mcp-server-xxx)
2. 在 settings.json 里写 5 行配置
3. 用自然语言跟 AI 说你想做什么
不需要理解协议细节,不需要写代码。你只需要知道配置怎么写,剩下的 AI 帮你搞定。
更多推荐
所有评论(0)