第 11 章 MCP 协议与集成

第 11 章 MCP 协议与集成


本章目标

  • 理解 MCP 协议的定位和架构
  • 掌握 MCP Server 的配置方法
  • 了解常用 MCP 工具及其应用
  • 了解自定义 MCP Server 的编写要点
  • 理解 MCP 使用的安全注意事项

11.1 MCP 概述

**MCP(Model Context Protocol,模型上下文协议)**是 Anthropic 提出的一种开放协议,用于标准化 AI 模型与外部工具、数据源之间的通信方式。

协议定位

flowchart LR subgraph AI 侧 A[Claude Code
Host] end subgraph 协议层 B[MCP Protocol] end subgraph 工具/数据侧 C[Filesystem Server] D[Database Server] E[API Server] F[自定义 Server] end A <-->|标准协议| B B <--> C B <--> D B <--> E B <--> F

为什么需要 MCP

在 MCP 之前,每个 AI 工具接入外部系统都需要单独开发适配器。MCP 的价值:

问题 MCP 的解决方案
每家 API 接入方式不同 统一的协议规范,一次编写到处使用
安全和权限各自实现 标准化的权限边界和沙箱模型
工具发现困难 Client 自动发现 Server 提供的能力
跨平台不兼容 协议层抽象,不绑定平台或语言

11.2 MCP 架构

flowchart TD subgraph Host A[Claude Code] end subgraph Client B[MCP Client
协议实现] end subgraph Transport C[stdio / HTTP] end subgraph Server D[Tools 工具定义] E[Resources 资源定义] F[Prompts 提示模板] end A --> B B <-->|Transport Layer| C C <--> D C <--> E C <--> F

核心概念

概念 说明
Host AI 应用本身(如 Claude Code)
Client MCP 协议的客户端实现,负责与 Server 通信
Server 提供工具/资源/提示的服务端
Tools Server 暴露的可调用功能(如"读取文件"、"执行 SQL")
Resources Server 暴露的数据资源(如"数据库表结构")
Prompts Server 提供的提示模板(如"帮我分析这个数据")
Transport 通信方式:stdio(标准输入输出)或 HTTP

11.3 配置 MCP Server

基本配置格式

settings.json 中通过 mcpServers 字段配置:

json 复制代码
{
  "mcpServers": {
    "server-name": {
      "command": "可执行命令",
      "args": ["参数1", "参数2"],
      "env": {
        "ENV_VAR": "value"
      }
    }
  }
}

配置示例

Filesystem Server --- 提供安全的文件系统访问

json 复制代码
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@anthropic-ai/mcp-server-filesystem", "/path/to/allowed/dir"]
    }
  }
}

Database Server --- 提供数据库查询能力

json 复制代码
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@anthropic-ai/mcp-server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://localhost:5432/mydb"
      }
    }
  }
}

常用 MCP Server

Server 功能 典型场景
filesystem 安全的文件系统读写 访问项目外的受限目录
database / postgres 数据库查询与探索 让 Claude Code 直接查询和分析数据库
brave-search 网页搜索 搜索技术文档和解决方案
memory 持久化记忆存储 跨会话的知识保存
github GitHub API 交互 管理 Issues、PRs 等
slack Slack 消息 发送通知或查询消息

💡 MCP Server 是进程级的,启动 Claude Code 时自动拉起。如果配置有误(命令路径错误、依赖缺失),启动时会在日志中看到错误提示。


11.4 自定义 MCP Server

基本原理

编写一个 MCP Server 就是实现 MCP 协议的一个程序。它通过 stdio 或 HTTP 与 Claude Code 通信。

核心接口

一个最简 MCP Server 需要实现:

接口 说明
ListTools 返回这个 Server 提供哪些工具及其参数定义
CallTool 处理工具调用请求,执行实际逻辑并返回结果

简单示例结构(概念代码)

一个查询天气预报的 MCP Server 的核心结构:

