Skip to content

MCP 概述

Understanding the Model Context Protocol and Its Role in Claude Code

Model Context Protocol(MCP)是 Anthropic 于 2024 年底推出的一项开放协议,旨在为 AI 模型提供一种标准化的方式来连接外部工具、数据源和服务。在 Claude Code 中,MCP 扮演着桥梁的角色,让 Claude 能够突破纯文本交互的限制,直接与真实世界的系统进行交互。


什么是 MCP

What is the Model Context Protocol

MCP 的全称是 Model Context Protocol,直译为「模型上下文协议」。它定义了一套标准的通信规范,使得 AI 模型(如 Claude)能够:

  • 调用外部工具执行操作(如搜索网页、操作数据库、管理文件)
  • 读取外部数据源获取上下文信息
  • 使用预定义的提示模板来完成特定任务

简单来说,MCP 就像是 AI 世界的「USB 接口」——只要设备(MCP 服务器)遵循统一的协议标准,就能即插即用地与任何支持 MCP 的 AI 客户端连接。

传统方式:每个 AI 应用需要为每个服务编写专用集成代码
AI App A ──── 自定义代码 ──── GitHub
AI App A ──── 自定义代码 ──── Slack
AI App B ──── 自定义代码 ──── GitHub  (重复工作)

MCP 方式:统一协议,一次实现,处处可用
AI App A ──┐                ┌── GitHub MCP Server
AI App B ──┤── MCP 协议 ────┤── Slack MCP Server
AI App C ──┘                └── DB MCP Server

核心价值

Core Value Proposition

特性传统 API 集成MCP 集成
协议标准各自定义统一标准
开发成本每次重新开发一次开发,多处复用
发现机制需要文档自描述能力
安全模型各自实现内置权限管理
社区生态碎片化统一生态

MCP 的设计理念

Design Philosophy of MCP

MCP 的设计基于以下几个核心原则:

1. 开放与标准化

Open and Standardized

MCP 是完全开源的协议规范。任何人都可以实现自己的 MCP 服务器或客户端,无需 Anthropic 的授权。协议规范托管在 GitHub 上,接受社区贡献。

2. 安全优先

Security First

MCP 内置了多层安全机制:

  • 能力声明:服务器必须声明它能提供的所有工具和资源
  • 用户确认:敏感操作(如写入文件、执行命令)需要用户明确授权
  • 作用域隔离:不同 MCP 服务器之间相互隔离,不能访问彼此的数据
json
{
  "tools": [
    {
      "name": "read_file",
      "description": "读取指定路径的文件内容",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "文件的绝对路径"
          }
        },
        "required": ["path"]
      }
    }
  ]
}

3. 可组合性

Composability

多个 MCP 服务器可以同时连接到一个客户端,Claude Code 可以根据任务需要,自动选择合适的工具组合来完成复杂任务。

4. 传输无关性

Transport Agnostic

MCP 不绑定特定的传输方式。无论是本地进程通信还是远程 HTTP 调用,都使用相同的消息格式。


架构图解

Architecture Overview

MCP 采用经典的客户端-服务器架构。在 Claude Code 的场景中,架构如下:

┌─────────────────────────────────────────────────────┐
│                    Claude Code (客户端)                │
│                                                       │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐              │
│  │ MCP     │  │ MCP     │  │ MCP     │              │
│  │ Client 1│  │ Client 2│  │ Client 3│   ...        │
│  └────┬────┘  └────┬────┘  └────┬────┘              │
│       │             │             │                   │
└───────┼─────────────┼─────────────┼───────────────────┘
        │ stdio       │ SSE         │ Streamable HTTP
        ▼             ▼             ▼
  ┌──────────┐  ┌──────────┐  ┌──────────┐
  │ 本地 MCP │  │ 远程 MCP │  │ 云端 MCP │
  │ Server   │  │ Server   │  │ Server   │
  │(文件系统) │  │ (Exa)    │  │(数据库)   │
  └──────────┘  └──────────┘  └──────────┘
        │             │             │
        ▼             ▼             ▼
   本地文件       Exa 搜索 API   PostgreSQL

