返回列表

Claude Code MCP Server 深度指南:把 AI 助手变成全栈开发平台

2026-03-15·11 分钟阅读·AI教程

前言

进阶指南的第六节里,我用大约 45 行介绍了 MCP 的基本概念:配置 settings.json,列了 5 个常用 Server,给了两个使用场景。

但 MCP 的深度远不止于此。它是 Claude Code 从"代码助手"进化为"全栈开发平台"的关键拼图。通过 MCP,Claude Code 可以直接操作 GitHub、查询数据库、调用 Figma 设计稿、管理 Firebase 后端——所有这些都在同一个终端会话里完成。

这篇文章把 MCP 讲透。


一、MCP 是什么

1.1 一句话定义

MCP(Model Context Protocol)是一个开放协议,定义了 AI 应用(客户端)与外部工具/数据源(服务端)之间的标准通信方式。

类比:MCP 之于 AI 应用,就像 USB-C 之于硬件设备。 有了统一接口,任何 AI 应用都能接入任何工具,不需要为每个工具写专门的集成代码。

1.2 架构模型

┌─────────────┐     JSON-RPC 2.0     ┌─────────────┐
│  Claude Code │ ◄──────────────────► │  MCP Server │
│  (客户端)    │     stdio / HTTP     │  (服务端)    │
└─────────────┘                       └─────────────┘
       │                                     │
       │  发现工具、调用工具、获取结果          │  连接外部系统
       │                                     │  GitHub / DB / API...

MCP 采用客户端-服务端架构:

  • 客户端(Claude Code):发现可用工具,决定何时调用,处理返回结果
  • 服务端(MCP Server):暴露工具能力,连接外部系统,执行实际操作
  • 通信协议:JSON-RPC 2.0,结构化的请求-响应模式

1.3 三大核心原语

MCP 定义了三种能力类型:

原语控制方说明示例
Tools模型调用可执行的操作,类似 API 端点创建 GitHub Issue、查询数据库
Resources客户端控制只读数据源,类似 GET 端点读取文件内容、获取配置信息
Prompts用户触发预定义的提示词模板代码审查模板、SQL 生成模板

在 Claude Code 中,Tools 是最常用的原语。当你配置一个 MCP Server 后,Claude 会自动发现它提供的所有工具,并在合适的时机调用。

1.4 传输机制

MCP 支持两种传输方式:

传输方式适用场景特点
stdio本地 ServerServer 作为子进程运行,通过标准输入/输出通信。最常用
Streamable HTTP远程 Server通过 HTTP 端点通信,支持 SSE 流式传输。适合云端部署

Claude Code 两种都支持。本地开发场景下,绝大多数 Server 使用 stdio。


二、配置方式

2.1 三个配置层级

MCP Server 可以在三个层级配置,优先级从高到低:

层级文件路径作用域提交到 Git?
项目本地.claude.json(项目根目录)当前项目,仅自己❌ 已在 .gitignore
项目共享.claude/settings.json当前项目,团队共享✅ 团队统一
用户全局~/.claude/settings.json所有项目❌ 个人配置

经验法则:

  • 包含个人 Token 的配置 → 项目本地(.claude.json)或用户全局
  • 团队都需要的 Server → 项目共享(.claude/settings.json
  • 个人常用的通用 Server → 用户全局(~/.claude/settings.json

2.2 JSON 配置格式

{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx"
      }
    }
  }
}

字段说明:

字段必填说明
command启动命令(npxuvxnodepython 等)
args命令参数数组
env环境变量,用于传递 Token、密钥等
type传输类型,默认 stdio,远程用 url
url远程 Server 的 HTTP 端点(type: "url" 时必填)

2.3 CLI 命令添加

除了手动编辑 JSON,还可以用命令行:

# 添加 stdio 类型的 Server
claude mcp add github -e GITHUB_TOKEN=ghp_xxx -- npx -y @modelcontextprotocol/server-github
 
# 添加远程 Server
claude mcp add remote-server --transport http --url https://example.com/mcp
 
