別讓 MCP 吃掉你 Agent 的 Context
這份投影片是 1920×1080 畫的,在手機上會縮到很小。橫放、按下面的「全螢幕」或 「+」放大,也可以直接讀底下的旁白逐字稿 —— 每一頁的內容那裡都有。
旁白
一百九十九個工具,每一輪光說明書就四萬個 token。那一輪我一個都沒用到。
逼出這套做法的是三個坑。帳單、機器、還有模型自己挑錯。
我後來把工具接入拆成五層。接下來四分鐘,三個坑跟這套做法的代價,一起講。
我打開 Claude Code,什麼都還沒問。那一輪已經花掉四萬個 token。
錢花在哪?工具的說明書。
我接了二十三個 MCP server,加起來一百九十九個工具。那一輪我一個都沒用到,schema 照樣塞進 context。
最早發現這件事,是在 Playwright 上。
Playwright MCP 的 tool schema 特別大,每一輪都注入 system prompt。那一輪我根本沒開瀏覽器,token 照樣付。
我把它換成 Playwright CLI。token 用量掉了九成八。
第二個坑是機器直接扛的。MCP server 長到二十三個以後,我同時開了三個 Claude Code session。
每開一個,所有 MCP 進程等比複製一次。三個 session,六十九個常駐進程。RAM 跟 CPU 線性吃滿。
第三個坑是 LLM 自己的。工具一多,它挑錯的機率就上升。
業界的建議是每個 MCP server 不超過十個 tool。八個 tool,一個 schema 大概兩百 token,每輪就是一千六。用不用都在付。
來算這筆帳。
MCP 八個工具,每輪一千六百 token 的 schema 開銷。同樣的操作走 CLI,每輪是零。實際的輸入輸出另計。
一千六聽起來不多。乘上五十輪對話就是八萬個 token。全丟在你沒用到的說明書上。
有人比我更極端。Cloudflare 的 Code Mode,整個 IDE 只暴露兩個 tool。
一個 search,一個 execute。其他操作全部在沙盒裡即時寫。他們證明了 tool 數量跟能力成反比。
所以我把工具接入拆成五層。由下往上是 Service、SDK、CLI、MCP、Skill。
Service 是業務邏輯本體。FastAPI 的 routes 加資料庫,就這樣。
SDK 是唯一碰 HTTP 的地方。上面每一層都 import 它,誰都不自己發請求。
讀操作全部丟給 CLI。零 schema 開銷,任何能跑 shell 的東西都能用。
MCP 只做寫的操作。因為 LLM 傳參數,得先驗證格式對不對。
最上面的 Skill 做意圖路由。判斷這次是讀還是寫,讀就走 CLI,寫才走 MCP。
這樣拆最實際的好處是 bug 只修一次。SDK 改一行,CLI 跟 MCP 同時好。
沒有 SDK 這層,每個消費者都得自己實作 HTTP、認證、錯誤處理。改一處漏一處。
如果你自己用 Agent SDK 寫 client,還有一招更直接。
MCP protocol 的 tools list 一定回傳全部工具,這個你改不了。但送進 API 的 tools 陣列放什麼,完全你決定。
我那邊收到一百九十九個。全塞,每輪四萬 token。
先用 BM25 篩到最相關的五到十個再送,每輪剩兩千。
用 Claude Code 這種現成 client,它幫你全塞。自建 client,你自己篩。
這套架構有代價,我一起講。
三套封裝要一起維護。API 改了,SDK、CLI、MCP 都得跟著改。團隊小的時候還可控,人一多就得靠自動化測試兜住。
除錯路徑也變長。出 bug 要先判斷是哪一層:Service 邏輯錯、SDK 參數漏傳、CLI 解析有誤,還是 MCP schema 沒更新。層越多,排查越慢。
還有一點,不是所有模組都值得。被多種消費者用到的核心模組才划算,內部自己用的小工具做五層只是負擔。
我自己的判準只有一條。一個操作,一週要用超過三次。參數組合夠複雜。而且需要能被別人發現。三個都沾到,才值得做成永久 tool。
不然就丟沙盒即時寫,用完就扔。
你現在可以去數一下。自己接了幾個 MCP server,每個幾個 tool。乘兩百,那就是你每輪的固定帳單。
所以整套就一條分界:讀走 CLI,寫走 MCP。SDK 是唯一碰 HTTP 的地方,Skill 決定往哪走。
完整版跟可以算你自己帳單的互動工具,掃這個 QR code。
鍵盤 ← → 翻頁;
點一下投影片之後,Home / End 跳頭尾。
手機左右滑。網址列的 #3 直接開到第 3 頁。