AI 技術觀點

Model Context Protocol MCP 是什麼?一次搞懂它在解決什麼問題

MCP 是一套通用接線標準,讓 AI 應用程式能接上外部的資料與工具。這頁用白話解釋它的三個角色、它提供的三種東西,以及 2026 年這次改版把什麼翻掉了。

依規格修訂版 2026-07-28 撰寫

01 — 一句話

MCP 讓任何 AI 應用程式,用同一種方式接上任何資料來源。

全名 Model Context Protocol,中文常譯作「模型上下文協定」。它由 Anthropic 在 2024 年提出,但從 2025 年 12 月起已經不屬於 Anthropic——協定捐給了 Agentic AI Foundation(Linux Foundation 旗下,與 Block、OpenAI 共同創立),現在由社群治理。

02 — 為什麼需要它

假設有 4 個 AI 應用程式,和 5 個你想接上的東西:Google Drive、GitHub、資料庫、Slack、公司內部 API。

沒有共通協定

4 × 5 = 20

每一組「應用程式 × 資料來源」都要各自寫一次。多一個應用程式就多 5 組,多一個資料來源就多 4 組。

有了共通協定

4 + 5 = 9

每個應用程式實作一次「怎麼當客戶端」,每個資料來源實作一次「怎麼當伺服器」。

這叫 N×M 問題,而 MCP 的全部價值就在這一句:任何 MCP 客戶端都能接上任何 MCP 伺服器。USB 是同一個故事——在它之前,每一種週邊都有自己的接頭。

03 — 三個角色

MCP 裡有三個角色。最多人搞混的是前兩個——大家說「MCP client」的時候,心裡想的通常是 Claude Desktop,但那是 host。

MCP 的三個角色 Host 內含三個 client,每個 client 各自連到一個 server。前兩個 server 在本機,第三個在遠端。資料庫畫在 server 外側,表示 server 是資料前面的中介。 HOST AI 應用程式 Client 1 Client 2 Client 3 Server A Server B Server C stdio(子行程) Streamable HTTP 你的資料
client 在 host 裡面,一個伺服器配一個。箭頭一律從 client 出發。
Host(宿主)
AI 應用程式本身。Claude Desktop、VS Code、Claude Code 都是 host。它握有模型、握有對話、決定權限。host 就是那個「應用程式」
Client(客戶端)
host 裡面的一個連接器,一個伺服器配一個。它不是應用程式,是應用程式內部的零件。VS Code 同時接兩個伺服器,就有兩個 client。
Server(伺服器)
對外提供工具與資料的程式。可以跑在你自己的機器上,也可以在遠端。它看不到你的對話,也看不到其他伺服器——這是刻意的設計。

04 — 伺服器提供什麼

伺服器提供三種東西。它們的差別不是「讀 vs 寫」——那是最常見的錯誤直覺。

真正的差別是誰決定要不要用它。下面三個情境,每一個的答案都不一樣:

答案:Resource — 由應用程式決定

你把一份文件拖進對話,或是 host 判斷「這個問題需要附上這個檔案」——決定權在應用程式手上,不在模型手上。模型只是收到了那份內容。

常見例子:檔案內容、git 歷史、資料庫 schema。

答案:Tool — 由模型決定

你說「幫我把這個 bug 開成一張票」,模型自己判斷要呼叫哪個功能、帶什麼參數。決定權在模型手上。

關鍵:一個唯讀的查詢也可以是 tool,只要是模型自己決定要不要查。所以「讀 = resource、寫 = tool」是錯的。

答案:Prompt — 由使用者決定

你從選單挑一個「程式碼審查」,或打一個斜線指令。決定權在手上——模型不會自己跑去用它。

常見例子:斜線指令、範本選單。

├─ 三個情境的差別只有一個:誰按下決定鍵。

05 — 它怎麼傳輸

兩種標準方式:stdio——伺服器是一個子行程,透過標準輸入輸出溝通;與 Streamable HTTP——每則訊息是一個 HTTP POST。這是「怎麼傳」的差別,不是「在哪裡」的差別:一個跑在你自己機器上的伺服器,一樣可以講 Streamable HTTP。

值得知道的是兩者的安全性完全不同:stdio 直接繼承你的使用者權限、沒有驗證層;HTTP 那條需要 OAuth、需要驗證來源。另外,「本機伺服器」指的是「跑在你機器上」,跟它會不會連外網無關——本機伺服器一樣可以去打遠端 API。

06 — 這一版變了什麼

伺服器現在什麼都不記得。

2026-07-28 是 MCP 問世以來最大的一次改版,而且是破壞性的。以前客戶端要先跟伺服器「握手」建立連線,之後雙方記得彼此。現在沒有握手、沒有連線階段——每一個請求都自己帶著版本與身分,伺服器處理完就忘記。

方向也改了:伺服器不會回頭問你問題。它會回一個「我需要這個資訊」然後結束這次請求,由客戶端拿到答案後重新發一次

你在別處看到這些,代表那份資料已經過期

  • ├─ initialize 握手
  • ├─ Mcp-Session-Id 標頭、協定層的 session
  • ├─ 伺服器主動送出一個請求給客戶端
  • └─ pinglogging/setLevel 這兩個方法

第三項要講清楚,因為它最容易被誤讀成「伺服器再也不能要東西了」。消失的是「主動送出請求」這個機制,不是伺服器提出要求的能力。以前伺服器可以直接推一個請求過來;現在它只能在回應裡說「我需要這個」然後結束,剩下的由客戶端接手。

所以那些「伺服器向客戶端要東西」的功能都還在,只是換了條路走——包括 Elicitation(跟使用者要一項資訊)與 Sampling(借用 host 的模型;方向與直覺相反,所以特別多人誤解)。

另外一件事跟上面無關:Roots(告訴伺服器你的工作目錄範圍)、SamplingLogging 這三樣被標記為淘汰。它們現在還能用,但別當成現行架構學。淘汰與上面那個機制改變是兩回事:一個講「怎麼傳」,一個講「還要不要留著」。

07 — 本頁對應哪一版

MCP 的版號就是日期。它標示的是「最後一次做出破壞性變更的日子」,不是發布週期。所以你手上任何一份 MCP 資料,看它對應哪個日期就知道新不新——這是這頁最值得你帶走的一件事

2024-11-05 → 2025-03-26 → 2025-06-18 → 2025-11-25 → 2026-07-28

有時效的說法

  • 上一節「這一版變了什麼」只對 2026-07-28 成立。
  • 三個被標記淘汰的功能,最早要到 2027-07-28 之後的某一版才會真的移除。
  • 協定不再需要連線階段 ≠ 現實中的伺服器都無狀態了。大量已部署的伺服器仍在講舊版,這個落差會持續一段時間。