iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

30 天工程師雜學之旅系列 第 8

MCP-2 MCP 原理解析 — AI 如何「發現」與「使用」你的工具

  • 分享至 

  • xImage
  •  

1. 前言

在第一篇文章中,我們先從需求面談起,讓 QueryPal 具備了 MCP Server 的能力,AI 客戶端(例如 Copilot、Kiro、Claude Desktop)能夠「直接」調用我們的功能。但你可能會好奇:AI 究竟是怎麼知道我有哪些功能?又是怎麼知道要傳什麼參數、回傳什麼資料的?這篇就從實務角度拆解 MCP 的核心運作原理。


2. 什麼是 MCP(Model Context Protocol)

MCP,全名 Model Context Protocol,是一個讓 AI 與外部工具進行標準化互動的協定。它解決了兩個關鍵問題:

  1. 工具發現(Tool Discovery) — AI 如何「自動找到」可用的工具。
  2. 工具使用(Tool Invocation) — AI 如何根據規格正確調用工具。

與傳統 API 相比,MCP 多了「自描述(self-describing)」的能力——當 AI 連線到 MCP Server 時,它能自動取得所有工具清單、每個工具的用途說明、輸入/輸出參數格式,甚至是錯誤格式。

適用場景:

  • 讓 AI Agent 自動串接你的系統功能
  • 讓不同 AI 工具(Copilot、Kiro、Claude Desktop…)即插即用
  • 減少人類手動教 AI 如何使用 API 的步驟

3. 核心概念

MCP 的運作可以拆成幾個核心模組:

3.1 Tool Registry(工具登錄表)

  • MCP Server 維護的一份工具清單
  • 每個工具有唯一識別名稱、描述、標籤(tags)
  • 例如 QueryPal 的 list-collectionsgenerate-query

3.2 Schema Discovery(規格探索)

  • 每個工具都有輸入與輸出的 schema(通常用 JSON Schema 表示)
  • AI 可透過 MCP API 取得 schema
  • 這讓 AI 能自行推導應該傳哪些欄位、欄位型態、哪些必填

3.3 Execution(執行)

  • AI 根據 schema 組裝請求
  • MCP Server 執行對應邏輯
  • 回傳結果(或錯誤)給 AI

3.4 Metadata(中繼資料)

  • 包含版本、作者、支援的傳輸方式(HTTP、SSE)、驗證需求等

4. 與 AI Agent 的互動流程

flowchart

流程解讀:

  1. AI 與 MCP Server 建立連線(HTTP/SSE 或透過 mcp-remote)
  2. 取得工具清單(Tool Registry)
  3. 指定某工具並取得詳細 schema
  4. 按 schema 組裝請求並發送
  5. MCP Server 執行並回傳結果

5. 系統架構

根據官方「Concepts of MCP」說明(見參考連結),MCP 的高層結構包含:

  • Client(客戶端):LLM 代理或 IDE(如 Copilot、Kiro、Claude Desktop),實作 MCP client,能連線至一個或多個 MCP 伺服器。
  • Server(伺服器):以 MCP 介面公開工具(tools)、資源(resources)等能力,負責工具登錄、規格提供與執行。
  • Transport(傳輸層):HTTP(含 SSE)或 WebSocket;若需 OAuth/網路限制,可透過 mcp-remote 代理。
  • Capabilities Negotiation(能力協商):連線時交換支援能力(例如是否支援 resources、prompts、流式傳輸)。
  • Registry & Discovery(登錄與探索):客戶端列出工具與其 schema;可選擇暴露資源與 metadata。
  • Execution(執行):客戶端依 schema 構造參數請求執行,伺服器回傳成功結果或結構化錯誤。
  • Security(安全):驗證通常由伺服器或代理處理(如 OAuth/OIDC、API Key),MCP 訊息層保持中立。

Mermaid:系統關係與資料流

flowchart_arch

參考:Concepts of MCP(系統架構)https://modelcontextprotocol.io/docs/learn/architecture#concepts-of-mcp

6. 協定與詳細規格(部分重點)

MCP 採用 JSON-RPC 2.0 為基礎進行通訊,格式如下:

5.1 Tool List(工具清單)

{
  "jsonrpc": "2.0",
  "method": "tools/list",
  "params": {},
  "id": 1
}

回應範例:

{
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      {
        "name": "list-collections",
        "description": "List all MongoDB collections",
        "input_schema": {"type": "object", "properties": {}},
        "output_schema": {"type": "array", "items": {"type": "string"}}
      }
    ]
  },
  "id": 1
}

5.2 Tool Execution(工具執行)

{
  "jsonrpc": "2.0",
  "method": "tools/execute",
  "params": {
    "name": "generate-query",
    "arguments": {
      "collection": "users",
      "description": "Find all active users"
    }
  },
  "id": 2
}

參考資料:


7. 小結

MCP 讓 AI 不只是「讀懂你的 API 文件」,而是能「自己找到並用對工具」。在 QueryPal 的案例中,我們不需要額外寫一堆 Copilot 專用的封裝,只要一次實作 MCP,所有支援的 AI 工具都能直接使用。

下一篇,我會示範如何從零實作一個完整可運作的 MCP Server,讓你更清楚它的內部運作。


上一篇
MCP-1 從實務切入 — 為什麼需要 MCP
下一篇
MCP-3 用 FastAPI 打造 NASA API Baseline(為 MCP 整合做準備)
系列文
30 天工程師雜學之旅22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言