... Claude 快用你無敵的白金之星想想辦法..
MCP 運行背後圍繞著一個架構 (Client-Server Architecture),根據官方文件裡面主要有三個參與者:
圖片擷取自: https://modelcontextprotocol.io/docs/learn/architecture
閱讀到這邊讓我產生了蠻多個問題:
所以下面的內容會專注在解開上述的困惑
先條列大家熟悉的 MCP Host :
但重點還是它們為何能當 Host ,容我請 Claude 幫忙摘要 Host 基本功能:
- 實作 MCP 客戶端協議
- 支援 JSON-RPC 2.0 通訊
- 處理初始化握手
- 管理連線生命週期
- **建立傳輸層連線**
- stdio(標準輸入輸出)用於本地連線
- HTTP/SSE 用於網路連線
- WebSocket(如果支援)
- **具備呼叫 MCP 功能的能力**
- 發送 `tools/list` 和 `tools/call` 請求
- 處理 `resources/list` 和 `resources/read`
- 管理 prompts 和其他原語
好,先大概理解就好,現在先讓我們回頭看看 Client 跟 Server 的部分
MCP Client 跟 Server 的連線與資源架構是基於 MCP Protocol 所規範,而這個協議主要分為兩個層次:
主要支援兩種模式:
特點:
特點:
Data Layer 位於 Transport Layer 之上。
功能是定義 傳輸內容的格式與語意,確保不同 Host、Client、Server 在交換訊息時能彼此理解。
協定基礎:JSON-RPC 2.0
JSON-RPC 提供「request-response」與「notification」模式。
在 MCP 中,這些訊息會被拓展為「MCP primitives」。
Lifecycle management(生命週期管理)
初始化連線(handshake / capability negotiation)
關閉或重連的流程
Primitives 定義(MCP 核心能力)
Data Layer 定義了一系列可被 client/server 呼叫的基本「積木」,包含:
Tools
可執行的動作(類似 API endpoint)。
例:建立檔案、查詢資料庫、呼叫外部 API。
Resources
可存取的上下文資料。
例:檔案系統內容、紀錄檔、設定檔。
Prompts
可重複使用的 prompt 模板(帶參數)。
例:問答模板、翻譯模板。
Client primitives(由 client 提供的能力,讓 server 可以回呼)
Sampling:
Server 可以請求 host 的 LLM 進行推論補全。
例:server 提供一個「翻譯工具」,但要靠 host 的 LLM 幫忙產生文字。
Elicitation:
Server 向使用者互動請求輸入。
例:工具需要 API 金鑰時,彈窗讓使用者輸入。
Logging:
一對一連線
每個 server 會有一個獨立的 MCP client 實例。
確保「上下文」與「primitives」只屬於該連線,不互相干擾。
抽象化設計
Data Layer 不管傳輸用什麼(stdio 或 HTTP)。
它只在意「格式與語意正確」,由 Transport Layer 負責資料送達。
可以把 Data Layer 類比成 前端框架的 API 介面層:
Transport Layer = fetch / websocket → 負責傳送/接收資料。
Data Layer = axios interceptor / GraphQL schema → 負責定義資料格式與錯誤處理。
Tools / Resources / Prompts = 你呼叫的 API endpoint 或 hook。
明天目標是由我本人探索 MCP 相關的資安問題!
那麼,明天見。
-- to be continued --