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

自製圖解: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 實作。最小讀檔練習的越界拒絕,正好說明資料範圍應該由實際設定與結果驗證,而不是只靠名稱判斷。
下一步
- Plugin、Connector、MCP 有什麼不同?:在擴充方式之間做選擇。
- Chrome DevTools MCP 中文指南:了解一個聚焦於瀏覽器開發工作的 MCP 工具頁。
- Browser-Use 與 MCP 怎麼選:比較 API、MCP 與瀏覽器自動化的工作邊界。
資料來源與查證日期
查證日期:2026-11-08。
- What is the Model Context Protocol (MCP)? — 定義、適用範圍與 USB-C 比喻。
- Architecture overview — Host、Client、Server 與協定範圍。
- Transports — stdio、Streamable HTTP 與 JSON-RPC 訊息傳遞。
- Tools — 工具發現、呼叫與人為核准建議。
- Resources — 資源提供與讀取。
- Prompts — 提示範本的角色與使用者選取模式。
- Authorization — HTTP 授權與 stdio 憑證的差異。
- 官方 Filesystem MCP Server — 本機檔案工具與啟動方式;本例的套件固定為 2.2.0。
- 練習驗證紀錄:verification.json — Node v24.14.0、filesystem server 2.2.0 的實際 stdio 唯讀驗證。