json 复制代码
// ListTools 返回的工具定义
{
  "tools": [
    {
      "name": "get_weather",
      "description": "获取指定城市的天气信息",
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "城市名称"
          }
        },
        "required": ["city"]
      }
    }
  ]
}

Server 收到 CallTool 请求时:

  1. 解析 tool name 和参数
  2. 调用实际的天气 API
  3. 返回结构化结果

💡 MCP Server 可以用任何语言编写(Python、Node.js、Go 等),只要能通过 stdio 收发 JSON-RPC 消息即可。Anthropic 提供了各语言的 SDK 简化开发。

测试你的 MCP Server

配置好 Server 后,在 Claude Code 中测试:

复制代码
请用 get_weather 工具查一下北京今天的天气。

如果配置正确,Claude Code 会自动发现该工具并调用它。


11.5 MCP 安全注意事项

权限边界

MCP Server 自身是一把双刃剑 ------ 它赋予了 Claude Code 访问外部系统的能力:

风险 缓解措施
Server 可访问的文件范围过大 filesystem Server 只授权必要的目录
数据库 Server 可能执行写操作 使用只读数据库用户连接
第三方 Server 的安全漏洞 审查 Server 源码,使用官方维护的 Server
HTTP Transport 暴露端口 使用 stdio Transport(默认),不用 HTTP

安全最佳实践

  1. 最小权限:Filesystem Server 只给必要的目录,Database Server 使用只读账号
  2. 敏感数据隔离:MCP Server 的 env 中不直接写密钥,使用环境变量引用
  3. 来源可信:优先使用 Anthropic 官方维护的 MCP Server
  4. 审计日志:通过 Hook 记录 MCP 工具调用(详见第 8 章)
flowchart TD A[Claude Code] -->|信任边界| B[MCP Server] B -->|外部系统| C[数据库] B -->|外部系统| D[文件系统] B -->|外部系统| E[第三方 API] style A fill:#4a9,stroke:#333 style B fill:#da4,stroke:#333 style C fill:#f88,stroke:#333 style D fill:#f88,stroke:#333 style E fill:#f88,stroke:#333

⚠️ MCP Server 扩展了 Claude Code 的能力边界。每增加一个 Server,就多一条通往外部系统的路径。只添加你真正需要的 Server,定期审查配置。


本章要点回顾

  • MCP 是 Anthropic 提出的开放协议,标准化 AI 与外部工具/数据的通信
  • 架构三层:Host (Claude Code)→ Client (协议实现)→ Server(工具/资源提供者)
  • Server 通过 settings.jsonmcpServers 字段配置,支持 stdio 和 HTTP 传输
  • 自定义 MCP Server 只需实现 ListToolsCallTool 两个核心接口
  • 安全底线:最小权限来源可信审计日志

← 上一章 | 下一章 →

相关推荐
hexu_blog1 小时前
前端vue后端java如何实现证件照功能
前端·javascript·vue.js
豹哥学前端1 小时前
前端 LocalStorage 实战:从入门到熟练,一篇就够了
前端·javascript·面试
Southern Wind1 小时前
谷记账——一个 Vue 3 批次记账 App
前端·javascript·vue.js
lzhdim2 小时前
SQL 入门 14:SQL 触发器与事件:自动化数据处理
linux·前端·数据库·sql·自动化
其实防守也摸鱼2 小时前
Sqlmap:选取sqli-labs中less-8进行sqlmap注入测试
前端·css·网络·安全·web安全·less·sqli-labs
伯远医学2 小时前
Nat. Methods | 邻近标记技术:活细胞中捕捉分子互作的新利器
java·开发语言·前端·javascript·人工智能·算法·eclipse
莪_幻尘2 小时前
一份 AGENTS.md,让 AI 代码规范率从 60% 飙升到 95%
前端·ai编程·cursor
秋秋20232 小时前
🐴 给 AI 套缰绳:一个前端项目的 AI Harness 实战记录
前端
卷帘依旧2 小时前
React Fiber介绍
前端