Claude Code 從 0 到 1 攻略 – MCP

本文聚焦於 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+ RAMCPU/磁碟空間:未指定。
網路需要網際網路連線網路限制/代理等議題另見「網路設定」(官方)。
ShellBash 或 Zsh 效果最佳Windows 實務上往往依賴 WSL/Git Bash。
Node.jsNode.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} 的環境變數擴展,且可用在 commandargsenvurlheaders 等欄位,用來避免把 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>

預期輸出(示意):

// text
Added MCP server: <name>
Transport: http
URL: <url>
Scope: local (default)

帶 --header 的案例(例如 Bearer token):

// bash
claude 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>

預期輸出(示意):

// text
Added MCP server: <name>
Transport: sse
Warning: SSE transport is deprecated. Prefer HTTP when available.

(SSE 範例同樣可用 --header 帶 API key/header。)

本機 stdio

用途:把一個本機行程(腳本、CLI、npx 套件)當作 MCP server;適合需要直接系統存取的工具。

關鍵語法(注意 --):

// bash
claude mcp add [options] <name> -- <command> [args...]

官方特別強調兩個常見踩坑:

  • 選項順序--transport--env--scope--header 必須在 <name> 之前。
  • -- 分隔:用來區隔 Claude 的旗標與 server 自己的旗標,避免衝突。

範例(帶環境變數):

// bash
claude 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 包裝,否則可能遇到「連接已關閉」。

// bash
claude 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)或認證檔案,而不是寫進設定檔。

可複製命令(英文文件原意翻譯):

// bash
claude 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.pyMCP 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(偏向官方推薦的專案型用法):

// bash

mkdir -p mcp-demo
cd mcp-demo

uv init .
uv add "mcp[cli]"

選項 B:使用 venv + pip(較通用):

//bash

mkdir -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

// python

from 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):

// bash

python 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 文件。

預期輸出(示意):

// text

Added MCP server: demo
Transport: http
URL: http://localhost:8000/mcp
Scope: local (default)

在 Claude Code 內驗證與使用

  1. 啟動 Claude Code(在專案目錄內):
// bash

cd mcp-demo
claude
  1. 在 Claude Code 互動介面輸入:
// text

> /mcp

你應能在清單中看到 demo,並可檢查它是否已連線/啟用。/mcp 用於檢查伺服器狀態是官方支援用法。

  1. 測試 tool(加法)

在 Claude Code 中輸入自然語言測試(示例):

// text

請使用 demo MCP server 的 add 工具計算 2 + 3,並回報結果。

預期結果(示意):模型會呼叫 add(a=2,b=3) 並回覆 5(最終回覆文字可能不同,但工具結果應一致)。「Tools 是可被模型呼叫以執行動作」屬 MCP 規格與架構定義。

  1. 測試 prompt(斜線命令)

在 Claude Code 輸入 /,你應看到類似 /mcp__demo__greet_user 的命令(名稱規則:/mcp__servername__promptname)。

直接執行:

// text

> /mcp__demo__greet_user Ada formal

預期輸出(示意):該 prompt 的結果會被注入對話中,作為後續生成內容的依據。

  1. (可選)把設定改成 project scope 共享給團隊

若你希望團隊共用同一個 MCP server 設定,可以用 --scope project 新增(會寫入 .mcp.json)。

// bash

claude 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 文件提供兩種集中控制策略:

  1. managed-mcp.json 獨佔控制:使用者只能用 IT 部署的那批 servers(無法新增/修改其他)。
  2. allowlist/denylist(allowedMcpServers / deniedMcpServers:允許使用者新增,但限制可用 server 名稱、stdio 命令、或 URL 模式;拒絕清單具絕對優先順序。

若你要「完全鎖定」使用者新增 MCP servers,allowedMcpServers 設為空陣列 [] 會進入 lockdown 行為(官方定義)。

同時,settings.json 也提供 project .mcp.json 層級的批准/拒絕控制(enableAllProjectMcpServersenabledMcpjsonServersdisabledMcpjsonServers),可在風險可控時減少每專案批准成本。

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 的方式。

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *