本文聚焦於 Claude Code 的 MCP 整合:從「MCP 是什麼」、在 Claude Code 裡扮演的角色、如何新增/管理 MCP 伺服器、到一個可實作的 Python 範例專案,最後補上權限安全模型與故障排除清單。MCP 在 Claude Code 官方文件中指的是 Model Context Protocol(模型上下文協議),屬於由 Anthropic 推動並開源的標準協議,用來把 AI 應用連到外部資料來源與工具;它並非官方文件中所稱的「Multi-Component Process / Multi-Context Platform」。
在 Claude Code 情境下,MCP 的「從 0 到 1」建議路徑是:先理解 MCP 的核心元件(Host/Client/Server、Tools/Resources/Prompts、JSON-RPC 與傳輸層),再用 Claude Code 的 claude mcp 指令把伺服器接進來(HTTP 建議、SSE 棄用、stdio 本機),必要時透過 /mcp 進行 OAuth 驗證,並用 .mcp.json/~/.claude.json/managed-mcp.json 逐步治理共享與風險。
本報告同時強調安全:MCP 規格層面把「使用者同意與可控」列為核心原則;Claude Code 則提供權限提示、可用 /permissions 白名單化,以及 OS 級別沙箱(/sandbox)降低提示疲勞並縮小攻擊面;但 --dangerously-skip-permissions/bypass 模式屬高風險,只建議在隔離環境(容器/VM、最好無網路)使用。
MCP 定義、核心概念與架構
MCP 的官方定義與命名澄清
在 Claude Code 官方文件與 MCP 官方網站中,MCP 指 Model Context Protocol:一個用來讓 AI 應用連接外部系統(資料來源、工具、工作流程)的開源標準;官方也用「像 AI 應用的 USB‑C 連接埠」來比喻其標準化連接價值。
題目括號中的「Multi-Component Process / Multi-Context Platform」不屬於上述官方文件對 MCP 的擴寫;本文後續將以官方定義(Model Context Protocol)為準。
MCP 的三方角色與三種原語
MCP 規格把互動角色拆成三個層級:Host(發起連線的 AI 應用)、Client(Host 內部維持與伺服器連線的元件)、Server(提供上下文與能力的服務);兩端以 JSON-RPC 2.0 訊息交換建立「有狀態連線」並協商能力。
對 Claude Code 使用者而言,最重要的是 Server 能提供的三種「原語(primitives)」:
- Tools(工具):可被模型呼叫以執行動作(像是查 DB、呼叫 API、跑腳本)。
- Resources(資源):可被讀取並注入上下文的資料(像是檔案、資料表、API 回應)。
- Prompts(提示):可重用的互動模板,能在客戶端呈現為可執行命令或工作流程片段。
傳輸層:stdio 與 Streamable HTTP
MCP 架構文件把 MCP 分成資料層與傳輸層:資料層是 JSON-RPC 協議與工具/資源/提示等語義;傳輸層則決定如何建立通道並處理驗證。
MCP 官方在架構概述中列出兩種主要傳輸:
- stdio transport:以標準輸入輸出在同機器本機行程間通訊,常見於「本機 MCP server」。
- Streamable HTTP transport:以 HTTP POST 傳訊、可選 SSE 作串流;支援 bearer token、API key、自訂 headers,並建議使用 OAuth 取 token。
Claude Code 文件同時指出:其「遠端 SSE」選項已被棄用,應優先改用 HTTP 伺服器(若可用)。
MCP 架構示意圖
下圖把「Claude Code 作為 Host(內含 MCP client)」並行連到多個 MCP servers(本機 stdio、遠端 HTTP)畫成一個最小可理解的架構:

此分層(Host/Client/Server、JSON-RPC、stdio 與 Streamable HTTP)與「Tools/Resources/Prompts」的拆法,均來自 MCP 規格與架構概述。
Claude Code 中的 MCP:角色、使用情境與支援範圍
MCP 在 Claude Code 的角色定位
Claude Code 官方文件把 MCP 定位為:讓 Claude Code 連到「數百個外部工具與資料來源」的開源標準;透過 MCP server,Claude Code 可以存取你的工具、資料庫與 API。
在產品敘述上,Claude Code 概述頁也強調:透過 MCP,Claude Code 能從外部資料源擷取上下文(例如設計文件、協作工具資料)並完成更多整合型任務。
典型使用情境
Claude Code 的 MCP 文件提供了很具體的「可做什麼」例子(這些例子本身也反映 MCP 的設計哲學:把工具與資料接到 agent 工作流):
- 從問題追蹤器落地開發,並在 GitHub 建 PR。
- 連到 Sentry 與 Statsig 類監控/特徵服務分析資料。
- 查詢 PostgreSQL 類資料庫,做自然語言分析與抽樣。
- 整合 Slack/Figma/Gmail 類協作與設計工具,做內容更新或流程自動化。
此外,官方文件也提供「實際範例」:以 claude mcp add --transport http 連接 GitHub、Sentry 等服務,透過 /mcp 驗證後,直接用自然語言要求 Claude 查錯、審 PR、查資料庫。
風險提示:第三方 MCP 伺服器與提示注入
Claude Code 文件明確警告:使用第三方 MCP 伺服器需自行承擔風險,官方未驗證所有伺服器的正確性或安全性;若伺服器可能引入不受信任內容,需特別小心提示注入風險。
這與 MCP 規格的「Tool Safety」精神一致:工具代表任意程式碼執行路徑,必須審慎對待;Host 應在呼叫任何 tool 前取得使用者同意。
支援的作業系統與系統需求
Claude Code 的系統需求(官方)如下,亦是你要使用 Claude Code 內建 MCP 功能的基本前提:
| 類別 | 官方需求 | 備註 |
|---|---|---|
| 作業系統 | macOS 13.0+;Ubuntu 20.04+/Debian 10+;Windows 10+(搭配 WSL1/WSL2 或 Git for Windows) | 目標平台版本:未指定(以官方最低版本為準)。 |
| 記憶體 | 4 GB+ RAM | CPU/磁碟空間:未指定。 |
| 網路 | 需要網際網路連線 | 網路限制/代理等議題另見「網路設定」(官方)。 |
| Shell | Bash 或 Zsh 效果最佳 | Windows 實務上往往依賴 WSL/Git Bash。 |
| Node.js | Node.js 18+ 僅在「已棄用的 npm 安裝」需要 | 若你打算用 npx 啟動 stdio MCP 伺服器,仍需要系統具備 Node/npx;版本依該伺服器要求,官方未指定。 |
| Python | 未指定(Claude Code 本身不要求) | 但本文範例 MCP server(Python SDK)要求 Python >= 3.10。 |
MCP 伺服器新增與管理:安裝、啟用、設定檔與範圍
先釐清:Claude Code 的「MCP 安裝」通常指什麼
在 Claude Code 的語境裡,「安裝 MCP」多半不是安裝一個額外外掛,而是把 MCP server 以設定/指令新增到 Claude Code:可能是遠端 HTTP(建議)、遠端 SSE(棄用)、或本機 stdio。
你可以把它想像成:Claude Code 內建 MCP client;你要做的是把「要連的 server」加進可用清單,並完成必要的認證。
三種新增方式與選型建議
Claude Code 官方對三種方式的態度很清楚:遠端 HTTP 是建議選項、SSE 棄用、stdio 適合本機腳本與需直連系統資源的工具。