# 指定配置层级
claude mcp add github --scope user -e GITHUB_TOKEN=ghp_xxx -- npx -y @modelcontextprotocol/server-github
claude mcp add github --scope project -- npx -y @modelcontextprotocol/server-github
 
# 查看已配置的 Server
claude mcp list
 
# 删除 Server
claude mcp remove github

2.4 交互式管理

在 Claude Code 会话中输入 /mcp,可以交互式查看和管理所有已配置的 MCP Server:

  • 查看每个 Server 的连接状态
  • 查看每个 Server 提供的工具列表
  • 重启出错的 Server

三、常用 MCP Server

MCP 生态已经非常丰富。以下按来源分类介绍最实用的 Server。

3.1 官方参考实现

这些由 Anthropic 或 MCP 官方维护,质量和稳定性有保障:

Server用途安装命令
Filesystem访问指定目录外的文件(安全沙箱)npx -y @modelcontextprotocol/server-filesystem /path
GitHubIssues、PR、仓库操作、代码搜索npx -y @modelcontextprotocol/server-github
PostgreSQL只读查询 PostgreSQL 数据库npx -y @modelcontextprotocol/server-postgres
Brave Search网络搜索(需要 API Key)npx -y @modelcontextprotocol/server-brave-search
Puppeteer浏览器自动化、截图、爬取npx -y @modelcontextprotocol/server-puppeteer
FetchHTTP 请求,获取网页/API 内容npx -y @modelcontextprotocol/server-fetch

配置示例——GitHub + Brave Search:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx"
      }
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "BSA_xxxxxxxxxxxx"
      }
    }
  }
}

3.2 第一方 Server(公司官方维护)

这些由各产品公司官方开发和维护:

Server用途安装方式
Figma读取设计稿、提取组件和样式npx -y figma-developer-mcp --figma-api-key=xxx
Supabase数据库操作、Auth、Storagenpx -y @supabase/mcp-server-supabase
Stripe支付管理、订阅、发票npx -y @stripe/mcp
Notion页面读写、数据库查询npx -y @notionhq/notion-mcp-server
Slack发送消息、管理频道npx -y @anthropic/mcp-server-slack
FirebaseFirestore、Auth、App Hostingnpx -y firebase-tools@latest
Sentry错误追踪、性能监控npx -y @sentry/mcp-server-sentry
Playwright端到端测试、浏览器自动化npx -y @anthropic/mcp-server-playwright

3.3 社区热门 Server

Server用途安装方式
Context7获取最新库文档(解决训练数据过时问题)npx -y @upstash/context7-mcp
Sequential Thinking结构化思考,分步推理复杂问题npx -y @anthropic/mcp-sequential-thinking
Firecrawl网页爬取、转 Markdownnpx -y firecrawl-mcp

3.4 配置建议

不要一次性配置太多 Server。每个 Server 都会增加 Claude 的工具发现开销。建议:

  1. 核心开发:GitHub + Filesystem(几乎所有项目都需要)
  2. 按需添加:根据项目技术栈添加对应 Server
  3. 临时使用:用 .claude.json 配置临时需要的 Server,用完删除

四、安全最佳实践

MCP 赋予了 Claude Code 强大的外部访问能力,但也引入了新的安全风险。

4.1 主要攻击向量

攻击类型描述风险等级
工具投毒恶意 Server 在工具描述中注入隐藏指令🔴 高
输出注入Server 返回结果中包含 prompt injection🔴 高
Rug PullServer 更新后行为改变,之前安全的工具变得危险🟡 中
凭证泄露Token 硬编码在配置文件中,意外提交到 Git🟡 中
权限过大Server 获得超出需要的访问权限🟡 中

4.2 防护措施

措施做法原因
环境变量Token 放 env 字段,不硬编码避免意外提交到 Git
锁定版本@modelcontextprotocol/server-github@1.2.3防止 rug pull 攻击
最小权限GitHub Token 只给需要的 scope限制爆炸半径
审查工具描述/mcp 查看 Server 暴露的工具列表发现可疑的隐藏工具
人工确认保持 Claude Code 的权限提示开启敏感操作前人工审批
来源可信优先使用官方和知名社区 Server降低供应链风险
定期审计定期检查已配置的 Server 列表清理不再使用的 Server

