MCP/Agent

MCP, Agent

MCP

基本介紹

MCP 全名為 Model Context Protocol,由 Anthropic 於 2024 年底所提出的。用意是希望能標準化 LLM 與其他系統間的通訊

MCP框架會有下列項目:

  • MCP host (MCP 主機)

    • 執行 MCP Client 的環境
    • 載入 MCP CLient,橋接到 Server
    • 白話:讓 AI 活起來,提供介面讓我跟 AI 對話的軟體 (vscode, cursor, antigravity …)
  • MCP Client (MCP 客戶端)

    • 管理主機與伺服器之間的連接
    • 代表使用者或應用程式,發出需求與任務
  • MCP Server (MCP 伺服器)

    • 輕量級程式
    • 能力提供者 (工具箱的概念),他真正連到外部資源 (調用 API、資料庫…)
    • 定義可以使用的工具 (tools),讓Agent or Client 可以呼叫
  • Agent (代理/ AI 模型)

    • 大腦角色 (通常是 LLM)
    • 能讀懂 Client 的要求,決定調用那些工具
    • 扮演指揮者角色,協調 Client 需求與 Server 的能力

MCP 互動流程

  • MCP Client & Server 的互動流程

    1. Initialize: MCP Client 與 MCP Server 建立連線 (HTTP/SSE 或透過 mcp-remote),連線成功後,Server 處於待命狀態

    2. Tool Discovery:Client 發送 tools/list 的請求給 Server

    3. MCP Server 收到 tools/list 請求後會回傳所有工具的清單,包含每個工具的 schema (JSON, include description, parameters, …) (所以這時 Client 會有 MCP server 工具箱內所有的使用說明)

    4. 若要呼叫某個工具, MCP Client 發送執行請求給 Server

    5. MCP Server 執行指定工具 (tools/call) 後回傳結果

  • 舉例說明

    1. 我對 agent 輸入:今天天氣如何?

    2. agent 會去看 client 的工具清單,決定要用工具還是能自行回答,然後 agent 發現 client 有提供 get_weather 這個工具。接著 agent 會請這個 client 去調用這個工具

    3. client 收到任務後,找到提供 get_weather 這項工具的 server,接著請該 server 使用這個工具 (把需求打包成 MCP 標準格式,透過網路發送給遠端 Server)

    4. server 收到請求後,會去執行 (背後邏輯是去打中央氣象署的氣象 API),得到結果後回傳給 client

    5. client 收到結果,轉交給 agent

    6. agent 拿到結果,潤飾之後,呈現在畫面上給我看:台北今天天氣很好,氣溫大約 25°C,是個適合出門的晴天喔!

      :之所以要透過 agent 呈現的原因是,回傳結果可能是一串結構化的資料,要在透過 agent 組織成語句之後再呈現。

  • MCP 架構

mcp_arc

這張圖說明了 MCP 的架構,可以看到 一個 Host 是可以啟動多個 client 的,而 server 可以是在本地端,也能是在雲端,server 本身可能具有多項工具,通常是一個 client 配一個 server,但有時會因為有併發處理的需求,所以會開啟多個 client instance。

一個 server 內部會有三項東西,Resources, Tools, Prompts

  • Resource 靜態資源
  • Tools 動態功能,如圖中的 MCP Server2 就有 全台各縣市天氣預報、台北市各鄉鎮天氣預報、高雄市各鄉鎮天氣預報三種工具 (提供給 agent 的可執行函數)
  • Prompts 提示詞,預設好的提示詞,讓 Agent 更容易學會如何使用這些資料。Prompts 是給 Agent 的「腦補說明書」(告訴它拿到資料後,應該怎麼思考、怎麼回話)。

這三項東西,都會在 client 跟 server 連線之後,回傳給 client,所以 agent 可以在收到使用者輸入的內容後,理解語意將關鍵字取出,寫成指令,再透過 client 傳給 server 做處理。

圖片右側定義了 MCP 運作的兩個維度

  1. Transport Layer 傳輸層
  • 作用:定義 client server 之間如何握手和傳遞訊息。
  • 兩大機制:
    • stdio transport:用於本地端 server,透過電腦內部的標準輸入輸出來對話 (因為在本地端傳輸,所以不需要走網路協議,安全且快速)
    • streamable HTTP transport :用於遠端 server,透過網路進行即時且連續的資料傳輸 (SSE (Server-Sent-Events) 是一種長連線,client連上線後,server 會保持連線不中斷,像串流一樣不斷把訊息傳給 client。算是一種 HTTP 協定的延伸,通常走80/443,底層仍是 TCP。)
  1. Data Layer 數據層
  • 作用:定義對話的語言格式 (基於 JSON-RPC)
  • 核心內容:規定了 server 應該如何定義 Resources、Tools、Prompts
  • 數據層的溝通語言:JSON-RPC 2.0
    • 當 Client 問你「你有什麼工具、資源和提示詞」時,你的 Server 應該回傳這樣的 JSON 結構:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  {
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "capabilities": {
      "tools": {},
      "resources": {},
      "prompts": {}
    },
    "tools": [
      {
        "name": "工具名稱 (例如: add_expense)",
        "description": "描述這個工具是幹嘛的,讓 AI 知道何時呼叫",
        "inputSchema": {
          "type": "object",
          "properties": {
            "參數A": { "type": "string", "description": "描述參數" },
            "參數B": { "type": "number", "description": "描述參數" }
          },
          "required": ["參數A"]
        }
      }
    ],
    "resources": [
      {
        "uri": "自定義URI (例如: wealthwise://reports/daily)",
        "name": "資源名稱",
        "description": "描述這個資料內容",
        "mimeType": "application/json"
      }
    ],
    "prompts": [
      {
        "name": "範本名稱 (例如: analyze-budget)",
        "description": "描述這個 SOP 是做什麼分析用的",
        "arguments": [
          { "name": "month", "description": "月份", "required": true }
        ]
      }
    ]
  }
}

Agent

基本介紹

Agent 通常泛指 LLM (Claude, Gemini, Gpt …),在 MCP 中通常扮演三個角色:翻譯官、決策者、分析師

  • 核心能力
  1. 意圖識別 使用者說的是「人話」,而 Server 只聽得懂「參數」 所以需要將輸入做拆解

    舉例:你對 WealthWise 說:「昨天買宵夜噴了 200 塊。」

    Agent 的工作: 它會從這句話分析出:

    • 動作: 新增支出 (add_expense)。

    • 金額: 200。

    • 分類: 餐飲(宵夜自動對應到餐飲)。

    • 備註: 宵夜。

  2. 工具選用與路徑規劃

    面對複雜問題,它會決定呼叫工具的先後順序

    舉例: 「幫我看看我現在的存款夠不夠買這台 $50,000 的筆電?」

    Agent 的決策路徑:先呼叫 get_balance 工具拿到餘額(假設是 $45,000)。

    大腦進行運算:$45,000 < 50,000$。

    得出結論:不夠。

  3. 資料整合與人話回傳

    Server 回傳的通常是乾燥的 JSON 數據,Agent 負責賦予它溫度。

    舉例: Server 回傳: {“status”: “success”, “new_balance”: 45000}

    Agent 的回覆: 「沒問題!已經幫你記下這筆 200 元的宵夜費了。目前剩餘預算還有 $45,000,這個月在餐飲上花得有點多,要稍微注意喔!」

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy