Claude 原生支援 Model Context Protocol (MCP),讓你能夠直接將外部工具——資料庫、程式執行器、API 與自訂伺服器——整合到工作流程中。無論你在終端機使用 Claude Code,還是在本機使用 Claude Desktop,MCP 的設定方式在協議層級上是一樣的,但在註冊伺服器的方法上有些許差異。本指南涵蓋兩種路徑:Claude Code 的 claude mcp add CLI 指令,以及 Claude Desktop 的 JSON 設定檔,同時也會說明工具使用推理與沙箱執行如何融入整體架構。
MCP 在 Claude 中的作用
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 <名稱> <指令> [參數...]
例如,要新增一個本機 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"
}
}
}
某些遠端伺服器需要認證。若伺服器要求,請在 headers 欄位中傳遞 bearer token:
{
"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 較為容易——無需網路設定,伺服器程序也會自動為你管理。SSE 則在團隊想要共用一個 MCP 伺服器,或工具本身需要在特定網路環境中執行時更具價值。
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 的角度來看,整合方式完全相同。差別完全在於工具實際執行於什麼環境。
Novita Sandbox 在 MCP 部署方面的主要特性:
- 快速啟動:實例在約 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 會導致不完整的呼叫。
常見問題
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 <名稱> <指令> [參數...],或使用 --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 則更適合遠端、共用或生產環境。