4.3 安全配置示例

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github@2.2.0"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

关键点:

  1. 锁定版本号@2.2.0),不用 latest
  2. 引用环境变量${GITHUB_TOKEN}),不硬编码 Token
  3. 配置在 .claude.json(不提交到 Git),而非 .claude/settings.json

五、构建自定义 MCP Server

当现有 Server 不能满足需求时,你可以自己构建。

5.1 官方 SDK

MCP 提供了多语言 SDK:

语言包名成熟度
TypeScript@modelcontextprotocol/sdk✅ 稳定
Pythonmcp[cli](FastMCP)✅ 稳定
Javaio.modelcontextprotocol:sdk✅ 稳定
Kotlinio.modelcontextprotocol:kotlin-sdk✅ 稳定
C#ModelContextProtocol✅ 稳定
Gogithub.com/mark3labs/mcp-go🟡 社区
Dartpackage:dart_mcp🟡 社区
Rustmcp-server🟡 社区

5.2 TypeScript 示例

@modelcontextprotocol/sdk 构建一个简单的天气查询 Server:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
 
const server = new McpServer({
  name: "weather-server",
  version: "1.0.0",
});
 
// 定义一个工具
server.tool(
  "get-weather",
  "获取指定城市的天气信息",
  {
    city: z.string().describe("城市名称,如 Beijing"),
  },
  async ({ city }) => {
    // 实际项目中调用天气 API
    const response = await fetch(
      `https://api.weatherapi.com/v1/current.json?key=${process.env.WEATHER_API_KEY}&q=${city}`
    );
    const data = await response.json();
 
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify(data, null, 2),
        },
      ],
    };
  }
);
 
// 启动 Server
const transport = new StdioServerTransport();
await server.connect(transport);

5.3 Python 示例(FastMCP)

Python 的 FastMCP 框架更简洁:

from mcp.server.fastmcp import FastMCP
 
mcp = FastMCP("my-server")
 
@mcp.tool()
def query_inventory(product_id: str) -> str:
    """查询产品库存信息"""
    # 实际项目中查询数据库
    return f"产品 {product_id} 库存: 42 件"
 
@mcp.tool()
def update_price(product_id: str, new_price: float) -> str:
    """更新产品价格"""
    # 实际项目中更新数据库
    return f"产品 {product_id} 价格已更新为 {new_price}"
 
if __name__ == "__main__":
    mcp.run(transport="stdio")

5.4 注册到 Claude Code

构建完成后,在配置中注册:

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": ["./mcp-servers/weather/index.js"]
    },
    "inventory": {
      "command": "python",
      "args": ["./mcp-servers/inventory/server.py"]
    }
  }
}

也可以用 CLI:

claude mcp add weather -- node ./mcp-servers/weather/index.js
claude mcp add inventory -- python ./mcp-servers/inventory/server.py

5.5 开发调试

MCP 官方提供了 Inspector 工具,方便调试:

# 安装 MCP Inspector
npx @modelcontextprotocol/inspector
 
# 测试你的 Server
npx @modelcontextprotocol/inspector node ./mcp-servers/weather/index.js

Inspector 提供一个 Web UI,可以:

  • 查看 Server 暴露的所有工具
  • 手动调用工具并查看返回结果
  • 检查 JSON-RPC 通信日志

六、实战示例:Flutter 全栈开发

这是 MCP 真正发光的场景。通过组合多个 MCP Server,Claude Code 可以覆盖 Flutter 项目从设计到部署的完整流程。

6.1 技术栈与 MCP 配置

假设我们要开发一个 Flutter ���商应用,技术栈:

  • 前端:Flutter(Dart)
  • 后端:Firebase(Firestore + Auth + Hosting)
  • 设计:Figma
  • 版本控制:GitHub

对应的 MCP 配置:

