生活分享
Claude Code|建立自己的唯讀 MCP 工具
讓 Claude 查詢本機練習待辦資料。本篇讓 Claude 讀取你自己提供的待辦資料。你會建立唯讀 MCP server,先用測試客戶端驗證工具清單與呼叫結果,再連進 Claude Code。完成不是畫面顯示 Connected,而是工具真的回傳指定資料、參數錯誤可以辨認,而且伺服器沒有修改原始檔案。
閱讀時間約 7 分鐘

本篇讓 Claude 讀取你自己提供的待辦資料。你會建立唯讀 MCP模型上下文協定(MCP)是什麼:連接工具與資料的共同介面MCP 是讓 AI 應用程式與外部工具、資料和提示範本交換資訊的開放協定,不是模型本身,也不保證接上就能完成任務。本文用查詢社區圖書室資料的例子,說明主機、用戶端、伺服器及工具、資源、提示的分工,並比較 MCP、A2A 與 Agent Skills。附連線驗證與權限檢查方法,幫你區分已設定、已連接、可呼叫與真正取得結果。閱讀全文 server,先用測試客戶端驗證工具清單與呼叫結果,再連進 Claude Code。完成不是畫面顯示 Connected,而是工具真的回傳指定資料、參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文錯誤可以辨認,而且伺服器沒有修改原始檔案。
先讀 MCP 入門Claude Code 接 MCP 入門理解 MCP 如何擴充外部工具存取。MCP 讓 Claude Code 透過標準介面使用外部工具,例如搜尋文件或讀取服務資料。本篇會以官方文件列出的 Notion 遠端 MCP 為練習,連接一個只有假資料的測試頁,完成一次讀取並核對結果。你會學到連線、授權與工具操作是三個不同階段。閱讀全文及連線排錯Claude Code|MCP 安裝、設定與排錯設定伺服器、完成登入並驗證工具連線。MCP 排錯要把設定、程序、網路、登入與資料權限逐層拆開。本篇延續 notion-lab,也說明本機 stdio 伺服器的差異。你會建立一份可交給維護者的診斷紀錄,指出哪一層已通過、哪一層失敗,避免反覆重裝卻沒有新證據。閱讀全文。下載第 79 篇材料,切到 starter。需要 Node.js 22;Claude 實機步驟另需有效登入。閱讀約 20 分鐘、實作約 45 分鐘。
先看資料與工具契約
閱讀完整文字說明
建立自己的唯讀 MCP 工具,以流程和文件圖形呈現教學重點。
本次假資料在 fixtures/tasks.json,共三筆待辦,其中兩筆同名但 id 不同。伺服器提供 list_tasks 與 get_task:前者是分頁清單,後者按 id 查詢單筆。將兩種操作分開,有助於讓呼叫者知道什麼時候該傳 offset,什麼時候只需要一個識別碼。
資料檔刻意沒有登入資料、私人地址或正式服務連線。即使你接錯測試命令,也不會因此查到正式產品資料。等整條鏈都理解後,再把資料來源換成自己的受控服務;那會需要重新設計認證、授權與資料範圍,不只是替換一個網址。
npm ci
npm run mcp:probe
材料鎖定官方 MCP v2 套件及 Zod 版本,lockfile 保存完整相依關係。不要把舊文章的 @modelcontextprotocol/sdk 匯入路徑與這一版的 @modelcontextprotocol/server 混在同一支程式。遇到找不到匯出時,先看 package.json 與實際安裝版本,再決定該讀哪一代文件。
建立唯讀 server
打開 mcp/server.mjs。McpServer 負責工具登記與協定處理,StdioServerTransport 則透過程序的標準輸入輸出交換訊息。這種連接方式由客戶端啟動本機子程序,不需要公開 HTTP 網址,也不表示資料已自動上傳到第三方資料庫。
import { McpServer } from '@modelcontextprotocol/server';
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
import { z } from 'zod';
import { listTasks } from './data.mjs';
const server = new McpServer({ name: 'mokaair-todo-lab', version: '1.0.0' });
server.registerTool('list_tasks', {
description: '唯讀查詢練習待辦;nextOffset=null 表示結束。',
inputSchema: z.object({
offset: z.number().int().min(0).default(0),
limit: z.number().int().min(1).max(20).default(2)
}),
annotations: { readOnlyHint: true }
}, async args => ({
content: [{ type: 'text', text: JSON.stringify(listTasks(args)) }]
}));
await server.connect(new StdioServerTransport());
這段核心範例只登記清單工具;下載材料的完整版本另有 completed 篩選及 get_task,測試以完整版本為準。若你想從零重打程式,先讓單一工具通過,再把第二個工具加回去,不要同時修改資料格式、傳輸方式與工具名稱。
readOnlyHint 是描述工具用途的提示,真正的唯讀特性仍取決於程式。本範例沒有寫入資料檔的程式路徑,也沒有呼叫外部修改 API。若在工具內加入檔案寫入,光是保留這個提示不會自動把寫入禁止。
把業務邏輯獨立出來
資料邏輯放在 mcp/data.mjs,讓分頁規則能在沒有 Claude 的情況下驗證。offset 是篩選後清單的位置,limit 介於一到二十;下一頁位置超出資料時回傳 null。呼叫端不能只看 items 長度猜測還有沒有下一頁,因為最後一頁可能剛好滿額。
{
"items": [
{ "id": "a", "title": "買牛奶", "completed": false },
{ "id": "b", "title": "整理桌面", "completed": true }
],
"nextOffset": 2,
"total": 3
}
接著以 offset=2 讀下一頁,應只剩 id=c,nextOffset 為 null。get_task 查不到資料時回傳 found=false;這與整個工具呼叫失敗不同。使用明確的結果結構,比回傳一句無法區分錯誤原因的「沒有資料」更容易讓後續程式處理。
用真正的 MCP 客戶端確認
mcp/probe.mjs 使用官方 Client 和 StdioClientTransport,會啟動 server、列出工具,再呼叫 list_tasks。這一步已走過序列化與協定交換,強度高於只在程式中直接呼叫 listTasks 函式。看到 tools 內包含兩個名稱,還要讀 result 的實際內容是否與 fixture 一致。
node --test tests/mcp.test.mjs
測試會驗證工具名稱、兩頁資料串接、未知 id,以及 limit=0 的錯誤結果。工具回傳 isError 時,外層協定連線仍可能正常;這代表應用層拒絕了輸入,不能把它判成網路已斷線。測試最後關閉客戶端,讓被啟動的程序正常結束。
如果你直接執行 node mcp/server.mjs 後畫面停住,這通常是伺服器正在等協定輸入。不要在 stdout 加一行「啟動成功」來排錯,因為 stdout 是 MCP 訊息通道。診斷可寫到 stderr,或由 probe 捕捉需要的結果;使用 Ctrl+C 結束你手動開啟的測試程序。
接到 Claude Code
在同一個 starter 目錄執行下面的命令。設定檔裡的 node 命令及 mcp/server.mjs 是給子程序使用,因此工作目錄必須正確。若要從別處啟動,改用你電腦上已核對的絕對路徑,不要照抄作者的家目錄。
claude --strict-mcp-config --mcp-config mcp/fixtures.mcp.json
請使用 todo-lab 的 list_tasks 工具,先以 limit=2 讀第一頁,
再依 nextOffset 讀下一頁。列出三個 id、完成狀態與總筆數。
不要修改資料,也不要讀取其他專案。
請查看工具實際被呼叫的紀錄,而不是只看最終文字剛好列出 a、b、c。模型有可能從先前對話知道答案,或在你直接貼了資料後自行整理;那都不能證明 MCP 連線成功。必要時在下一次測試前修改一筆假資料,再建立新的工作階段核對。
故障練習與定位順序
先將設定裡的 server 路徑故意改錯,啟動應出現程序或連線錯誤;修復路徑後重跑 probe。第二個案例傳 limit=0,應得到輸入不合法,但同一客戶端之後仍能傳合法參數。第三個案例查不存在的 id,應得到 found=false,沒有把服務錯誤偽裝成找不到資料。
| 症狀 | 優先檢查 | 可用證據 |
|---|---|---|
| 程序起不來 | node、工作目錄、安裝版本 | 子程序 stderr |
| 有工具但資料不對 | fixture 與分頁參數 | 原始工具回傳 |
| Claude 沒呼叫 | 需求與工具描述是否明確 | 工具使用紀錄 |
| 參數被拒絕 | Schema 型別及範圍 | isError 與錯誤文字 |
確認連線成功之後還要確認資料
工具清單能證明伺服器有回報工具名稱,無法單獨證明查詢結果符合契約。至少完成一次實際呼叫,檢查回傳的 a、b 兩筆資料、分頁位置與總數。若工具名稱正確但資料格式不同,先修正伺服器與用戶端對契約的理解。
關閉測試用戶端後確認子程序已退出。若每次重試都留下背景伺服器,後續錯誤可能來自舊程序或重複啟動,容易被誤認為 MCP 連線不穩。
完成與下一步
最後記錄 Node、SDK、Claude 版本,保留 probe 結果、測試輸出與一次真實工具呼叫。用檔案雜湊或 Git diff 確認 fixture 沒有被修改。結束對話後確認沒有遺留由你手動啟動的 server;不要為了清理而終止所有 node 程序。
本篇的完成分兩層:本機協定測試通過,以及 Claude 確實使用工具。若後者因登入過期尚未完成,就保留為待測;正常的 probe 結果不會自動解決 Claude 的認證問題。這個分層也適用於日後連接真正服務。
小練習是新增 completed=false 的查詢,確認總筆數及下一頁都根據篩選結果計算。接續工具契約與分頁Claude Code|設計 MCP 工具名稱、輸入 Schema 與分頁讓模型能選對工具,也能正確處理空值與大量結果。MCP 連線成功之後,下一個問題是工具能不能被正確使用。本篇設計 list_tasks 與 get_task 的分工、輸入 Schema、查無資料及分頁結果,並用真正的 MCP 客戶端檢查空結果、錯誤參數和多頁資料,最後再觀察 Claude 是否選對工具。閱讀全文可以擴充測試;需要遠端服務時,再閱讀HTTP 認證Claude Code|遠端 MCP 登入、授權範圍與重新認證在測試服務演練連線與權限故障。遠端 MCP 連不上時,可能是網路、協定、登入或權限問題,重登不一定能全部解決。本篇先用本機假服務辨認 401、403 與連線錯誤,再說明如何對你已取得授權的測試 MCP 服務完成登入、最小權限查詢與撤銷驗證。閱讀全文,不要直接把本機 stdio 範例當成可公開的 HTTP 服務。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Connect Claude Code to tools via MCP · 查證日期:
- Build an MCP server - Model Context Protocol · 查證日期:
- or · 查證日期: