Claude MCP 設定可將 Claude Code 或 Claude Desktop 連接到外部工具,例如資料庫、程式碼執行器、API 及自訂伺服器。使用 claude mcp add 設定 Claude Code,或編輯 Claude Desktop 的 JSON 設定檔,然後驗證傳輸方式、範圍與工具清單。本指南涵蓋兩種設定路徑、常見失敗、工具使用推理以及沙箱執行環境。
Claude MCP 設定如何運作
MCP 是 Anthropic 提出的開放標準,讓語言模型能夠以統一方式呼叫外部工具。在 MCP 出現之前,每個 AI 應用程式都需要為想要使用的每項工具撰寫專屬的連接程式碼。有了 MCP,任何符合規範的伺服器可以透過標準的探索與呼叫協定公開其能力,而任何符合規範的主機(包括 Claude)無需為每項工具進行整合工作即可使用這些能力。
具體而言:當你在 Claude 中新增一個 MCP 伺服器時,你正在告訴 Claude 主機到哪裡尋找一組工具。Claude 可以在工作階段中列出這些工具,並在任務需要時依名稱呼叫它們。伺服器負責執行;Claude 負責推理何時以及如何呼叫。
MCP 的核心概念有三個:
| 概念 | 什麼意思 | 範例 |
|---|---|---|
| 工具 (Tool) | 伺服器公開的可呼叫函式 | run_python、query_db、list_models |
| 資源 (Resource) | 伺服器以背景資訊形式提供的唯讀資料 | 檔案、資料庫行、資料集 |
| 提示 (Prompt) | 伺服器內建的預建指令範本 | 系統層級的任務描述 |
對大多數開發者來說,工具是最重要的。資源與提示則在你建構更結構化的代理管線時變得相關。
在 Claude Code 中新增 MCP 伺服器
Claude Code 透過 claude mcp 子指令群組提供 MCP 管理功能。你可以新增、移除及列出伺服器,而無需手動碰觸任何設定檔。
claude mcp add — 基本形式
claude mcp add <name> <command> [args...]
例如,要新增一個本機 Python MCP 伺服器:
claude mcp add my-tools python /path/to/mcp_server.py
這會註冊一個名為 my-tools 的伺服器,使用 stdio 傳輸執行 python /path/to/mcp_server.py。Claude Code 在你啟動工作階段時會啟動該程序,並在整個工作階段期間保持其運行。
傳遞環境變數
許多 MCP 伺服器需要 API 金鑰或端點 URL。使用 --env 在註冊時傳遞它們:
claude mcp add my-tools python /path/to/mcp_server.py \
--env API_KEY=your_key_here \
--env BASE_URL=https://api.example.com
這些值會儲存在 Claude Code 的設定中,並在啟動時注入到伺服器程序。請勿將機密直接寫死在伺服器指令中。
claude mcp add json — 從 JSON 規格註冊
如果你已經有以 JSON 編寫的伺服器規格(常見於在團隊中分享設定),可以直接以管道方式傳入:
echo '{
"command": "python",
"args": ["/path/to/mcp_server.py"],
"env": {
"API_KEY": "your_key"
}
}' | claude mcp add my-tools --json
或者傳入一個檔案:
claude mcp add my-tools --json < server-spec.json
這與位置參數形式等效,但會提供單一可版本控制與分享的設定構件。
列出與移除伺服器
# 查看所有已註冊的伺服器
claude mcp list
# 移除伺服器
claude mcp remove my-tools
範圍:專案 vs 使用者
預設情況下,claude mcp add 會在使用者層級的設定中註冊伺服器,使其在所有 Claude Code 工作階段中都可使用。若要僅為當前專案註冊(儲存在 .claude/settings.json 中),請加上 --scope project:
claude mcp add my-tools python /path/to/mcp_server.py --scope project
專案範圍的伺服器在以下情況很有用:不同專案需要不同的工具,而你希望保持設定之間隔離。
claude mcp serve — 將 Claude Code 公開為 MCP 伺服器
反過來也可以運作。claude mcp serve 會將 Claude Code 本身啟動為 MCP 伺服器,讓另一個 MCP 主機連接到它並使用其工具:
claude mcp serve
這在你希望將 Claude Code 的能力組合成一個更大的代理管線時很有用,其中不同的主機負責協調工具呼叫。
Claude Desktop MCP 伺服器設定
Claude Desktop 將 MCP 伺服器設定儲存在一個 JSON 檔案中。位置取決於你的作業系統:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
如果檔案不存在,請建立它。結構如下:
{
"mcpServers": {
"my-tools": {
"command": "python",
"args": ["/path/to/mcp_server.py"],
"env": {
"API_KEY": "your_key_here"
}
}
}
}
mcpServers 下的每個鍵是 Claude 用來識別伺服器的名稱。你可以註冊任意數量的伺服器——Claude Desktop 會在啟動時載入所有伺服器。
編輯完檔案後,請重新啟動 Claude Desktop 以使變更生效。當 MCP 工具成功載入時,你會在聊天輸入區域看到一個錘子圖示。
透過 SSE 新增遠端 MCP 伺服器
對於使用 Server-Sent Events (SSE) 傳輸而非 stdio 的遠端伺服器,設定形式略有不同:
{
"mcpServers": {
"remote-tools": {
"url": "https://your-mcp-server.example.com/sse"
}
}
}
某些遠端伺服器需要驗證。如果伺服器期望 bearer token,請在 headers 欄位中傳遞:
{
"mcpServers": {
"remote-tools": {
"url": "https://your-mcp-server.example.com/sse",
"headers": {
"Authorization": "Bearer your_token_here"
}
}
}
}
MCP 傳輸類型:stdio vs SSE
MCP 伺服器透過以下兩種傳輸機制之一與 Claude 主機通訊:
stdio — 伺服器在同一台機器上作為子程序執行。主機啟動該程序,並透過標準輸入/輸出讀寫 JSON-RPC 訊息。這是本機伺服器的預設方式,也是最容易設定的方式。
SSE (Server-Sent Events) — 伺服器遠端執行,並公開一個 HTTP 端點。主機連接到 URL 並以串流方式接收工具回應。這可以跨機器運作,是共享團隊基礎設施或代管工具服務的正確選擇。
對於剛開始的大多數個別開發者來說,stdio 比較容易——不需要網路,而且伺服器程序會為你管理。當你希望團隊共享單一 MCP 伺服器,或者工具本身需要在特定網路環境中執行時,SSE 就變得有價值。
Claude 如何對 MCP 工具進行推理
當工作階段啟動且 MCP 伺服器已註冊時,Claude 會查詢每個伺服器以取得其可用的工具。這會產生工具名稱與 JSON Schema 描述的列表。Claude 不會推測性地呼叫工具——它只有在對話或任務需要時,根據工具描述所說的作用來呼叫工具。
工具呼叫流程如下:
- 使用者發送訊息或任務。
- Claude 評估是否有任何已註冊的工具可以提供協助。
- 如果是,Claude 會以適當的引數建構一個工具呼叫。
- MCP 主機將呼叫傳送給正確的伺服器。
- 伺服器執行並回傳結果。
- Claude 將結果納入其推理中並繼續。
這個迴圈可以在單一回合中發生多次——Claude 可以鏈式呼叫工具,使用一個工具的結果來通知另一個工具的引數,並在同一個工作階段中彙總多個伺服器的結果。
工具描述的品質在這裡非常重要。模糊的描述會導致遺漏或不正確的呼叫。精確的描述(包含工具的作用、引數的含義以及回傳的內容)能讓 Claude 準確地路由呼叫,而無需猜測。
在沙箱中執行工具執行
當 MCP 工具執行程式碼(Python 腳本、Shell 指令、檔案操作)時,在本機機器上執行會引發隔離性的問題。一個具有檔案系統存取權、程序產生或網路呼叫能力的工具,如果行為異常或被引導到非預期的路徑,其影響範圍會很廣。
Novita AI Agent Sandbox 透過提供用於工具執行的隔離雲端環境來解決這個問題。你不需要在本機執行 MCP 伺服器,而是將其部署在沙箱實例中。沙箱擁有自己的檔案系統、網路範圍和資源限制。代理程式可以在該邊界內寫入檔案、執行程式碼及呼叫內部 API,而不會影響主機機器。
在沙箱內執行的 MCP 伺服器透過 SSE 傳輸公開其工具,而 Claude 則遠端連接到它——因此從 Claude 的角度來看,整合方式完全相同。差異完全在於工具實際執行在什麼上面。
用於 MCP 部署的 Novita Sandbox 的主要特點:
- 快速啟動:實例在約 200 毫秒內啟動,保持工具往返延遲較低
- 按秒計費:你只為實際執行時間付費,而不是閒置保留時間
- 隔離檔案系統:每個沙箱實例都有獨立的工作空間,防止跨工作階段的資料洩漏
- 可設定的網路政策:控制工具可以存取哪些外部服務
有關如何建立由 Novita Sandbox 支援的 MCP 伺服器的逐步指南,請參閱使用 Novita Sandbox 和 mcp-use 函式庫建立遠端程式碼執行 MCP 伺服器。
使用 Novita LLM API 進行 MCP 工具使用推理
雖然 Claude 自己的模型原生支援工具使用,但你可能希望將某些 MCP 工具使用推理路由到不同的模型——出於成本、延遲或專業化的原因。Novita LLM API 提供了一個與 OpenAI 相容的端點,可以存取支援函式呼叫和結構化工具呼叫的模型。
這在 MCP 架構中有兩種應用方式:
1. 作為自訂 MCP 主機背後的推理模型:如果你正在建立自己的 MCP 主機(而不是使用 Claude Code 或 Claude Desktop),你可以使用 Novita LLM API 來驅動模型層。主機使用工具列表和對話內容呼叫 Novita API;模型回傳工具呼叫指令;主機將它們分派給 MCP 伺服器。
import openai
client = openai.OpenAI(
base_url="https://api.novita.ai/v3/openai",
api_key="your_novita_api_key",
)
response = client.chat.completions.create(
model="meta-llama/llama-3.3-70b-instruct",
messages=[{"role": "user", "content": "列出可用的工具並執行一個快速測試"}],
tools=[
{
"type": "function",
"function": {
"name": "list_models",
"description": "從 API 列出所有可用的模型。",
"parameters": {"type": "object", "properties": {}},
}
}
],
tool_choice="auto",
)
2. 作為 MCP 工具內部的 LLM:一個 MCP 工具可以在內部使用 Novita LLM API——例如,一個摘要工具、一個分類工具或一個產生程式碼的工具。該工具從代理程式接收輸入,呼叫 Novita API,並回傳結果。這可以將模型推理成本與主代理模型的成本分開,並讓你為每個子任務選擇合適的模型。
有關建立呼叫 Novita API 的 MCP 伺服器的實際範例,請參閱如何使用 Novita AI 建立你的第一個 MCP 伺服器。
常見問題與解決方法
伺服器未顯示在 Claude Desktop 中
最常見的原因是 claude_desktop_config.json 中有 JSON 語法錯誤。在儲存前使用 JSON 驗證器。即使是一個尾隨逗號也會阻止檔案載入。每次編輯後請重新啟動 Claude Desktop。
找不到 claude mcp add 指令
這表示 Claude Code 未安裝或不在你的 PATH 中。透過 npm install -g @anthropic-ai/claude-code 安裝 Claude Code,並使用 claude --version 驗證。
工具已列出但從未被呼叫
Claude 只有在認為工具與當前任務相關時才會呼叫它。如果你的工具描述過於模糊,Claude 就不會選擇它們。請加入具體內容:工具的作用、何時使用、輸入和輸出是什麼樣子。
伺服器啟動後立即退出
請檢查伺服器指令是否正確,以及所有必要的環境變數是否已設定。直接在終端機中執行該指令以查看實際的錯誤輸出——Claude Code 在某些設定中可能會隱藏子程序的 stderr。
SSE 連線被拒絕
請確認伺服器 URL 可以從執行 Claude 的機器上存取、伺服器實際上正在監聽預期的埠口,並且任何必要的驗證標頭已正確設定。
工具呼叫失敗並出現驗證錯誤
Claude 傳遞的引數必須符合工具宣告的 JSON Schema。請檢查你的工具的 inputSchema 定義——如果缺少必要欄位或類型不符,伺服器將拒絕該呼叫。Claude 根據 schema 建構引數,因此不完整的 schema 會導致不完整的呼叫。
常見問題 (FAQ)
Claude Code 支援 MCP 嗎?
是的。Claude Code 透過 claude mcp 子指令原生支援 MCP。使用 claude mcp add 註冊伺服器,使用 claude mcp list 查看已註冊的伺服器,使用 claude mcp remove 取消註冊。執行 claude mcp --help 取得完整的指令參考。
如何將 MCP 伺服器新增到 Claude Code?
對於 stdio 伺服器,執行 claude mcp add <name> <command> [args...],或使用 --json 傳遞 JSON 規格。對於專案範圍的註冊,請加上 --scope project。新增後,啟動一個新的 Claude Code 工作階段——工具將立即可用。
什麼是 claude mcp serve?
claude mcp serve 將 Claude Code 本身作為 MCP 伺服器執行,透過 MCP 協定公開其能力。另一個 MCP 主機可以連接到 Claude Code 並將其作為工具來源使用。這在建立多代理系統時很有用,其中 Claude 是數個元件之一。
我可以在 Claude Code 和 Claude Desktop 中使用同一個 MCP 伺服器嗎?
是的。伺服器本身不關心哪個主機連接到它。對於 stdio 伺服器,Claude Code(透過 claude mcp add)和 Claude Desktop(透過 claude_desktop_config.json)都可以啟動相同的指令。對於 SSE 伺服器,任何可以連接到 URL 的主機都可以連接。
Claude 如何知道要呼叫哪個 MCP 工具?
在工作階段開始時,Claude 會查詢所有已註冊的伺服器以取得其工具列表。每個工具都有一個名稱和一個描述。在處理任務時,Claude 會根據描述是否符合需求來選擇工具。寫得好的描述(包含明確的使用案例)會導致準確的工具選擇;模糊的描述會導致遺漏或不正確的呼叫。
我可以註冊的 MCP 伺服器數量有限制嗎?
MCP 規範沒有強制限制,Claude Code 或 Claude Desktop 也沒有。在實務上,擁有數十個伺服器和數百個工具可能會減慢工作階段啟動速度(工具探索在啟動時執行),並且可能會為 Claude 的工具選擇增加雜訊。請保持工具組專注於特定專案或工作階段實際需要的內容。
stdio 和 SSE 傳輸有什麼不同?
Stdio 在本地以子程序方式執行伺服器;主機透過 stdin/stdout 通訊。SSE 連接到遠端 HTTP 端點並以串流方式接收回應。Stdio 在本地開發時比較簡單;SSE 更適合遠端、共享或生產環境部署。
