Skip to content

11.4 MCP 工作原理

瞭解 MCP 的工作原理有助於更好地使用和除錯 MCP 伺服器,充分發揮其擴充套件能力。

MCP 架构

客户端-服务器模型

MCP 採用標準的客戶端-伺服器架構,實現了 Claude Code 與外部工具的解耦和通訊:

    bash


    ┌─────────────────┐         ┌─────────────────┐
    │   Claude Code   │         │  MCP 服务器     │
    │   (客户端)      │◄──────►│   (服务器)       │
    └─────────────────┘         └─────────────────┘
    │                           │
    │                           │
    └─────────┬─────────────────┘


    ┌──────────────┐
    │  外部服务    │
    └──────────────┘

### 组件说明

  1. **Claude Code (客户端)** :

     * 发起工具调用请求
     * 处理服务器响应
     * 管理服务器连接
     * 提供用户界面
  2. **MCP 服务器** :

     * 提供工具和资源
     * 执行工具调用
     * 返回结果
     * 处理错误
  3. **外部服务** :

     * 数据库(PostgreSQL、MySQL、MongoDB 等)
     * API(GitHub、AWS、Slack 等)
     * 文件系统(本地和远程)
     * 其他服务(CI/CD、监控、测试等)

## 通信流程

### 初始化流程
  1. 使用者啟動 Claude Code
  2. Claude Code 載入配置
  3. 自動連線已配置的 MCP 伺服器
  4. 發現可用工具和資源
  5. 準備接收使用者請求
### 工具调用流程

    bash


    1. 用户发起请求

    2. Claude Code 分析请求

    3. 选择合适的 MCP 工具

    4. 构建工具调用请求

    5. 发送到 MCP 服务器

    6. MCP 服务器执行工具

    7. 返回执行结果

    8. Claude Code 处理结果

    9. 返回给用户

### 错误处理流程

    bash


    1. 工具调用失败

    2. MCP 服务器捕获错误

    3. 构建错误响应

    4. 返回给 Claude Code

    5. Claude Code 显示错误

    6. 提供恢复建议

## 传输方式

### HTTP 传输

**特点** :


  * 基於 HTTP 協議
  * 支援遠端伺服器
  * 適合雲服務
  * 易於監控和除錯

**流程** :

    bash


    Claude Code → HTTP 请求 → MCP 服务器
              ↓              ↓
          HTTP 响应 ←      工具执行

**示例** :

    bash


    claude mcp add --transport http github https://api.githubcopilot.com/mcp/

**优势** :


  * 易於部署和擴充套件
  * 支援負載均衡
  * 適合雲服務整合
  * 跨平臺相容性好

**限制** :


  * 需要穩定的網路連線
  * 可能存在網路延遲
  * 需要處理超時和重試

### SSE 传输

**特点** :


  * 基於 Server-Sent Events
  * 支援實時更新
  * 已棄用,不建議使用

**注意** : SSE 傳輸已棄用,建議使用 HTTP 傳輸替代。

### stdio 传输

**特点** :


  * 基於標準輸入輸出
  * 本地程序通訊
  * 適合本地工具整合

**流程** :

    bash


    Claude Code → stdout → MCP 服务器
              ↓              ↓
          stdin ←          工具执行

**示例** :

    bash


    claude mcp add --transport stdio db -- npx -y @bytebase/dbhub

**优势** :


  * 無需網路連線
  * 低延遲響應
  * 安全性高(本地通訊)
  * 適合敏感資料操作

**限制** :


  * 僅限本地使用
  * 需要程序管理
  * 資源佔用較高
  * 不適合分散式系統

## 数据格式

### JSON-RPC

MCP 使用 JSON-RPC 2.0 協議進行通訊,這是一種輕量級的遠端過程呼叫協議。

**请求格式** :

    json


    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "tool_name",
        "arguments": {
          "param1": "value1"
        }
      }
    }

**响应格式** :

    json


    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Tool result"
          }
        ]
      }
    }

**错误格式** :

    json


    {
      "jsonrpc": "2.0",
      "id": 1,
      "error": {
        "code": -32601,
        "message": "Method not found"
      }
    }

}

    bash


    ### 工具定义
    MCP 服务器提供工具定义:

