Skip to content

16. MCP(Model Context Protocol)

本章你将学到

  • MCP 是什么,解决什么问题
  • 如何添加和管理 MCP 服务器
  • 项目级 .mcp.json 配置详解
  • 热门 MCP 服务器介绍

16.1 MCP 是什么

MCP(Model Context Protocol) 是 Anthropic 主导的开放标准,让 AI 模型能够连接到外部数据源和工具。

通过 MCP,Claude Code 可以:

  • 读取 Google Drive 里的设计文档
  • 更新 Jira / Linear 里的工单
  • 从 Slack 拉取讨论记录
  • 直接查询你的数据库
  • 集成 Figma 设计稿
  • 调用任何你自己开发的工具

工作原理:Claude Code ↔ MCP Server ↔ 外部服务

16.2 添加 MCP 服务器

bash
# 添加服务器(交互式)
claude mcp add <name> <command>

# 示例:添加 GitHub MCP 服务器
claude mcp add github npx -y @modelcontextprotocol/server-github

# 添加文件系统服务器
claude mcp add filesystem npx -y @modelcontextprotocol/server-filesystem /workspace

# 列出已配置的服务器
claude mcp list

# 查看某个服务器详情
claude mcp get github

# 移除服务器
claude mcp remove github

作用范围选项

bash
# 只对当前项目(写入 .claude/settings.json)
claude mcp add my-db --scope project -- node ./mcp-server.js

# 对当前用户所有项目(写入 ~/.claude/settings.json)
claude mcp add my-db --scope user -- node ./mcp-server.js

16.3 项目级 .mcp.json 配置

在项目根目录创建 .mcp.json,可以提交到 git 与团队共享:

json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
      "env": {}
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "${DATABASE_URL}"
      }
    }
  }
}

使用环境变量引用密钥

${ENV_VAR_NAME} 语法引用环境变量,避免把 API Key 直接写入配置文件。

HTTP 类型 MCP 服务器

json
{
  "mcpServers": {
    "my-api": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}",
        "Content-Type": "application/json"
      }
    }
  }
}

16.4 在会话中管理 MCP

/mcp                    查看所有 MCP 服务器的连接状态
/mcp                    也可以在这里完成 OAuth 授权(如 Google Drive)

16.5 热门 MCP 服务器

服务器安装命令功能
GitHubnpx @modelcontextprotocol/server-githubissue、PR、仓库操作
Filesystemnpx @modelcontextprotocol/server-filesystem扩展文件访问权限
PostgreSQLnpx @modelcontextprotocol/server-postgres数据库查询
SQLitenpx @modelcontextprotocol/server-sqliteSQLite 操作
Slacknpx @modelcontextprotocol/server-slack发送/读取消息
Puppeteernpx @modelcontextprotocol/server-puppeteer浏览器自动化
Google Drivenpx @modelcontextprotocol/server-gdrive文档读取
Notion社区提供页面读写
Linear社区提供工单管理
Figma社区提供设计稿读取

官方 MCP 服务器注册表:https://github.com/modelcontextprotocol/servers

16.6 开发自己的 MCP 服务器

MCP 服务器本质上是一个接受特定 JSON 格式输入、输出特定格式结果的进程。用任何语言实现都可以:

javascript
// Node.js 示例(简化版)
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

const server = new Server(
  { name: 'my-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
)

// 定义工具
server.setRequestHandler('tools/list', async () => ({
  tools: [{
    name: 'get_data',
    description: '从我们的内部 API 获取数据',
    inputSchema: {
      type: 'object',
      properties: {
        id: { type: 'string', description: '数据 ID' }
      },
      required: ['id']
    }
  }]
}))

// 实现工具
server.setRequestHandler('tools/call', async (request) => {
  if (request.params.name === 'get_data') {
    const data = await fetchFromInternalAPI(request.params.arguments.id)
    return { content: [{ type: 'text', text: JSON.stringify(data) }] }
  }
})

// 启动
const transport = new StdioServerTransport()
await server.connect(transport)

完整的 MCP 开发文档:modelcontextprotocol.io


下一步:配置文件详解

基于官方文档整理,持续更新