所有入門單元免費開放 · 課程內容持續更新中

MCP 是什麼:AI 的 USB-C

在 Agent 原理單元,工具是寫死在你自己的程式裡的。MCP 是一個開放標準,讓工具寫一次就能接到各種 AI App。這堂課用白話認識它的三個角色、三種能力,並把一個現成的 MCP Server 接進 Claude Code。

第 13.1 堂約 13 分鐘

歡迎來到高階單元。先恭喜你走到這裡:你已經從零寫過 Agent 迴圈,知道工具其實就是一份「說明書」加上一段你自己執行的程式。

不過,你可能已經發現一件有點麻煩的事。上個單元寫的 read_file、list_files,只活在你那支 agent.py 裡。如果明天你想在 Claude Desktop 裡也能用同樣的工具,或是想讓 Claude Code 讀你公司的資料庫,就得在每個地方重新接一次。

這堂課要介紹的 MCP,就是為了解決這個問題而生的。這堂課不寫程式,先把觀念打穩;下一堂我們就親手寫一個。

為什麼需要一個「標準」

想像一下充電線還沒統一的年代:每支手機一種插頭,出門要帶一整袋線。後來大家都改用 USB-C,一條線就能充手機、筆電、耳機。

AI 工具也遇過一樣的處境:

左邊是沒有 MCP 的情況,3 個 App 和 3 個工具之間有 9 條交錯的連線;右邊是有 MCP 的情況,App 和工具都只接到中間的 MCP,總共 6 份整合

沒有標準時,每個 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(例如 Claude Code),裡面有 Claude 模型和兩個 MCP Client;Client ① 透過 stdio 連到本機的讀書筆記 Server,Client ② 透過 HTTP 連到遠端的行事曆 Server。讀書筆記 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 迴圈,它只是把「工具從哪裡來、怎麼執行」標準化了:

  1. Host 啟動時,向每個 Server 要工具清單(tools/list)。
  2. Host 把這些工具轉成模型看得懂的格式,放進每次呼叫的 tools 參數。
  3. 模型回傳 tool_use,Host 不是自己執行,而是轉給對應的 Server(tools/call)。
  4. 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 確認工具真的有出現。
可以這樣問 AI

我剛學到 MCP 的 Host、Client、Server,以及 Tools、Resources、Prompts 三種能力。請用「餐廳」來比喻這六個概念,各用一句話說明,最後再舉一個我日常工作中可能用得到的 MCP Server 點子。

行動練習
  1. 用自己的話,向一位朋友(或對著 AI)解釋:為什麼 MCP 被比喻成 USB-C?
  2. 照著上面的步驟,把檔案系統 Server 接到 Claude Code,指定一個測試資料夾。
  3. 在 Claude Code 輸入 /mcp,記下這個 Server 提供了哪幾個工具,挑一個看它的說明寫了什麼。
  4. 請 Claude 在測試資料夾裡新增一個 hello.txt,觀察它在動手前有沒有先問你。
  5. 想一想:如果你要寫一個自己的 MCP Server,你最想讓 AI 幫你存取什麼?寫下一個點子,下一堂課就用得到。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。