{
  "mcpServers": {
    "dart": {
      "command": "dart",
      "args": ["tooling-daemon", "--mcp"]
    },
    "figma": {
      "command": "npx",
      "args": ["-y", "figma-developer-mcp", "--figma-api-key=fig_xxx"]
    },
    "firebase": {
      "command": "npx",
      "args": ["-y", "firebase-tools@latest"],
      "env": {
        "FIREBASE_TOKEN": "your-firebase-token"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx"
      }
    }
  }
}

6.2 Dart & Flutter MCP Server

Dart SDK 内置了 MCP Server 支持(通过 dart tooling-daemon --mcp),提供以下工具:

工具功能
dart_fix自动修复 Dart 代码问题(lint 建议)
dart_format格式化 Dart 代码
pub_search搜索 pub.dev 包
pub_add添加依赖到 pubspec.yaml
pub_outdated检查过时的依赖
analyze静态分析,报告错误和警告

实际使用场景:

你:搜索 pub.dev 上最流行的状态管理库,比较 riverpod 和 bloc 的最新版本

Claude:[调用 pub_search] 搜索结果...
  - riverpod: ^2.6.1, 5892 likes
  - flutter_bloc: ^8.1.6, 4521 likes
  让我比较一下两者的特点...

你:用 riverpod,帮我添加依赖

Claude:[调用 pub_add] 已添加 flutter_riverpod: ^2.6.1 到 pubspec.yaml

6.3 Figma MCP:设计到代码

Figma MCP Server 让 Claude 直接读取设计稿:

你:读取 Figma 设计稿 https://figma.com/file/xxx,提取产品卡片组件的设计规范

Claude:[调用 figma/get_file] 分析设计稿...

产品卡片组件规范:
- 圆角: 12px
- 阴影: 0 2px 8px rgba(0,0,0,0.1)
- 图片区域: 宽高比 4:3
- 标题: 16px, FontWeight.w600
- 价格: 20px, Color(0xFFE53935)
- 内边距: 16px

我来生成对应的 Flutter Widget...

然后 Claude 会基于提取的设计规范,直接生成 Flutter 代码:

class ProductCard extends StatelessWidget {
  final String imageUrl;
  final String title;
  final double price;
 
