MCP 與 CLI 的爭論是個偽命題:迎接 Code Mode 時代 (Code Mode: The Real Answer to the MCP vs CLI Debate)
原始來源與檔名:20260512_2026-05-12T093148+0800-MCP vs CLI was the wrong debate.md
來源:[[@akshay_pachaar]] / X (Twitter) — 2026-05-10
原始檔名:2026-05-12T093148+0800-MCP vs CLI was the wrong debate.md
NAPKIN | 餐巾紙
餐巾紙公式
The Old Way = Load ALL tool schemas into context upfront (150K tokens) -> Expensive & Slow The New Way (Code Mode) = Agent writes code to call tools + Lazy Loading Code Mode = Bash (for standard CLIs) + Typed Module Imports (for proprietary APIs via MCP) Result = Type safety of MCP + Speed of CLI + 98% reduction in token cost.
2025 年 AI 工程師為「該用 MCP 還是直接給 Shell」吵翻了天。MCP 提供了嚴謹的型別約定,但把所有工具的 Schema 一次塞進 Prompt 會吃掉海量 Token (動輒幾萬);給 CLI Shell 很輕量,但缺乏結構化回傳,模型常在猜測。Anthropic 與 Cloudflare 用 “Code Mode” 終結了這個蠢問題:不要把工具定義放在 Context 裡!讓 Agent 直接「寫程式」引入它需要的工具。這保留了 MCP 的型別安全,並將 Token 消耗砍了 98%。
一句話
本文解構了 2025 年 AI 領域最激烈的架構爭論:連接工具該用 MCP 協議還是直接開放 CLI 權限。作者指出這是一個錯誤的二元對立。真正的突破點在於 “Code Mode”(代碼模式):讓大模型在 Runtime 中「編寫代碼」來動態載入工具,而不是在對話一開始就把所有工具的定義塞進上下文。對於常見的系統操作,Agent 使用 Bash;對於特定的私有 API,Agent 透過 TypeScript
import來精準載入 MCP 型別定義,實現了安全與效率的完美融合。
餐巾紙草圖
[The Evolution of Tool Calling]
❌ Old MCP: Agent enters a room with every tool laid out on the table.
Prompt: System + [Playwright Schema] + [Git Schema] + [Salesforce Schema] -> 150k tokens.
❌ Pure CLI: Agent guesses how to use proprietary systems without docs.
✅ Code Mode: Agent writes a script that imports ONLY what it needs.
Agent outputs:
```typescript
import { updateCRM } from "@tools/salesforce"; // <--- Schema loads ONLY here
await updateCRM({ data });
Result: 2k tokens. Perfect contract.
## ROUND 1: SKELETON | 骨架掃描
**"這篇文章在說什麼"**
- **爭論背景**: 2025 年的兩派之爭。
- **MCP 懷疑派**: 成本太高。Playwright 吃掉 13.7K tokens,Chrome DevTools 吃掉 18K。什麼都還沒做就先燒了 5 萬 tokens。
- **CLI 防禦派**: CLI 在多租戶應用中容易崩潰,且缺乏「型別契約 (Typed contracts)」,Agent 面對陌生的內部 API 時只能盲猜。
- **重新定義問題 (The Reframe)**: 問題不在於通訊協議,而在於「在一開始把所有工具描述硬塞進 Context」的壞習慣。
- **Code Mode (代碼模式)**: Anthropic 在 2025 年底發布了 "Code execution with MCP",改變了遊戲規則。模型的工作從「在對話框裡呼叫工具」變成了「寫一段程式碼,透過 Runtime 呼叫工具」。
- **兩大基本原語**:
1. **Bash**: 用於所有內建命令 (git, grep, curl)。模型在預訓練時早就看過無數遍,不需再浪費 token 解釋。
2. **Typed Module Imports (型別模組載入)**: 用於專有 API (Salesforce, 內部系統)。Agent 像寫 TypeScript 一樣 `import` 特定模組。
- **三大好處**:
1. 型別簽章只有在 `import` 發生的那一刻才載入,實現 Lazy Loading。
2. 大量資料(如檔案列表)在程式碼中被處理、過濾,只把「摘要」返回給大模型,避免污染上下文。
3. 迴圈與轉換在原生代碼中執行,不再需要依賴模型的 ReAct 迴圈。
## ROUND 2: DISSECTION | 血肉解剖
**"憑什麼這麼說"**
### 核心論證鏈
1. **Token 的幾何級數爆炸**: 作者精準打擊了舊模式的痛點:Schema + 原始回傳數據雙向塞滿 Context Window。在 Anthropic 的例子中,原本需要來回傳遞的 Transcript 資料,在 Code Mode 中只是一段代碼裡的變數,根本不進 LLM 的 Context。這直接帶來了從 150K 到 2K tokens (98.7%) 的成本雪崩。
2. **目錄牆上的工具 vs 桌上的工具**: 這是一個極佳的隱喻。以前是強迫 Agent 在開工前背下所有工具的說明書(在系統提示詞中);現在是給 Agent 一個目錄,它決定要用哪個,才去牆上(import)把那份說明書拿下來。
3. **沒有誰取代誰,而是相互融合**: MCP 提供了關鍵的「型別契約 (Type safety)」,CLI 提供了「延遲載入 (Lazy loading) 的靈活性」。Code Mode 是一個能將兩者完美縫合的 Runtime。
### 關鍵證據
- 引用了 Cloudflare 的實踐:他們將包含 2500 個端點的 1.17M tokens 的龐大 API 目錄,壓縮到只剩下兩個工具 `search` 和 `execute`,耗費 1K tokens。Agent 自己寫程式去搜尋需要的端點再執行,這徹底證明了動態檢索工具的可行性。
### 邊界條件
- Code Mode 將系統的穩定性高度押注於大模型的「編程能力 (Coding ability)」。如果模型寫出有語法錯誤的 TypeScript,或是不懂得正確的 Import 路徑,整個鏈路依然會斷裂。這也就是為什麼 Code Mode 必須搭配頂級編程模型 (如 Opus 5 或 Codex-Spark) 與安全的 Sandbox 才能運作。
## ROUND 3: SOUL | 靈魂提取
**"還能怎么用"**
- **知識連結**: 完美呼應了 Garry Tan 的 `Skillify` 和《Agent Harness Engineering》。這篇文章揭示了 Harness 底層的 Tool Dispatch Registry 到底該長什麼樣子——不是一個臃腫的 JSON Schema 集合,而是一個支援動態 Import 的 TypeScript Runtime!
- **深層洞見**: **"Tool definitions belong in code, not in context. The model writes a few lines that call them. The runtime does the rest." (工具定義屬於代碼庫,不屬於大模型的上下文。模型只寫幾行呼叫它們的代碼,剩下的由執行環境搞定。) ** 這徹底宣告了「巨型 System Prompt 時代」的終結。未來的提示詞會越來越薄,而外圍的 Runtime 會承接所有複雜度。
- **行動呼籲**:
如果你還在把 10 個以上的自訂 Function/Tool 寫死在給 OpenAI 或 Anthropic API 的請求裡,立刻停止。開始重構你的應用,將工具封裝成獨立腳本,只告訴模型:「你需要什麼,自己寫一行腳本去呼叫它」。你的 API 帳單會立刻縮水一半以上。