這個單元解決什麼問題MCP(Model Context Protocol)是把外部工具與資料源接進 agent 的標準協定。你會學到 MCP 解決什麼整合問題、怎麼設定並驗證一個 server、如何依信任等級與權限範圍選擇 server,以及它和 CLI、內建工具相比各自適用的場景。最後建立「什麼時候該走 MCP、什麼時候不該」的明確判準。
學習目標
- 說明 MCP 是什麼、它解決哪種整合問題,以及為何需要一個跨工具協定。
- 設定並驗證一個 local MCP server(以 Claude Code 為主範本)。
- 依信任來源與權限範圍判斷是否引入某個 MCP server。
- 說明 MCP 與 CLI、內建工具的取捨,並知道何時優先走 CLI(連結 04-10)。
- 辨識 MCP 的主要攻擊面並採取最小必要的防護措施(連結 03-3)。
1. MCP 是什麼
MCP(Model Context Protocol)是 Anthropic 在 2024 年提出的開放標準,定義「外部工具與資料源如何被 LLM 呼叫」。一個 MCP server 對外暴露tools(可呼叫函式)、resources(可引用的資料)、prompts(可被執行的命令範本)三類介面;MCP client(如 Claude Code、Cursor、Claude Desktop、Codex 等)連上後把這些介面掛進自己的 context,模型就能像呼叫內建工具一樣呼叫它 [1]。
它解決的具體問題:整合碎片化。如果每個 LLM 工具(Claude Code、Cursor、Codex、Antigravity…)都自己造一份「接 GitHub / 接 Slack / 接 Postgres」的介面,N×M 的開發與維護成本會把整合推向付費牆。MCP 把這個問題壓到 N+M:server 寫一次、跨多個 client 複用;client 內建 MCP 能力、不必為每個服務客製。
關鍵概念:
- MCP server:提供
tools、resources、prompts的行程或服務。可以是本機 stdio 行程(npx server-foo),也可以是遠端 HTTP / WebSocket 服務。 - MCP client:模型端呼叫者。Claude Code 內建 MCP client,掛入 server 後把它提供的工具加入
mcp__<server>__<tool>命名空間。 - Transport:client 與 server 間的傳輸協定。Claude Code 支援 stdio(本機行程)、http(含
streamable-http別名,為最廣泛支援的雲端傳輸)、sse(deprecated)、ws(WebSocket,給需要主動推送事件的 server)[1]。
2. 接一個 server:設定、註冊、驗證
Claude Code 提供三條安裝路徑(截至 2026-06,依官方 MCP 章節 [1]):2.1 透過 claude mcp add CLI(最常用)
2.2 三種 scope
設定存在哪、是否團隊共享,由--scope 決定 [1]:
| Scope | 載入範圍 | 共享 | 儲存位置 |
|---|---|---|---|
local(預設) | 當前專案 | 否 | ~/.claude.json(在該專案的 path 內) |
project | 當前專案 | 是(進版控) | 專案根目錄的 .mcp.json |
user | 你的所有專案 | 否 | ~/.claude.json |
.mcp.json 來)在 Claude Code 啟動時會先標為待核准,需使用者互動式 review 後才啟用 [1]。這是 CVE-2025-59536 之後官方加的防護:.mcp.json 不能在使用者不知情時自動核准陌生 server。
「local scope」與「local settings」是兩件事MCP local scope 存
~/.claude.json;一般的 local settings 是 .claude/settings.local.json。命名相近但層級不同 [1]。2.3 手動編輯 .mcp.json
如果走 project scope 或想用環境變數展開:
${VAR} 與 ${VAR:-default} 兩種展開語法都支援;未設定且無預設會在 Claude Code 解析設定時直接 fail [1]。timeout 是該 server 每次工具呼叫的硬性時鐘上限(毫秒),可用 MCP_TIMEOUT 環境變數覆寫。
2.4 驗證連線
裝完後跑:3. 選 server:信任、權限、是否官方
引入一個 MCP server 前,過這三題:3.1 信任來源三級
| 等級 | 來源 | 處置 |
|---|---|---|
| 高 | Anthropic 官方策展的 claude-plugins-official 市集內附帶的 MCP server;或工具原廠(GitHub、Notion、Atlassian、Stripe 等)自家發布 | 仍要 review .mcp.json 內容與 server 程式碼 |
| 中 | 知名開源 repo,有 issue tracker、有 release、有社群維護 | 額外掃 rg 供應鏈指紋(見第 5 節) |
| 低 | 私人 URL、fork 很久沒更新、單人維護 | 預設不安裝;要裝先讀完源碼 |
3.2 權限範圍
server 在.mcp.json 宣稱的 env、args 暗示它要哪些資源。把它對應到「這個 server 真的需要這個嗎?」:
- 一個只做
grep的 server 不需要 write 權限。 - 一個只查 issue 的 server 不需要對外網路。
- 一個 server 同時要 write + 對外網路 +
~/.ssh路徑,最高警覺。
code.claude.com/docs/en/permissions 提供 Bash / Edit / Read 的白名單 / 黑名單 / ask 三層規則;對 MCP server 的權限收斂走 mcp__<server>__* 的 tool 級規則 [2]。
權限審查範例一個 server 的 審查點:這個 server 是 Slack 官方嗎?OAuth scope 列了
.mcp.json 設定:chat:write(可發訊息),你工作流真的需要從 agent 自動發訊息嗎?若不需要,把 chat:write 從 scope 拿掉,只在需要時再放回 [1]。oauth.scopes 讓你把 OAuth 權限收斂到最小(精準 scope 鎖定)。3.3 Plugin 提供的 MCP server
Plugin 可以把 MCP server 打包進去 [1]。claude-plugins-official 與 claude-community 兩個市集上的 plugin,啟用時其內含的 MCP server 會自動連線。同樣要 review:plugin 內的 .mcp.json 或 plugin.json 的 mcpServers 區段,是看 server 設定的地方。
4. 與 CLI、內建工具的取捨
4.1 判準
| 情境 | 優先選擇 |
|---|---|
該操作有完整 CLI(git、gh、docker、kubectl、psql 等) | CLI(見 04-10 CLI 優先) |
| 該操作 Claude.ai / Claude Code 內建就有(Web search、Read、Edit) | 內建 |
| 該服務只提供 REST / GraphQL API,沒有合適 CLI | MCP(包成 server)或 WebFetch |
| 該服務已有官方 MCP server(如 GitHub、Notion、Atlassian、Stripe) | MCP(最常見正解) |
| 同一操作要跨多個 client(Claude Code + Cursor + Codex)共用 | MCP(跨工具標準的價值所在) |
4.2 不適合 MCP 的場景
- 一次性命令:用 Bash tool 跑
gh pr list就好,沒必要裝 GitHub MCP server。 - 重型 shell pipeline:
find | xargs grep | sed | jq之類的多步管道,shell 處理最直接;包成 MCP 反而要拆成多次工具呼叫,每次呼叫都吃 context。 - 需要高度可審計的動作:CLI 指令進 shell history;MCP 呼叫要額外日誌設定。
4.3 同一操作不混用 CLI 與 MCP
混用是隱性 bug 來源:你在 shell 跑gh pr create,同一時間 agent 用 MCP 走 mcp__github__create_pull_request,兩個都成功了,狀態就不一致。一個操作選定一條路,fallback 切換後不回頭混用(04-10 詳述)。
5. 安全邊界
MCP 是高槓桿整合介面,也是高槓桿攻擊面。連結 03-3 安全、隱私與供應鏈風險 與 04-7 Plugin 的供應鏈 SOP,這裡只列 MCP 特有的:5.1 攻擊面
| 攻擊面 | 描述 |
|---|---|
repo 帶入的 .mcp.json | 專案層 server 走 .mcp.json,clone 陌生 repo 後 server 可能自動掛上。project scope 需 user approval,但使用者若未仔細閱讀確認,惡意 server 就已啟用 |
| tool 回傳值注入 | 外部 server 回傳的字串直接進 context,是 prompt injection 路徑 |
enableAllProjectMcpServers 設定 | 全開,預設拒絕 |
headersHelper 任意指令執行 | v2.1.64+ 引入,project / local scope 時仍會被執行。project scope 信任對話框通過後就會跑 [1] |
oauth.scopes 過寬 | server 申請超過實際需要的 scope |
5.2 最小必要防護
~/.ssh、~/.aws、**/.env*)在 permissions.deny 阻擋;MCP 工具呼叫要有日誌;server 啟用清單每季 review 一次。
5.3 Tool search 與 context 控制
Claude Code 預設開啟 MCP tool search:MCP tools 不會在 session 啟動時全量載入 context,而是 Claude 透過ToolSearch 動態發現 [1]。這大幅降低多 MCP server 的 context 成本,但不是安全機制。已連線的 server 仍可能因任務相關被叫到。對特別敏感的 server,可設 alwaysLoad: false(預設)外加在 permissions.deny 設 mcp__<server>__* 阻擋。
6. 工具對照
| 概念 | Anthropic Claude(主範本) | OpenAI | GitHub Copilot | Cursor(短提) | |
|---|---|---|---|---|---|
| 設定檔(專案層) | .mcp.json [1] | mcp_config.json 或平台原生 [需確認原始出處] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | .cursor/mcp.json [需確認原始出處] |
| 設定檔(使用者層) | ~/.claude.json [1] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | ~/.cursor/mcp.json [需確認原始出處] |
| 支援 stdio | 是 [1] | 是 [需確認原始出處] | 是 [需確認原始出處] | 是 [需確認原始出處] | 是 |
| 支援 http(SSE 替代) | 是(streamable-http 別名)[1] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] |
| 自動核准機制(安全風險) | project scope 預設待核准 [1] | 設定式 | 設定式 | 設定式 | 設定式 |
| Plugin 內 MCP | 支援 [1] | 不適用 | 不適用 | 透過 Extensions | 不適用 |
| 官方 server 目錄 | claude.ai/directory [1] | 設定式 [需確認原始出處] | 設定式 [需確認原始出處] | GitHub Marketplace [需確認原始出處] | 設定式 [需確認原始出處] |
| Tool search 預設 | 開啟 [1] | 設定式 | 設定式 | 設定式 | 設定式 |
| OAuth 支援 | 是(HTTP)[1] | 設定式 | 設定式 | 設定式 | 設定式 |
命名與邊界
- Claude Code 內建 MCP client;不需要裝 plugin 就能用 MCP server。
- OpenAI、Antigravity、GitHub Copilot、Cursor 對 MCP 的支援深度與時程各異;上表「需確認原始出處」項目需查各家當前官方文件。
- SSE transport 已在官方文件標為 deprecated;新設定用
http[1]。
動手做
30 分鐘練習
- 接一個 server 跑通(15 分鐘):裝
claude mcp add --transport http notion https://mcp.notion.com/mcp(或選你已有的帳號,如 Sentry、GitHub)。在 Claude Code 內/mcp確認狀態,跑一次簡單呼叫驗證連線。 - 寫 project scope 設定(10 分鐘):把你目前用 MCP 完成的一個操作,搬到
.mcp.json走 project scope;下次啟動 Claude Code 觀察 user approval 對話框,決定該批准還是拒絕。 - 安全掃描(5 分鐘):對
~/.claude.json與.mcp.json跑本節的rg三條掃描,把所有 hit 記下來並人工 review。
常見誤區
自我檢核
通過本單元的標準
- 你能在一分鐘內說出 MCP 三種 scope 的差異,以及哪一種會被 user approval 攔下?
- 你能列出至少三條判斷「是否該裝某個 MCP server」的問題?
- 你目前主用的 MCP server(或考慮裝的),你能說出它的信任來源等級、它宣稱的權限範圍、以及你驗證過它確實只用那些權限嗎?
- 你能在裝一個新 MCP server 之前,跑完三條
rg供應鏈掃描嗎?
來源與延伸閱讀
事實主張依官方文件,快變動項標註截至 2026-05。-
[1] Anthropic, “Connect Claude Code to tools via MCP,” code.claude.com, 2026. [Online]. Available: https://code.claude.com/docs/en/mcp (截至 2026-06;含四種 transport、三種 scope、OAuth、
headersHelper、tool search、streamable-http別名、安全提示與claude.ai/directory官方 server 目錄) -
[2] Anthropic, “Configure permissions,” code.claude.com, 2026. [Online]. Available: https://code.claude.com/docs/en/permissions (截至 2026-06;MCP tool 級
mcp__server__*白名單 / 黑名單規則、與Bash/Edit規則的搭配) - [3] Model Context Protocol, “MCP specification,” modelcontextprotocol.io, 2026. [Online]. Available: https://modelcontextprotocol.io (截至 2026-06;官方規格首頁)
- [4] Snyk, “ToxicSkills: 2026 Report on Malicious Skills in the Wild,” snyk.io, 2026. [Online]. Available: https://snyk.io (截至 2026-06;含 Skill / MCP server 供應鏈風險統計)[需確認原始出處:Snyk ToxicSkills 2026-02 報告的可引用 URL]
- 安全面見 03-3 安全、隱私與供應鏈風險。
- CLI 優先心法見 04-10 CLI 優先。
- 內建工具盤點見 04-8 各家 AI 的內建工具與功能。
- Plugin 內 MCP server 見 04-7 Plugin。
- Subagent 透過
mcpServers預載 server 見 04-5 Subagent。 - Hook 強制執行見 04-6 Hooks。