  const ProductCard({
    super.key,
    required this.imageUrl,
    required this.title,
    required this.price,
  });
 
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(12),
        boxShadow: [
          BoxShadow(
            color: Colors.black.withValues(alpha: 0.1),
            blurRadius: 8,
            offset: const Offset(0, 2),
          ),
        ],
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          AspectRatio(
            aspectRatio: 4 / 3,
            child: Image.network(imageUrl, fit: BoxFit.cover),
          ),
          Padding(
            padding: const EdgeInsets.all(16),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(title,
                    style: const TextStyle(
                        fontSize: 16, fontWeight: FontWeight.w600)),
                const SizedBox(height: 4),
                Text(${price.toStringAsFixed(2)}',
                    style: const TextStyle(
                        fontSize: 20, color: Color(0xFFE53935))),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

6.4 Firebase MCP:后端操作

Firebase MCP Server 让 Claude 直接管理后端:

你:在 Firestore 创建 products 集合,添加几个测试商品数据

Claude:[调用 firebase/firestore_add_document]
已创建 products 集合,添加了 3 个测试文档:
- product_001: Flutter 入门指南, ¥59.00
- product_002: Dart 编程实战, ¥79.00
- product_003: Firebase 全栈开发, ¥99.00

你:配置 Firebase Auth,启用邮箱登录

Claude:[调用 firebase/auth_configure]
已启用 Email/Password 认证方式。

6.5 完整工作流

把所有 MCP Server 串联起来,一个完整的开发流程:

第一步:设计 → 代码
你:读取 Figma 设计稿,把首页的产品列表页面转成 Flutter 代码

第二步:添加依赖
你:这个页面需要网络请求和状态管理,帮我选择合适的库并添加依赖

第三步:后端集成
你:创建 Firestore 数据模型,写一个 Repository 层连接 Firebase

第四步:功能完善
你:添加用户认证功能,登录后才能查看购物车

第五步:代码质量
你:分析整个项目的代码质量,修复所有 lint 警告

第六步:提交代码
你:创建一个 PR,标题是 "feat: add product listing page"

每一步 Claude 都会调用对应的 MCP 工具,而你只需要用自然语言描述需求。


七、MCP vs 其他扩展方式

Claude Code 有多种扩展机制,各有适用场景:

特性MCP ServerHooksSlash CommandsCLAUDE.md
本质外部工具协议Shell 命令提示词模板自然语言指令
执行方式Claude 决定何时调用系统自动触发用户手动触发Claude 理解后遵守
确定性Claude 判断100% 确定100% 确定建议性
能力范围连接外部系统本地 Shell 操作复用提示词行为约束
典型场景GitHub、数据库、API格式化、lint、安全拦截代码审查、测试生成编码风格、架构约定
配置位置settings.jsonsettings.json.claude/commands/CLAUDE.md

何时用哪个?

  • 需要访问外部系统(GitHub、数据库、Figma)→ MCP
  • 需要确定性执行本地操作(每次保存后 lint)→ Hooks
  • 需要复用复杂提示词(代码审查模板)→ Slash Commands
  • 需要约束 Claude 的行为(编码风格、禁止某些操作)→ CLAUDE.md

它们不是互斥的,最佳实践是组合使用:

CLAUDE.md:定义项目规范和编码风格
Hooks:保证代码质量(自动格式化、lint)
Slash Commands:封装常用工作流(/review、/test)
MCP:连接外部工具和数据源

八、常见问题

Q1:MCP Server 没有出现在工具列表中?

检查步骤:

  1. 运行 /mcp 查看 Server 状态
  2. 确认 JSON 配置格式正确(注意逗号、引号)
  3. 确认 command 指向的程序已安装(如 npxuvx
  4. 检查 env 中的 Token 是否有效
  5. 尝试 claude mcp remove xxx 后重新添加

Q2:Server 启动后报错怎么调试?

# 用 Inspector 调试
npx @modelcontextprotocol/inspector npx -y @modelcontextprotocol/server-github
 
# 手动运行 Server 查看错误输出
npx -y @modelcontextprotocol/server-github 2>&1

Q3:多个 Server 会影响性能吗?

会。每个 Server 都是一个独立进程,Claude 在每次会话开始时需要发现所有工具。建议:

  • 常用 Server 保持 3-5 个
  • 临时需要的 Server 用 .claude.json 配置,用完删除
  • 不用的 Server 及时清理

Q4:如何在团队中共享 MCP 配置?

把不含敏感信息的配置放在 .claude/settings.json(提交到 Git):

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

团队成员各自在本地设置 GITHUB_TOKEN 环境变量。

Q5:自定义 Server 如何处理错误?

在工具实现中返回 isError: true

server.tool("risky-operation", "执行风险操作", {}, async () => {
  try {
    const result = await doSomething();
    return { content: [{ type: "text", text: result }] };
  } catch (error) {
    return {
      content: [{ type: "text", text: `错误: ${error.message}` }],
      isError: true,
    };
  }
});

Q6:MCP 和 Claude Code 的内置工具有什么区别?

Claude Code 内置了文件读写、Bash 执行、搜索等工具。MCP 扩展的是 Claude Code 无法直接访问的外部系统。两者互补:

  • 内置工具:本地文件系统、Shell 命令、代码搜索
  • MCP 工具:GitHub API、数据库、第三方服务、浏览器自动化

Q7:远程 MCP Server 安全吗?

远程 Server 通过 HTTP 通信,需要额外注意:

  • 确保使用 HTTPS
  • 验证 Server 的身份(域名、证书)
  • 不要在 URL 中传递敏感信息
  • 优先使用官方托管的远程 Server

总结

MCP 是 Claude Code 最强大的扩展机制。核心要点:

  1. MCP = AI 的 USB-C — 标准化协议,让 Claude Code 接入任何外部工具
  2. 安全第一 — 锁定版本、环境变量、最小权限,不要为了方便牺牲安全
  3. 组合使用 — MCP + Hooks + Slash Commands + CLAUDE.md,各司其职

从 GitHub 操作到数据库查询,从 Figma 设计稿到 Firebase 后端,MCP 让 Claude Code 真正成为一个全栈开发平台。


推荐阅读