Skip to content

11.4 MCP 工作原理

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

MCP 架構

客戶端-伺服器模型

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

┌─────────────────┐         ┌─────────────────┐
│   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. 準備接收使用者請求

工具呼叫流程

1. 使用者發起請求

2. Claude Code 分析請求

3. 選擇合適的 MCP 工具

4. 構建工具呼叫請求

5. 發送到 MCP 伺服器

6. MCP 伺服器執行工具

7. 返回執行結果

8. Claude Code 處理結果

9. 返回給使用者

錯誤處理流程

1. 工具呼叫失敗

2. MCP 伺服器捕獲錯誤

3. 構建錯誤回應

4. 返回給 Claude Code

5. Claude Code 顯示錯誤

6. 提供恢復建議

傳輸方式

HTTP 傳輸

特點:

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

流程:

Claude Code → HTTP 請求 → MCP 伺服器
          ↓              ↓
      HTTP 回應 ←      工具執行

示例:

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

優勢:

  • 易於部署和擴展
  • 支援負載均衡
  • 適合雲服務整合
  • 跨平台相容性好

限制:

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

stdio 傳輸

特點:

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

流程:

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"
  }
}

工具定義

MCP 伺服器提供工具定義:

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 伺服器支援自動重連:

連接斷開

等待重試間隔

嘗試重連

成功 → 已連接
失敗 → 繼續重試

效能最佳化

連接池

MCP 使用連接池提高效能:

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

優勢:

  • 減少連接開銷
  • 提高回應速度
  • 支援並發請求

快取機制

MCP 支援結果快取:

請求 → 檢查快取

命中 → 返回快取
未命中 → 執行請求

快取結果

返回結果

快取策略:

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

批處理

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:
Claude Code → OAuth 流程 → 存取令牌

使用令牌存取
  1. API 密鑰:
Claude Code → API 密鑰 → 伺服器
  1. 憑證:
Claude Code → 憑證 → 伺服器

加密傳輸

MCP 支援加密傳輸:

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

最佳實踐

1. 合理配置

根據實際需求配置 MCP 伺服器,確保最佳效能和安全性。

2. 監控使用

定期監控 MCP 工具使用情況,識別效能瓶頸和最佳化機會。

3. 安全第一

確保 MCP 設定安全,保護敏感資料和資源。

4. 錯誤處理

妥善處理錯誤,提高系統可靠性和使用者體驗。