12 min給工具使用者

MCP 是什麼?怎麼連外部工具與資料

MCP 是讓 AI 應用連接外部工具與資料的開放協定。本文用 Host、Client、Server 圖解說明連線,並以可下載的唯讀 filesystem 練習完成初始化、讀檔與越界拒絕,區分 Host 整合與 JSON-RPC 協定驗證。

Gwarket讓 AI 知識用於實際工作

MCP(Model Context Protocol)是一套讓 AI 應用以共同協定連接外部工具與資料的開放標準。第一次接 MCP,重點不是多裝幾個 Server,而是完成一條範圍很小、結果可檢查的連線:知道誰啟動程式、它能讀哪裡,以及被拒絕時會發生什麼事。

MCP 不是聊天模型,也不是某一家產品的外掛商店。它處理的是 AI 應用與外部能力如何交換資訊;官方以 USB-C 比喻這種共同介面。MCP 官方介紹

文中提供一個可下載的最小練習:用官方 filesystem MCP server 只讀取一個合成資料夾。練習實際完成了初始化、列出唯讀工具、列出目錄、精確讀檔,以及拒絕讀取允許目錄外的檔案;它使用的是小型 deterministic JSON-RPC client,不是 Claude、Codex 或任何模型帳號的連線。

MCP 把一條連線拆成 Host、Client、Server

一條 MCP 連線至少有三個角色:

角色 負責什麼 這次練習中的位置
Host 管理 MCP 連線的 AI 應用;也決定如何呈現權限與工具呼叫 練習沒有使用 Host
Client Host 為每個 Server 建立的連線元件,負責協定訊息 verify.mjs 裡的小型 JSON-RPC client
Server 對外提供工具、資料或提示範本的程式或服務 @modelcontextprotocol/server-filesystem 2.2.0

官方架構定義為 Host 對每個 Server 建立一個 Client,並維持各自的連線;協定不規定 Host 要使用哪個模型、怎麼顯示介面,或要替使用者自動做哪些決定。MCP Architecture

MCP 架構示意圖:AI 應用的 Host 為每個 MCP Server 建立 Client;本機 Server 經 stdio 連線,遠端 Server 經 Streamable HTTP 連線;Server 可提供工具、資源與提示範本。

自製圖解:Gwarket / Aaron Huang · CC BY 4.0 ·

Server 常見提供三類能力:

  • Tools:讓模型呼叫外部系統,例如查詢資料庫、呼叫 API 或執行計算。Host 應讓使用者看見工具與呼叫提示,並有確認或拒絕的機會。MCP Tools 規格
  • Resources:提供檔案、資料庫結構或應用資訊等 context;由 Host 決定如何讓人選取或納入對話。MCP Resources 規格
  • Prompts:Server 提供、由使用者明確選取的提示範本。MCP Prompts 規格

先看拿到的是指令還是網址

這個判斷決定你要審查什麼:

說明文件提供的內容 傳輸方式 你真正要確認的事
一段啟動指令 stdio Client 會啟動子程序;要看程式、參數與允許讀取的目錄。
一個 MCP endpoint 網址 Streamable HTTP Server 獨立運作;要看 endpoint 營運者、登入流程與授權範圍。

stdio 以標準輸入與輸出交換 JSON-RPC 訊息;Streamable HTTP 則把訊息送到單一 endpoint,回覆可以是 JSON 或該請求範圍內的 SSE 串流。MCP Transports 規格

一次真實的最小連線:只讀一個公開練習資料夾

這個練習包把範圍寫進程式與結果:filesystem server 只以 --read-only 啟動,且只取得 public-notes 這個合成資料夾。沒有模型 API、外部帳號、私密檔案或寫入工具呼叫。

你可以下載完整包,或先看組成它的關鍵檔案:

你提供的輸入、Server 收到的範圍、讀回的結果

練習所寫入的輸入是 public-notes/meeting.md。內容是三筆合成的公開週會筆記:FAQ 初稿完成、示範影片字幕待確認、上線日期未定。它不是帳號資料,也不是模型生成的回覆。

verify.mjs 啟動 @modelcontextprotocol/server-filesystem 2.2.0,傳入 --read-only public-notes。隨後 client 以 stdio 送出 initialize、tools/list,再要求 list_directory 及 read_text_file。讀回的文字必須逐字等於寫入的週會筆記,才算通過。

要檢查什麼 本次結果 為什麼有用
初始化 通過;協定版本為 2025-11-25 先確認雙方能用同一協定對話。
工具清單 通過;列出的都是讀取與列目錄工具 檢查唯讀模式沒有註冊 write_file 等寫入工具。
列出目錄與精確讀檔 通過;找到並讀回 meeting.md 結果不是只有「連上了」的狀態訊息。
越界讀取 明確拒絕 outside-allowed.txt 驗證目錄邊界真的由 Server 強制執行。

本次可見的工具包括 read_text_file、list_directory、directory_tree、search_files 與 get_file_info;沒有寫入工具。驗證結果中的拒絕訊息明確指出 outside-allowed.txt 不在 public-notes 允許目錄內。同一個練習包裡的檔案,也不會因為路徑很近就自動取得讀取權。

重跑這個練習,先只驗證資料邊界

此練習需要 Node.js 24 以上。在解壓後的 mcp-first-task 資料夾執行:

npm install --ignore-scripts
npm run verify

預期輸出包含 passed: true,並產生 verification.json 與 protocol-log.json。前者是人可讀的檢查摘要,後者保留送出與收到的 JSON-RPC 訊息;兩者可能含本機路徑,分享前應先檢查。練習的 README 與 驗證程式 是可檢查的參考,不必把它當成某個 AI 產品的設定教學。

用 Claude Code 把這個唯讀 Server 加到目前專案

以下是依 Claude Code MCP 官方文件 整理的本機 stdio 路徑;這是一條選配的設定說明,實際驗證範圍仍以前節記錄的 filesystem Server 為限。它需要你已安裝 Claude Code 並完成自己的登入;若還沒開始,可先看 Claude Code 中文教學。前一節的 portable 練習本身不需要 Claude Code 或任何帳號。先在解壓後的 mcp-first-task 資料夾完成 npm install --ignore-scripts,再從同一個資料夾開啟 PowerShell:

$exercise = (Resolve-Path .).Path
claude mcp add --transport stdio gwarket-mcp-first-task --scope local -- node "$exercise\node_modules\@modelcontextprotocol\server-filesystem\dist\index.js" --read-only "$exercise\public-notes"

這一行刻意不使用 npx:它直接以目前 Node.js 執行剛安裝的官方套件 2.2.0,並把 Server 的允許範圍鎖在練習資料夾。-- 前面的 --transport、名稱與 --scope local 是 Claude Code 的設定;-- 後面的 node、程式檔、--read-only 與路徑會原樣交給 Server。官方文件說明本機 stdio Server 是本機程序,-- 用來分隔 Claude Code 選項與 Server 命令;local scope 只套用在你目前的專案,且不寫入專案版控。Claude Code:加入本機 stdio Server Claude Code:Local scope

接著啟動 claude,在工作階段輸入 /mcp 檢查 gwarket-mcp-first-task 是否列在清單中。確認後,用一個明確限制工具來源的請求,例如:「只用 gwarket-mcp-first-task MCP Server 讀取 meeting.md 原文;不要改用其他工具。」然後再要求它讀同包中的 outside-allowed.txt。預期第二個請求會被 filesystem Server 拒絕,因為該檔案不在 public-notes 允許目錄內;這個拒絕只能證明這個 Server 的路徑限制,不能限制 Claude Code 其他原生工具或另接的 MCP Server。

用完後,在同一個專案的 PowerShell 執行:

claude mcp remove gwarket-mcp-first-task --scope local

官方文件列出 claude mcp list、claude mcp get <name>、claude mcp remove <name> 與工作階段中的 /mcp 作為管理與查看狀態的方法。不同 Host 的傳輸、設定格式與核准流程不受 MCP 協定統一規定,因此這個 Claude Code 範例不能替代其他 Host 的官方文件。Claude Code:管理 Server MCP Architecture

MCP 與 API 的差別,在於整合協定

API 是服務本身提供的程式介面;MCP 則把能力發現、描述與呼叫,以及 Host 與 Server 之間的交換方式標準化。一個 MCP Server 可以在內部呼叫某服務的 API,兩者常會一起出現。

流程固定時,例如每天匯出同一份報表,直接呼叫 API 通常比較容易測試與除錯。模型也可以透過自行建立的工具框架動態選擇 API;這不是 MCP 獨有的能力。採用 MCP 的理由是讓支援同一協定的 Host 與 Server 更容易共用整合方式與能力描述,而不是取代 API。

第一次接真實工作資料前,保留三個停下來看的點

啟動前,讀完程式與資料範圍

stdio Server 是 Client 啟動的子程序,因此啟動命令、參數、工作目錄與環境變數都是安全審查的一部分。這個練習把允許範圍縮到一個合成資料夾,正是因為「能讀檔」不是抽象能力,而是一個明確的資料邊界。stdio 規格

連遠端時,分開看登入與權限

HTTP 型 MCP 的授權是選用功能;若實作支援,規格以 OAuth 2.1 為基礎。stdio 不應套用 HTTP 授權流程,而是從執行環境取得憑證。無論哪種方式,登入畫面要求的權限超過工作所需時,都應先停下來確認原因。MCP Authorization 規格

使用時,讓人能看見並拒絕工具呼叫

Tools 可能查詢外部系統、計算或執行動作。規格建議 Host 顯示暴露的工具與呼叫提示,並讓人確認或拒絕。第一次把 Server 接進實際 Host 時,不要跳過這個步驟;先用讀取型、結果可核對的任務,才知道新增的能力是否值得承擔它的資料範圍。MCP Tools 規格

常見問題

MCP 本身要付費嗎?

MCP 是協定,不是單一產品或方案。協定文件不替 Host、Server 或其背後服務定價;費用與帳號條件應查你選用產品的官方方案頁。

同一個 Server 能在不同 AI 工具使用嗎?

協定的目標是讓 Client 與 Server 以共同方式交換能力與 context。不過每個 Host 支援的傳輸、認證、設定格式和使用者介面可以不同,所以仍要依該 Host 的官方文件逐一設定與驗證。MCP 官方介紹

MCP 會讓 AI 自動取得我所有資料嗎?

不會因為安裝 MCP 就自動取得一切。可接觸的資料與可執行的動作,取決於 Server、授予的憑證、允許目錄與 Host 實作。最小讀檔練習的越界拒絕,正好說明資料範圍應該由實際設定與結果驗證,而不是只靠名稱判斷。

下一步

資料來源與查證日期

查證日期:2026-11-08。

追蹤 Gwarket

獲取更多實用的 AI 知識、工具推薦與實作分享,在你關注的平台上與我們相遇。