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
  • ├─ 伺服器主動送出一個請求給客戶端
  • └─ ping、logging/setLevel 這兩個方法

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

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

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

07

本頁對應哪一版

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

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

有時效的說法

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