此流程圖的決策點與「HTTP 建議、SSE 棄用、stdio 場景」均出自 Claude Code MCP 文件。
設定檔與範圍:local、project、user、managed
Claude Code 把 MCP server 設定分成三個主要範圍(scope),再加上組織層級的 managed 控制:
- local scope(預設):私有、只在目前專案目錄可用;存於
~/.claude.json(在你的家目錄,但以專案路徑分區)。 - project scope:寫入專案根目錄
.mcp.json,設計成可簽入版本控制讓團隊共用。 - user scope:跨專案可用、仍私有;存於
~/.claude.json。 - managed-mcp.json(組織管控):系統路徑部署,對可用 MCP servers 施加獨佔控制或搭配 allow/deny 規則治理。
範圍衝突時的優先順序(同名 server):local > project > user。
.mcp.json 格式與環境變數擴展
Claude Code 會在 project scope 寫入標準化的 .mcp.json 格式,核心是 mcpServers 字典,每個伺服器可包含 command/args/env 等欄位。
更關鍵的是:.mcp.json 支援 ${VAR} 與 ${VAR:-default} 的環境變數擴展,且可用在 command、args、env、url、headers 等欄位,用來避免把 API key 等敏感值硬寫進 repo;若必要環境變數未設定且沒有預設值,Claude Code 會無法解析該配置。
.mcp.json 的安全審批與「自動批准」設定
Claude Code 明確指出:出於安全原因,在使用來自 .mcp.json 的 project scope server 前會提示批准;若要重設批准選擇,可用 claude mcp reset-project-choices。
同時,settings.json 也提供與此相關的治理開關:可自動批准所有 project MCP servers(enableAllProjectMcpServers),或只批准/拒絕特定名稱(enabledMcpjsonServers / disabledMcpjsonServers)。
在「從 0 到 1」階段,建議先維持預設的人工批准,等你完成風險評估與 allowlist/denylist 策略再逐步自動化。
容器與 DevContainer 選項
Claude Code 官方提供「開發容器(devcontainer)」作為一致且更安全的環境,並提到容器的隔離與防火牆規則能支持在受控情境下使用 claude --dangerously-skip-permissions 做無人值守操作。
這條路線特別適合「要把 MCP 整合帶進 CI/自動化」,但前提是你已理解 bypass 權限的風險與邊界。
MCP 常用指令與 CLI 範例
本節以 Claude Code 官方 MCP 文件為主,逐一拆解常用指令、參數與「預期輸出(示意)」;不同版本輸出格式可能略有差異,請以實際終端顯示為準。
claude mcp add:新增 MCP server
遠端 HTTP(建議)
用途:連接遠端/雲端 MCP server;官方稱其為「最廣泛支援的傳輸方式」,並建議優先使用。
可直接複製的命令:
// bash# 基本語法
claude mcp add --transport http <name> <url>
預期輸出(示意):
// textAdded MCP server: <name>
Transport: http
URL: <url>
Scope: local (default)
帶 --header 的案例(例如 Bearer token):
// bashclaude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
上面 --header 的用法與範例來自官方文件。
遠端 SSE(已棄用)
Claude Code 明確指出 SSE 傳輸已棄用,建議改用 HTTP(若可用)。
// bash# 基本語法
claude mcp add --transport sse <name> <url>
預期輸出(示意):
// textAdded MCP server: <name>
Transport: sse
Warning: SSE transport is deprecated. Prefer HTTP when available.
(SSE 範例同樣可用 --header 帶 API key/header。)
本機 stdio
用途:把一個本機行程(腳本、CLI、npx 套件)當作 MCP server;適合需要直接系統存取的工具。
關鍵語法(注意 --):
// bashclaude mcp add [options] <name> -- <command> [args...]
官方特別強調兩個常見踩坑:
- 選項順序:
--transport、--env、--scope、--header必須在<name>之前。 --分隔:用來區隔 Claude 的旗標與 server 自己的旗標,避免衝突。
範例(帶環境變數):
// bashclaude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \
-- npx -y airtable-mcp-server
此 stdio + --env 範例來自官方文件。
Windows 原生環境特例(非常重要):官方指出在原生 Windows(非 WSL)用 npx 的本機 MCP server 需要 cmd /c 包裝,否則可能遇到「連接已關閉」。
// bashclaude mcp add --transport stdio my-server -- cmd /c npx -y @some/package
claude mcp list / get / remove:管理 MCP servers
Claude Code 文件列出管理指令:
// bash# 列出已配置的伺服器
claude mcp list
# 取得單一伺服器詳情
claude mcp get <name>
# 移除伺服器
claude mcp remove <name>
同時可在 Claude Code 互動介面用 /mcp 檢查狀態。
預期輸出(示意):
// text$ claude mcp list
<name1> (http) <url> ✓ Connected
<name2> (stdio) <command ...> ✓ Connected
$ claude mcp get <name1>
# 顯示該 server type/url/command/env/scope 等詳細資訊
$ claude mcp remove <name2>
Removed MCP server: <name2>
/mcp:互動式狀態檢查與 OAuth 驗證
Claude Code 文件指出 /mcp 用途至少有兩個:
- 查看所有 MCP servers(含 plugin 提供的 server)。
- 對需要 OAuth 2.0 的遠端 server 進行驗證(會引導瀏覽器登入)。
官方也提到:驗證 token 會被安全儲存並自動重新整理;可在 /mcp 選單用「清除驗證」撤銷存取;若瀏覽器未自動開啟,可複製提供的 URL。
進階:預先配置 OAuth 憑證(英文官方文件補充)
有些 MCP servers 不支援「動態 client 註冊」,官方英文文件說明此時需要先在該服務的開發者入口註冊 OAuth app,取得 client id/secret,並在新增 server 時提供 --client-id、--client-secret、--callback-port;secret 會以遮罩輸入,並被存放於系統 keychain(macOS)或認證檔案,而不是寫進設定檔。
可複製命令(英文文件原意翻譯):
// bashclaude mcp add --transport http \
--client-id your-client-id --client-secret --callback-port 8080 \
my-server https://mcp.example.com/mcp
工具/資源/提示的日常使用方式
- 動態更新(list_changed):Claude Code 支援 MCP
list_changed通知,server 能在不重連的情況下更新可用 tools/prompts/resources。 - Prompts 變成斜線命令:MCP prompt 會以
/mcp__servername__promptname形式出現在/命令列表中;server/prompt 名稱會標準化(空格變底線)。 - 輸出限制:當任何 MCP 工具輸出超過 10,000 tokens Claude Code 會警告;預設最大 25,000,可用
MAX_MCP_OUTPUT_TOKENS調整。 - 逾時:可用
MCP_TIMEOUT調整 MCP server 啟動逾時(例:MCP_TIMEOUT=10000 claude)。
範例專案:用 Python 寫一個本機 MCP Server 並接到 Claude Code
專案前提與未指定項
- 範例語言:未指定(依需求可用 Python/Node);本文依要求選 Python。
- 範例目的:提供一個最小 MCP server(包含 tool/resource/prompt),以「本機 Streamable HTTP」方式跑起來,再用
claude mcp add --transport http接進 Claude Code。 - Python 版本:官方 MCP Python 套件
mcp要求 Python >= 3.10。 - HTTP 端點:MCP Python SDK quick example 預設可用
http://localhost:8000/mcp(官方示範讓 Inspector 連此端點)。
目錄結構
| 路徑 | 用途 |
|---|---|
mcp-demo/ | 專案根目錄 |
mcp-demo/server.py | MCP server 程式(FastMCP) |
mcp-demo/.env | (可選)本機環境變數;不建議提交 |
mcp-demo/.mcp.json | (可選)project scope MCP 設定,便於團隊共享(但 secrets 用環境變數擴展) |
安裝 Python MCP SDK
官方 MCP Python SDK 建議用 uv 管理專案,也支援 pip 安裝 mcp[cli]。
選項 A:使用 uv(偏向官方推薦的專案型用法):
// bashmkdir -p mcp-demo
cd mcp-demo
uv init .
uv add "mcp[cli]"
選項 B:使用 venv + pip(較通用):
//bashmkdir -p mcp-demo
cd mcp-demo
python -m venv .venv
# macOS/Linux:
source .venv/bin/activate
# Windows PowerShell:
# .venv\Scripts\Activate.ps1
pip install "mcp[cli]"
pip install "mcp[cli]" 與 uv add "mcp[cli]" 皆為官方 SDK 文件提供的安裝方式。
寫一個最小 FastMCP 伺服器
以下程式碼以官方 quick example 為骨架(tool/resource/prompt + mcp.run(transport="streamable-http")),但我把 prompt 內容稍微具體化,方便你在 Claude Code 端用 /mcp__... 直接測。
建立 server.py:
// pythonfrom mcp.server.fastmcp import FastMCP
# 建立 MCP server
mcp = FastMCP("Demo", json_response=True)
# Tool:加法(可預期結果,方便驗證)
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers and return the sum."""
return a + b
# Resource:動態資源,路徑帶參數
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Return a deterministic greeting string."""
return f"Hello, {name}!"
# Prompt:會出現在 Claude Code 的 / 命令列表中
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting instruction prompt."""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
if __name__ == "__main__":
# 用 Streamable HTTP transport 啟動(官方 quick example)
mcp.run(transport="streamable-http")
啟動 MCP server
(以你選的安裝方式擇一)
// bash# 若用 uv:
uv run --with mcp server.py
或(若用 venv + pip):
// bashpython server.py
預期輸出(示意):終端會保持前景執行,表示 server 正在監聽;依官方 quick example,你應可使用 http://localhost:8000/mcp 作為連線端點(用於 MCP Inspector 或 Claude Code HTTP transport)。
連到 Claude Code:新增 HTTP MCP server
在另一個終端機(同一台機器)執行:
// bash# 把本機 FastMCP server 以 HTTP transport 加進 Claude Code
claude mcp add --transport http demo http://localhost:8000/mcp
--transport http <name> <url> 的語法與「HTTP 為建議選項」來自 Claude Code MCP 文件。
預期輸出(示意):
// textAdded MCP server: demo
Transport: http
URL: http://localhost:8000/mcp
Scope: local (default)
在 Claude Code 內驗證與使用
- 啟動 Claude Code(在專案目錄內):
// bashcd mcp-demo
claude
- 在 Claude Code 互動介面輸入:
// text> /mcp
你應能在清單中看到 demo,並可檢查它是否已連線/啟用。/mcp 用於檢查伺服器狀態是官方支援用法。
- 測試 tool(加法)
在 Claude Code 中輸入自然語言測試(示例):
// text請使用 demo MCP server 的 add 工具計算 2 + 3,並回報結果。
預期結果(示意):模型會呼叫 add(a=2,b=3) 並回覆 5(最終回覆文字可能不同,但工具結果應一致)。「Tools 是可被模型呼叫以執行動作」屬 MCP 規格與架構定義。
- 測試 prompt(斜線命令)
在 Claude Code 輸入 /,你應看到類似 /mcp__demo__greet_user 的命令(名稱規則:/mcp__servername__promptname)。
直接執行:
// text> /mcp__demo__greet_user Ada formal
預期輸出(示意):該 prompt 的結果會被注入對話中,作為後續生成內容的依據。
- (可選)把設定改成 project scope 共享給團隊
若你希望團隊共用同一個 MCP server 設定,可以用 --scope project 新增(會寫入 .mcp.json)。
// bashclaude mcp add --transport http demo --scope project http://localhost:8000/mcp
注意:若連線 URL 或 port 因人而異,建議用 .mcp.json 的環境變數擴展來共享配置,而不是硬寫。
例如(示意 .mcp.json):
// json{
"mcpServers": {
"demo": {
"type": "http",
"url": "${MCP_DEMO_URL:-http://localhost:8000/mcp}"
}
}
}
權限與安全模型:從 MCP 到 Claude Code 沙箱
MCP 規格層:使用者同意、資料隱私與工具安全
MCP 規格在 Security/Trust & Safety 中提出幾個對 Claude Code 實作極關鍵的原則:
- 使用者必須明確同意並理解資料存取與操作,並保有控制權。
- Tools 代表任意程式碼執行路徑;Host 必須在呼叫任何 tool 前取得使用者同意;且工具描述應視為不可信(除非來自可信 server)。
這些原則會直接反映到 Claude Code 的「權限提示、白名單、沙箱」等機制設計。
Claude Code 層:權限提示、白名單與 bypass 風險
Claude Code 最佳實踐提到:預設情況下,Claude Code 會對可能修改系統的操作請求權限,包含檔案寫入、Bash 命令、MCP 工具等;為降低中斷可用 /permissions 做白名單化,或用 /sandbox 做 OS 級隔離。
同一頁也警告:--dangerously-skip-permissions 會略過所有權限檢查,可能導致資料遺失、系統損壞或被提示注入誘導外洩資料;僅建議在「沒有網路的沙箱」內使用。
沙箱(/sandbox):以 OS 級邊界降低提示疲勞與攻擊面
Claude Code 沙箱文件說明沙箱的目標:在明確的檔案系統與網路邊界內,減少反覆批准造成的「批准疲勞」,同時維持安全性;並指出其同時需要檔案系統與網路隔離。
其強制執行點包含:
- Linux 使用 bubblewrap;macOS 使用 Seatbelt 等 OS 安全原語。
- 存在「逃生艙」:當命令因沙箱限制失敗,Claude 可能以
dangerouslyDisableSandbox參數重試,但仍走一般權限流程;企業可透過allowUnsandboxedCommands=false禁用此機制。
MCP 伺服器治理:allowlist/denylist、managed-mcp.json 與鎖定策略
對組織而言,Claude Code MCP 文件提供兩種集中控制策略:
managed-mcp.json獨佔控制:使用者只能用 IT 部署的那批 servers(無法新增/修改其他)。- allowlist/denylist(
allowedMcpServers/deniedMcpServers):允許使用者新增,但限制可用 server 名稱、stdio 命令、或 URL 模式;拒絕清單具絕對優先順序。
若你要「完全鎖定」使用者新增 MCP servers,allowedMcpServers 設為空陣列 [] 會進入 lockdown 行為(官方定義)。
同時,settings.json 也提供 project .mcp.json 層級的批准/拒絕控制(enableAllProjectMcpServers、enabledMcpjsonServers、disabledMcpjsonServers),可在風險可控時減少每專案批准成本。
MCP 輸出與上下文治理
Claude Code 提供 MCP 輸出告警與上限:超過 10,000 tokens 警告、預設上限 25,000,可用 MAX_MCP_OUTPUT_TOKENS 調整;這對「查大表、拉長 log、輸出長報告」類 server 尤其重要,否則會把對話上下文淹沒。
(英文官方文件補充)若 MCP 工具描述消耗超過上下文 10%,Claude Code 會啟用 Tool Search 以按需載入工具,並可用 ENABLE_TOOL_SEARCH 控制;也可用 permissions.deny 禁用 MCPSearch。
常見錯誤、故障排除
常見錯誤與對應解法
新增 stdio server 後「連接已關閉」或無法啟動(Windows 原生)
官方指出:在原生 Windows(非 WSL)用 npx 啟動 stdio MCP server 時,需改用 cmd /c 包裝,否則可能出現「連接已關閉」。
.mcp.json 解析失敗
若 .mcp.json 使用了 ${VAR} 擴展,但 required env var 沒有設定且無 :-default,Claude Code 會無法解析該配置。
project scope 伺服器沒有生效或一直要求批准
Claude Code 會在使用 project scope .mcp.json server 前提示批准;若你要重來一次批准決策,可用 claude mcp reset-project-choices。
若你是「刻意要減少批准」,可評估 enableAllProjectMcpServers(全自動批准)或 enabledMcpjsonServers(只批准特定 server),但要把風險納入治理。
伺服器啟動太慢導致 timeout
官方提供 MCP_TIMEOUT 環境變數調整啟動逾時(例:MCP_TIMEOUT=10000 claude)。
MCP 工具輸出過大導致上下文警告
官方指出超過 10,000 tokens 會警告、預設上限 25,000;可用 MAX_MCP_OUTPUT_TOKENS 增加,或改造 server 讓輸出分頁/過濾。
設定檔找不到或想確認配置位置
官方列出配置檔位置:~/.claude/settings.json、.claude/settings.json、.claude/settings.local.json、~/.claude.json(含 MCP server 設定與 OAuth 工作階段)、.mcp.json(project MCP server)、以及 managed-settings.json/managed-mcp.json(系統路徑)。
除錯與重置(高風險操作要謹慎)
- 安裝健康檢查:官方建議安裝後執行
claude doctor。 - CLI 偵錯:可用
--debug並包含mcp類別(例如claude --debug "api,mcp")。 - 完全重置(會清除 MCP 設定、允許工具、歷史等):官方提供刪除
~/.claude.json、~/.claude/、.claude/、.mcp.json的方式。