CLI 取代 MCP Tools:2026 年 AI Agent 的最佳實踐
CLI 取代 MCP Tools:2026 年 AI Agent 的最佳實踐
TL;DR
- CLI 取代 MCP:省 Token(無 schema)、更可靠(LLM 懂
--help)、零伺服器 - Skills 單獨就夠:不需要每次都跑 MCP Tool Search
- Lazy Loading:啟動只載 metadata,匹配時才讀 vector index,省 85% token
- Simon Willison 名言:"幾乎所有 MCP 都能 CLI 取代,Skills 讓它更簡單。"
Part 1:為什麼 CLI 比 MCP 更適合 AI Agent?
1.1 MCP 的問題
我原本的 Career RAG 專案用 MCP Server 提供工具,但遇到一些痛點:
| 問題 | 說明 |
|---|---|
| Schema 佔 Token | 每個 MCP tool 的 JSON Schema 需要載入 context |
| 伺服器維護 | 需要啟動獨立進程,偶爾會掛 |
| 延遲 | HTTP/SSE 通訊比本地指令慢 |
| 除錯困難 | MCP 錯誤訊息不直觀 |
1.2 CLI 的優勢
| 面向 | MCP Tools | CLI in Skills |
|---|---|---|
| Schema 描述 | 佔 token | LLM 自動 cli --help 學用法 |
| 部署 | 伺服器維護 | 本地指令,零依賴 |
| 延遲 | HTTP/SSE | 即時 shell |
| Vector Index | MCP call | lancedb-cli search --hybrid 一行搞定 |
關鍵洞察:LLM 天生就懂 CLI。它見過無數 --help 輸出,知道怎麼組合參數。相比之下,MCP Schema 是「新語言」,需要額外描述。
1.3 我的遷移:MCP → CLI + Skills
Before(MCP):
// mcp-server/index.ts
server.setRequestHandler("search_material", async (params) => {
// 複雜的 MCP 協議處理
});
After(CLI + Skills):
# 直接執行
bun run search-material-cli.ts --focus "AI" --limit 5
# SKILL.md
## 搜尋素材
cd mcp-server && bun run search-material-cli.ts --focus "{query}" --limit 5
結果:
- 不需要 MCP Server 進程
- AI Agent 直接呼叫 CLI
- 錯誤訊息更清楚
Part 2:Skills vs MCP Tool Search 的分工
2.1 常見誤解
"每次搜尋都要先跑 MCP Tool Search 嗎?"
不是! Skills 單獨就能處理 vector index。MCP Tool Search 只在 Skills 內 MCP tools 太多時才介入優化。
2.2 分工對比
| 階段 | Skills(單獨用) | 加 MCP Tool Search(Scale 時) |
|---|---|---|
| Metadata | YAML desc/keywords 匹配 query | 同左,但工具 schema 懶搜尋 |
| Vector Index | SKILL.md 指令執行 | MCP schema 只載相關 |
| 觸發 | 自動(語意匹配) | Skills 先觸發,內部優化 |
| Token | 低 | 超低(省 85%) |
2.3 何時需要 MCP Tool Search?
| 情境 | 需要 Tool Search? |
|---|---|
| MCP Tools < 5 個 | ❌ Skills 夠用 |
| MCP Tools 5-10 個 | 🟡 自動判斷 |
| MCP Tools > 10 個 | ✅ 自動啟用 |
| Schema 佔 context > 10% | ✅ 強制啟用 |
我的案例:只有 LanceDB + 少數工具,Skills 直接跑,不需要 Tool Search。
Part 3:Lazy Loading 機制詳解
3.1 傳統 vs Lazy Loading
傳統(全載):
啟動 Claude Code
↓
全載 MCP schema + Skills 內容
↓
67k tokens 消耗
↓
用戶提示
Lazy Loading:
啟動 Claude Code
↓
只載 metadata index (YAML desc + keywords)
↓
~30 tokens 消耗
↓
用戶提示 "搜 Kubernetes deploy"
↓
語意匹配 metadata(0.1s,無向量查詢)
↓
觸發 LanceDB skill
↓
**才** 執行 CLI / MCP call(<100ms)
↓
context 只塞 top-5 chunks(~2k tokens)
3.2 實測數據
在我的 Career RAG 專案中:
| 指標 | 傳統 | Lazy Loading | 節省 |
|---|---|---|---|
| 啟動 token | ~5k | ~200 | 96% |
| 每次搜尋 token | ~8k | ~2k | 75% |
| 冷啟動延遲 | ~2s | ~0.3s | 85% |
3.3 Lazy Loading 的關鍵
- Metadata Index:啟動時只載 SKILL.md 的 YAML frontmatter
- 語意匹配:用戶 query 與 metadata 的 description/keywords 匹配
- On-demand Loading:匹配後才讀完整 SKILL.md 內容
- 工具延遲載入:只在執行時載入相關 MCP schema
Part 4:實作指南 — Vector Index with CLI
4.1 建立 CLI
// search-material-cli.ts
import { searchMaterialByJdFocus } from "./src/tools/search-material.js";
const args = parseArgs(process.argv);
const results = await searchMaterialByJdFocus({
focus: args.focus,
limit: args.limit,
use_bm25: true,
use_reranking: true,
});
console.log(JSON.stringify(results, null, 2));
4.2 建立 Skill
---
name: resume-material-search
description: Search resume materials using hybrid vector + BM25 search
keywords: ["vector", "search", "resume", "material", "lancedb"]
---
# Resume Material Search
## 使用方式
```bash
cd mcp-server && bun run search-material-cli.ts \
--focus "{query}" \
--skills "{skills}" \
--limit 5
輸出格式
JSON array with: id, text, relevance_score, skills
### 4.3 測試 Lazy Loading
```bash
# 確認版本
claude --version # 需要 2.1.9+
# 列出 Skills
claude skills list
# 測試匹配
claude "搜尋 Kubernetes 相關履歷素材"
# → 自動觸發 resume-material-search skill
# → 執行 CLI
# → 回傳結果
Part 5:架構選擇決策樹
你的工具數量?
├── 1-3 個工具
│ └── ✅ 純 CLI + Skills,不需要 MCP
│
├── 3-10 個工具
│ ├── 工具間需要共享狀態?
│ │ ├── 是 → MCP Server
│ │ └── 否 → CLI + Skills
│ └── 需要跨 IDE 共用?
│ ├── 是 → MCP Server
│ └── 否 → CLI + Skills
│
└── 10+ 個工具
└── MCP Server + Tool Search 自動優化
我的選擇
Career RAG 專案有 7 個工具,全部用 CLI + Skills:
| 工具 | 原本 | 現在 |
|---|---|---|
| save_jd_analysis | MCP | save-jd-cli.ts |
| search_material | MCP | search-material-cli.ts |
| verify_skill_coverage | MCP | verify-skill-cli.ts |
| ... | ... | ... |
好處:
- 無需維護 MCP Server
- IDE 終端直接測試
- 錯誤訊息更清楚
- Token 消耗更低
關鍵學習
- CLI 是 LLM 的母語:它見過無數
--help,比 MCP Schema 更直觀 - Skills 已足夠:大多數場景不需要 MCP Tool Search
- Lazy Loading 是關鍵:省 85% token,啟動快 6 倍
- 遷移成本低:把 MCP handler 包成 CLI,Skills 寫呼叫方式
- Simon Willison 說得對:"幾乎所有 MCP 都能 CLI 取代"
相關資源
- Claude Code CLI Reference
- Anthropic Engineering: Advanced Tool Use
- Simon Willison on Skills
- 我的 Career RAG 專案
- ← Previous
MCP Tools vs Agent Skills:我到底需要哪一個? - Next →
GraphRAG 深度解析:自動知識圖譜的威力與局限