通信流程

Communication Flow

一次典型的 MCP 交互流程如下:

  1. 初始化:Claude Code 启动 MCP 服务器进程(或连接远程服务器)
  2. 能力发现:客户端请求服务器的能力列表(工具、资源、提示)
  3. 工具调用:用户提出请求,Claude 决定调用某个 MCP 工具
  4. 执行与返回:MCP 服务器执行操作,将结果返回给 Claude
  5. 结果整合:Claude 将工具返回的结果整合到回复中
用户: "帮我搜索最新的 React 19 特性"

Claude Code                    Exa MCP Server              Exa API
    │                              │                          │
    │──── tools/call ─────────────>│                          │
    │     {name: "search",         │                          │
    │      query: "React 19"}      │──── HTTP Request ───────>│
    │                              │                          │
    │                              │<─── Search Results ──────│
    │<─── tool result ────────────│                          │
    │     {results: [...]}         │                          │
    │                              │                          │

Claude: "根据搜索结果,React 19 的主要新特性包括..."

三种传输类型

Three Transport Types

MCP 支持三种传输机制,适用于不同的部署场景:

1. stdio(标准输入输出)

Standard I/O Transport

最常用的本地传输方式。Claude Code 将 MCP 服务器作为子进程启动,通过标准输入(stdin)和标准输出(stdout)进行通信。

bash
# 典型的 stdio MCP 服务器启动方式
claude mcp add my-server -- node /path/to/server.js
claude mcp add python-tool -- python3 /path/to/server.py
claude mcp add npx-tool -- npx -y @anthropic/some-mcp-server

适用场景

  • 本地开发工具(文件系统、Git 操作)
  • 不需要网络访问的工具
  • 需要访问本地资源的场景

优点:启动快、延迟低、无需网络配置、安全性高

2. SSE(Server-Sent Events)

Server-Sent Events Transport

基于 HTTP 的单向流式传输,适用于远程 MCP 服务器。

bash
# 连接远程 SSE MCP 服务器
claude mcp add --transport sse remote-server https://mcp.example.com/sse

适用场景

  • 远程托管的 MCP 服务
  • 需要通过网络访问的 API 集成
  • 团队共享的 MCP 服务器

3. Streamable HTTP

Streamable HTTP Transport

MCP 协议的最新传输类型,结合了 HTTP 的通用性和流式传输的高效性。

bash
# 连接 Streamable HTTP MCP 服务器
claude mcp add --transport http remote-server https://mcp.example.com/mcp

适用场景

  • 现代云端 MCP 服务
  • 需要双向流式通信的场景
  • 对性能要求较高的远程服务

传输类型对比

Transport Type Comparison

特性stdioSSEStreamable HTTP
部署位置本地本地/远程本地/远程
启动方式子进程HTTP 连接HTTP 连接
通信方向双向服务器推送双向
延迟极低中等
安全性高(本地)需 HTTPS需 HTTPS
适用场景本地工具远程服务云端服务
协议版本所有版本早期版本最新版本

MCP 提供的能力类型

Capability Types Provided by MCP

MCP 服务器可以向客户端提供三种类型的能力:

Tools(工具)

Tools — Executable Actions

工具是 MCP 最核心的能力。它们代表 AI 可以执行的具体操作,例如搜索网页、读写文件、查询数据库等。

json
{
  "name": "execute_query",
  "description": "执行 SQL 查询并返回结果",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sql": {
        "type": "string",
        "description": "要执行的 SQL 语句"
      },
      "database": {
        "type": "string",
        "description": "目标数据库名称"
      }
    },
    "required": ["sql"]
  }
}

Resources(资源)

Resources — Contextual Data

资源允许 MCP 服务器向 AI 提供额外的上下文数据。资源可以是文件内容、数据库 schema、API 文档等。

json
{
  "uri": "db://schema/users",
  "name": "Users 表结构",
  "mimeType": "application/json",
  "description": "users 表的完整 schema 定义"
}

Prompts(提示)

Prompts — Reusable Templates

