# ClaudeLocalMCP.js 自己為 Claude 寫本地端 MCP Server (JavaScript版) 很簡單,有手就行😁 完整流程 Demo 的 gif 圖檔 ![MCP開啟圖示](./images/DemoMCP.gif) # 簡介 MCP Server MCP Server 就像「AI 的 USB 插槽」,讓 AI 能安全地連接外部資料或工具。 舉例:AI 想查電腦檔案或查詢股票價格,MCP Server 就負責幫 AI 取得這些資料或執行操作。 ## AI 有了 MCP(模型上下文協定)後,將產生以下重大影響: - AI 不再只是「建議者」,而能主動執行任務。例如,AI 不僅能告訴你怎麼查資料,還能直接幫你查詢資料庫、整理報表、發送郵件,甚至控制智慧家電 - AI 可即時存取外部資料與工具,突破只能依賴訓練知識的限制,能根據最新數據做出回應,如即時天氣、最新財經資訊等 - AI 回答更精確,能減少「幻覺」問題,因為可直接查證外部資料來源 - 開發者只需一次整合 MCP,AI 就能連接多種工具和資料,開發效率大幅提升 - 用戶資料安全性提升,因為存取權限可細緻控管,且多數操作在本地端執行 總結:MCP 讓 AI 從只能「說」進化到能「做」,大幅擴展應用範圍與價值,推動 AI 進入真正的智能代理(AI Agent)時代 ## Weather MCP Server 這是用來給 Claude 查詢指定地區的天氣資訊 ### 安裝與啟動 需要 Node.js 18.19 以上版本,建議使用仍受支援的 LTS 版本。 ```powershell npm ci npm start ``` 啟動前請依下節設定 `OPENWEATHERMAP_API_KEY`。預設讀取本專案根目錄的 `.env`, 不受啟動時的工作目錄影響;也可直接透過程序環境變數提供金鑰。 環境變數優先於 `.env`,缺少金鑰時會立即退出並在 stderr 顯示錯誤。 需要指定其他環境檔或開發時自動重啟: ```powershell npm start -- "envPath=D:\config\weather.env" npm run watch ``` 明確指定的環境檔若不存在或無法讀取,啟動會失敗。路徑可包含空白與 `=`, 請將整個 `envPath=...` 參數放在引號內。 這是 stdio MCP Server,啟動後等待 MCP 客戶端傳入訊息,沒有網頁或 HTTP 連接埠。 Claude Desktop 設定仍使用下方的 `node` 指令;`npm start` 適合在終端機開發時使用。 ### 申請天氣 API 服務 我去申請 https://openweathermap.org/ 的免費服務 請去註冊並取得 API 金鑰 (API Key) ### 在 .env 填入金鑰 ```shell OPENWEATHERMAP_API_KEY=你的實際API金鑰貼在這裡 ``` 記得在根目錄內放上 .env 檔案來提供 API金鑰 ### 安裝 Claude 桌面版 https://claude.ai/download ### 開啟 Claude 開發模式 右上角 File => Settings 開啟 Developer 模式 ### 設定 MCP Server 給 Claude 使用 Windows 用戶請 開啟目錄 `C:\Users\使用者名稱\AppData\Roaming\Claude` 檔案名稱 `claude_desktop_config.json` ```json { "mcpServers": { "weather": { "command": "node", "args": [ "D:\\github\\ClaudeLocalMCP.js\\index.js", "envPath=D:\\github\\ClaudeLocalMCP.js\\.env" ] } } } ``` envPath 是指定 .env 的路徑;若使用專案根目錄的 `.env`,可以省略此參數。 ### 查詢行為與錯誤處理 - `get_weather` 接受 `city` 字串,會去除首尾空白並拒絕空白城市。 - 英文城市直接查詢 OpenWeatherMap;含漢字的城市先使用 MyMemory 翻譯。 - 翻譯連線失敗、逾時、超過配額或回傳空白時,改用原城市查詢。 - 每次 HTTP 請求逾時為 10 秒;中文查詢有兩個依序執行的階段,總時間可能接近 20 秒。 - 客戶端取消請求時會中止進行中的 HTTP 請求,且不再啟動下一個階段。 - 天氣查詢失敗以 MCP `isError: true` 回傳,包含金鑰無效、城市不存在及逾時等情況。 - 成功結果保留 `city`、`temperature`(攝氏)、`condition`、`humidity`(百分比)、 `wind_speed`(m/s)與 `country` 欄位,以 JSON 文字回傳。 Server 在本機執行,但城市查詢仍會傳給外部 API。診斷訊息使用 stderr; 請勿新增 `console.log` 到 Server,以免破壞 stdout 上的 MCP 訊息。 ### 執行測試 ```powershell npm test ``` 使用 Node 內建測試工具,涵蓋 MCP 握手、輸入驗證、翻譯降級、錯誤回傳、 HTTP 逾時/取消,以及獨立程序的預設設定、指定路徑與 watch 啟動。 測試使用模擬資料與本機 HTTP 服務,不讀取你的 `.env` 或呼叫真實天氣/翻譯 API。 確認一下 MCP 是否正常開啟 ![MCP開啟圖示](./images/ClaudeMCP01.png) 檢視一下 MCP 名稱 ![MCP開啟圖示](./images/ClaudeMCP02.png) 詢問時要指定地區,如: 台中天氣如何? Claude 會要你確認(Allow for this chat)是否可以執行 MCP 服務 ![MCP開啟圖示](./images/ClaudeMCP03.png) ### 查詢 MCP Server 執行 log Windows 用戶請 開啟目錄 `C:\Users\使用者名稱\AppData\Roaming\Claude\logs`