MCP 是什麼:AI 的 USB-C
在 Agent 原理單元,工具是寫死在你自己的程式裡的。MCP 是一個開放標準,讓工具寫一次就能接到各種 AI App。這堂課用白話認識它的三個角色、三種能力,並把一個現成的 MCP Server 接進 Claude Code。
歡迎來到高階單元。先恭喜你走到這裡:你已經從零寫過 Agent 迴圈,知道工具其實就是一份「說明書」加上一段你自己執行的程式。
不過,你可能已經發現一件有點麻煩的事。上個單元寫的 read_file、list_files,只活在你那支 agent.py 裡。如果明天你想在 Claude Desktop 裡也能用同樣的工具,或是想讓 Claude Code 讀你公司的資料庫,就得在每個地方重新接一次。
這堂課要介紹的 MCP,就是為了解決這個問題而生的。這堂課不寫程式,先把觀念打穩;下一堂我們就親手寫一個。
為什麼需要一個「標準」
想像一下充電線還沒統一的年代:每支手機一種插頭,出門要帶一整袋線。後來大家都改用 USB-C,一條線就能充手機、筆電、耳機。
AI 工具也遇過一樣的處境:
沒有標準時,每個 App 都要替每個工具各寫一份整合;有了 MCP,雙方只要各自「支援 MCP」一次。
MCP(Model Context Protocol,模型上下文協定) 是 Anthropic 在 2024 年底提出的開放標準,規定「AI App」和「提供工具或資料的程式」之間要怎麼對話。現在 Claude Desktop、Claude Code,以及 ChatGPT、Cursor、VS Code 的 GitHub Copilot 等許多工具都支援它。
「協定」聽起來很硬,其實就是一份大家都同意遵守的對話規則。就像寄信要寫郵遞區號、地址、收件人,格式統一了,任何郵差都送得到。
三個角色:Host、Client、Server
Host 是你用的 App,Client 是 App 裡的插座,Server 是插上去的裝置。
| 角色 | 白話說明 | 例子 |
|---|---|---|
| Host(主機) | 你正在使用、裡面有 AI 模型的 App | Claude Desktop、Claude Code |
| Client(用戶端) | Host 裡負責和一個 Server 連線的元件,你通常看不到它 | Claude Code 每接一個 Server,就開一個 Client |
| Server(伺服器) | 一個小程式,把某種能力用 MCP 的格式提供出來 | 讀書筆記、行事曆、GitHub、資料庫 |
「Server」這個字可能會嚇到你,好像要租一台機器。其實大多數 MCP Server 就是你電腦上的一支小程式,由 Host 在需要時啟動,下一堂課你寫的那支就是。
Server 能提供的三種能力
一個 MCP Server 可以提供三種東西。差別在於:由誰決定什麼時候用它。
| 能力 | 是什麼 | 誰決定使用 | 例子 |
|---|---|---|---|
| Tools 工具 | 可以被呼叫、會做事的函式 | 模型自己判斷 | 搜尋筆記、新增行事曆 |
| Resources 資源 | 可以讀取的資料,像檔案 | App 或使用者挑選後附加進對話 | 書單、某份文件的內容 |
| Prompts 提示範本 | 預先寫好的提示詞範本 | 使用者主動挑選 | 「幫我寫讀後心得」範本 |
Tools 就是你在上個單元寫的工具,一樣有名稱、說明、參數規格,模型讀了說明書後自己決定要不要用。這也是最常用、最先該學的一種,這個單元會以它為主。
Resources 和 Prompts 比較像「讓使用者方便」的功能:例如在 Claude Code 裡,Server 提供的 Prompts 會變成可以用 / 叫出來的指令。
它們怎麼對話
MCP 的訊息是一種叫 JSON-RPC 的格式,就是「用 JSON 寫的請求和回應」。你不需要背,但看一眼會很有幫助。Host 一連上 Server,會先問:「你有哪些工具?」Server 回答的內容大概長這樣:
{
"tools": [
{
"name": "search_notes",
"description": "用關鍵字搜尋讀書筆記,回傳符合的書名與內容。",
"inputSchema": {
"type": "object",
"properties": {
"keyword": { "type": "string" }
},
"required": ["keyword"]
}
}
]
}
是不是很眼熟?這幾乎就是你在「定義工具」那堂課寫的工具說明書:name、description、加上 JSON Schema 的參數規格。
訊息要透過某種管道傳送,MCP 稱為 transport(傳輸方式),常見的有兩種:
- stdio(標準輸入輸出):Server 在你的電腦上,Host 直接把它當成子程式啟動,雙方透過「文字輸入、文字輸出」傳訊息。設定最簡單,適合個人使用。
- HTTP(Streamable HTTP):Server 在網路上的某台主機,Host 透過網址連線。適合公司或服務商提供給很多人共用。
跟 Agent 迴圈是什麼關係
這是最重要的一段。MCP 沒有取代你學過的 Agent 迴圈,它只是把「工具從哪裡來、怎麼執行」標準化了:
- Host 啟動時,向每個 Server 要工具清單(
tools/list)。 - Host 把這些工具轉成模型看得懂的格式,放進每次呼叫的
tools參數。 - 模型回傳
tool_use,Host 不是自己執行,而是轉給對應的 Server(tools/call)。 - Server 執行後回傳結果,Host 包成
tool_result交回給模型。
換句話說,上個單元你在 run_tool 裡寫的那段 if name == "read_file",現在被搬到一個獨立的程式裡,而且任何支援 MCP 的 App 都能來用它。
先接一個現成的 Server 試試看
在自己寫之前,先體驗一下「插上去就能用」的感覺。我們用官方提供的檔案系統 Server,讓 Claude Code 可以讀寫一個指定的資料夾。這個 Server 需要 Node.js(裡面附帶 npx 指令),如果還沒裝,可以先到 Node.js 官網安裝長期支援版。
先建立一個測試用資料夾,例如 C:/Users/你的名字/mcp-test,放一兩個文字檔進去。接著在終端機執行:
claude mcp add --transport stdio files -- npx -y @modelcontextprotocol/server-filesystem C:/Users/你的名字/mcp-test
拆開來看:
files:你替這個 Server 取的名字。--前面是 Claude Code 自己的選項,--後面是「啟動 Server 的指令」,會原封不動地交給 Server。- 最後的路徑是允許它存取的資料夾。只放一個測試資料夾,不要放整個使用者目錄。
確認有接上:
claude mcp list
看到 files 後面標示已連線就成功了。接著打開 Claude Code,輸入 /mcp 可以看到這個 Server 提供了哪些工具。試著問它:「用 files 這個工具,列出測試資料夾裡有哪些檔案。」第一次使用時,Claude Code 會先詢問你是否允許,這是正常的安全確認。
Claude Desktop 也能接 MCP Server,是透過一份叫 claude_desktop_config.json 的設定檔,下一堂課會示範。
你可能會卡在這裡
npx找不到:代表 Node.js 還沒裝好,或裝完後終端機沒有重開。claude mcp list顯示連線失敗:通常是--後面的指令打錯,或資料夾路徑不存在。可以用claude mcp remove files刪掉後重新加一次。- Claude 沒有用這個工具:在提問裡直接點名「用 files 工具」,或先用
/mcp確認工具真的有出現。
我剛學到 MCP 的 Host、Client、Server,以及 Tools、Resources、Prompts 三種能力。請用「餐廳」來比喻這六個概念,各用一句話說明,最後再舉一個我日常工作中可能用得到的 MCP Server 點子。
- 用自己的話,向一位朋友(或對著 AI)解釋:為什麼 MCP 被比喻成 USB-C?
- 照著上面的步驟,把檔案系統 Server 接到 Claude Code,指定一個測試資料夾。
- 在 Claude Code 輸入
/mcp,記下這個 Server 提供了哪幾個工具,挑一個看它的說明寫了什麼。 - 請 Claude 在測試資料夾裡新增一個
hello.txt,觀察它在動手前有沒有先問你。 - 想一想:如果你要寫一個自己的 MCP Server,你最想讓 AI 幫你存取什麼?寫下一個點子,下一堂課就用得到。
讀完了嗎?
標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。
留言與討論
卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。