提示是预定义的交互模板,帮助用户更高效地使用特定 MCP 服务器的功能。

json
{
  "name": "code_review",
  "description": "对指定代码进行审查",
  "arguments": [
    {
      "name": "language",
      "description": "编程语言",
      "required": true
    },
    {
      "name": "code",
      "description": "待审查的代码",
      "required": true
    }
  ]
}

与传统 API 集成的区别

Differences from Traditional API Integration

为了更好地理解 MCP 的价值,我们将它与传统的 API 集成方式进行对比:

传统 API 集成

python
# 传统方式:每个服务需要单独编写集成代码
import requests

class GitHubClient:
    def __init__(self, token):
        self.token = token
        self.base_url = "https://api.github.com"

    def create_issue(self, repo, title, body):
        response = requests.post(
            f"{self.base_url}/repos/{repo}/issues",
            headers={"Authorization": f"token {self.token}"},
            json={"title": title, "body": body}
        )
        return response.json()

# AI 应用需要硬编码每个 API 的调用逻辑
# 每个新服务都需要重新开发

MCP 集成

python
# MCP 方式:标准化的工具声明和调用
# 服务器只需声明能力,客户端自动发现和使用

# MCP 服务器端
@server.tool()
async def create_issue(repo: str, title: str, body: str) -> str:
    """在 GitHub 仓库中创建新 Issue"""
    # 实现逻辑...
    return f"Issue #{issue_number} 已创建"

# Claude Code 自动发现并使用这个工具
# 无需任何额外的集成代码

核心差异总结

维度传统 API 集成MCP 集成
集成方式硬编码 API 调用声明式工具发现
新服务接入需要开发即插即用
AI 理解能力需要手动描述自描述工具 Schema
错误处理各自实现协议层统一处理
权限管理各自实现协议内置
可复用性

MCP 生态系统现状

Current State of the MCP Ecosystem

截至目前,MCP 生态系统已经形成了相当规模的社区和工具链。

官方资源

  • 协议规范modelcontextprotocol.io — 完整的协议文档
  • 官方 SDK:TypeScript SDK、Python SDK、Java SDK、C# SDK
  • 官方服务器:Anthropic 维护的参考实现

社区生态

MCP 社区正在快速发展,涵盖以下领域的服务器实现:

领域代表性服务器说明
搜索引擎Exa、Brave SearchAI 友好的网络搜索
设计工具Figma (Framelink)设计稿解析与转换
代码管理GitHub、GitLab代码仓库操作
数据库PostgreSQL、MySQL、SQLite数据库查询与管理
文件系统Filesystem MCP本地文件操作
浏览器Puppeteer、Playwright浏览器自动化
通信协作Slack、Discord团队消息通知
监控Sentry错误追踪与监控
文档Context7、Notion文档检索与管理
云服务AWS、GCP云资源管理

支持 MCP 的客户端

除了 Claude Code 之外,越来越多的 AI 工具开始支持 MCP:

  • Claude Desktop — Anthropic 的桌面应用
  • Claude Code — 命令行开发工具(本文主角)
  • Cursor — AI 代码编辑器
  • Windsurf — AI 开发环境
  • Continue — 开源 AI 编码助手
  • 其他第三方 AI 应用

开发者工具

MCP 也有丰富的开发者工具支持:

bash
# MCP Inspector — 用于调试 MCP 服务器的可视化工具
npx @anthropic/mcp-inspector

# 创建新的 MCP 服务器项目
npx create-mcp-server my-server

# Claude Code 内置的调试命令
claude mcp serve     # 以 MCP 服务器模式运行 Claude Code

小结

Summary

MCP 代表了 AI 与外部系统集成的一个重要范式转变。通过标准化的协议,它解决了传统 API 集成中的碎片化问题,让 AI 工具能够更加灵活、安全地与各种外部服务进行交互。

在接下来的章节中,我们将深入探讨如何在 Claude Code 中配置 MCP 服务器、常用的 MCP 服务推荐,以及实际应用案例。

下一步:阅读 MCP 配置 了解如何在 Claude Code 中设置 MCP 服务器。