json

json
{ "tools": [ { "name": "query_database", "description": "Query the database", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "SQL query" } }, "required": ["query"] } } ] }


**資源定義**

MCP 伺服器提供資源定義:

    json


    {
      "resources": [
        {
          "uri": "database://users",
          "name": "Users Table",
          "description": "User data",
          "mimeType": "application/json"
        }
      ]
    }

## 状态管理

### 连接状态


MCP 伺服器有多種連線狀態:

**狀態檢查**

    bash


    # 检查 MCP 服务器状态
    /mcp

    # 输出示例
    MCP 服务器状态:
    - github: 已连接
    - sentry: 已连接
    - database: 连接错误


**重連機制**

MCP 伺服器支援自動重連:

    bash


    连接断开

    等待重试间隔

    尝试重连

    成功 → 已连接
    失败 → 继续重试

## 性能优化

### 连接池

MCP 使用連線池提高效能:

    bash


    ┌─────────────────┐
    │   连接池        │
    ├─────────────────┤
    │ 连接 1         │
    │ 连接 2         │
    │ 连接 3         │
    └─────────────────┘

**优势** :


  * 減少連線開銷
  * 提高響應速度
  * 支援併發請求

### 快取機制

MCP 支援結果快取:

    bash


    请求 → 检查缓存

    命中 → 返回缓存
    未命中 → 执行请求

    缓存结果

    返回结果

**缓存策略** :


  * 基於時間的過期
  * 基於大小的限制
  * 基於鍵的失效

### 批處理

MCP 支援批次操作:

    json


    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "batch_query",
        "arguments": {
          "queries": [
            "SELECT * FROM users LIMIT 10",
            "SELECT * FROM orders LIMIT 10"
          ]
        }
      }
    }

## 安全机制

### 身份验证

MCP 支援多種身份驗證方式:

  1. **OAuth 2.0** :

    bash


    Claude Code → OAuth 流程 → 访问令牌

    使用令牌访问

  1. **API 密钥** :

    bash


    Claude Code → API 密钥 → 服务器

  1. **证书** :

    bash


    Claude Code → 证书 → 服务器

### 加密传输

MCP 支援加密傳輸:

    bash


    Claude Code → 加密数据 → MCP 服务器

    解密数据

**支持的加密** :


  * TLS/SSL
  * 自定義加密

### 許可權控制

MCP 提供細粒度許可權控制:

    json


    {
      "permissions": {
        "tools": ["read", "write"],
        "resources": ["database://users"],
        "operations": ["query", "update"]
      }
    }

## 调试和监控

### 日志记录

MCP 伺服器記錄詳細日誌:

    bash


    # 启用详细日志
    claude --verbose

    # 日志示例
    [INFO] MCP server connected: github
    [DEBUG] Tool call: query_database
    [INFO] Tool result: 10 rows

## 性能监控

MCP 提供效能監控功能,幫助使用者瞭解工具呼叫的效率和質量。

    bash


    # 查看性能指标
    显示 MCP 性能统计

    # 输出示例
    MCP 性能统计:
    - github: 平均响应时间 100ms,成功率 98%
    - database: 平均响应时间 50ms,成功率 99.5%
    - sentry: 平均响应时间 200ms,成功率 95%

## 错误追踪

MCP 提供詳細的錯誤追蹤功能,幫助使用者定位和解決問題。

    bash


    # 查看错误日志
    显示 MCP 错误日志

    # 输出示例
    MCP 错误日志:
    - database: 连接超时 (3 次),最后一次 5 分钟前
    - github: API 限流 (1 次),最后一次 10 分钟前
    - sentry: 认证失败 (2 次),最后一次 15 分钟前

## 调试技巧

### 启用调试模式

    bash


    # 启用调试模式
    claude --debug-mcp

### 查看详细日志

    bash


    # 查看详细 MCP 日志
    claude --verbose

### 测试服务器连接

    bash


    # 测试 MCP 服务器连接
    /mcp test

基于 MIT 许可发布 | 永久导航