跳至主要內容
精選 claude-code mcp 架構 提案

MCP 的未來:從常態開啟到按需載入

一個關於 Claude Code 架構演進的提案 - 將 MCP 伺服器指派給特定 Agent 和 Skill,而非在 Session 開始時全部載入。

2026年1月12日 5 分鐘閱讀 作者:Claude World

問題:Context 預算的壓力

如果你使用 Claude Code 搭配多個 MCP 伺服器,你可能已經注意到:在你輸入第一條訊息之前,context window 就已經開始被佔用了。

這是一個典型的情況:

MCP 伺服器大約 Token 消耗來源
GitHub (27 tools)~18,000Issue #11364
AWS MCP servers~18,300Issue #7172
Cloudflare~15,000+社群回報
Sentry~14,000社群回報
Playwright (21 tools)~13,647Scott Spence
Supabase~12,000+社群回報
平均每個 tool~550-850Issue #11364

實測影響:啟用 7 個 MCP 伺服器時,光是工具定義就消耗 67,300 tokens(200k context 的 33.7%)。即使是最小化的 3 伺服器配置也消耗 42,600 tokens(21.3%)。

諷刺的是,這些 MCP 中有很多在特定 session 中根本不會被使用。那個佔用 14,000 tokens 的 Sentry 整合?你今天可能根本不需要它。但它就在那裡,每次都在消耗 context。

觀察:Fork 架構已經存在

Claude Code 2.1.x 引入了一個強大的功能:Skills 的 context: fork。這允許 skills 在隔離的 context 中運行,擁有自己的工具權限和狀態。

# 具有 forked context 的 skill
---
description: 部署到生產環境
context: fork
allowed-tools: [Bash, Read]
---

當這個 skill 運行時,它會獲得自己的 context 泡泡。變更不會污染主對話。乾淨、隔離、有效。

關鍵洞察:如果我們可以 fork context,為什麼不能 fork MCP 存取權限呢?

提案:MCP Context 隔離

重要區別:這個提案與一般的「延遲載入」方案有本質上的不同。我們不是建議在主 context 中動態載入 MCP。相反,我們提議將 MCP 隔離到 forked agent/skill context 中,讓主 context 永遠保持乾淨。

方案主 Context載入時機複雜度
傳統 Lazy Loading需要時被 MCP 佔用Runtime 動態高(狀態管理)
我們的提案:Context 隔離永遠保持乾淨Fork 時一次載入低(使用現有 context: fork
傳統 Lazy Loading:
Main Context ──[需要 MCP]──> 載入 MCP ──> Main Context(被佔用)

我們的提案(Context 隔離):
Main Context(保持乾淨)
    └── Fork Agent Context ──> 載入 MCPs ──> 隔離的 Context
                                              └── 結束後釋放

想像這樣的架構:

# agents/database-specialist.md
---
name: database-specialist
description: 資料庫操作專家
tools: [Read, Bash, Grep]
mcp: [postgres, redis]        # ← 只有這個 agent 運行時才載入
context: fork
---
# skills/deploy/SKILL.md
---
description: 部署到生產環境
mcp: [vercel, github]         # ← 只有執行 /deploy 時才載入
context: fork
---

主 session 保持精簡:

Main Session(精簡)

    ├── 只有基礎 MCP:filesystem, memory
    │   (~1,300 tokens 而非 20,000+)

    ├── Task: database-specialist(forked)
    │   └── 載入:postgres, redis(僅在此處)

    └── Skill: /deploy(forked)
        └── 載入:vercel, github(僅在此處)

真實案例:現代工作中樞的困境

這是許多人每天面對的情況:

多平台現實

現代知識工作者需要同時處理大量平台:

類別平台
程式碼託管GitHub, GitLab, Bitbucket
專案管理Jira, Linear, Asana, Notion
通訊協作Slack, Discord, Teams, Email
CI/CDVercel, Netlify, AWS
監控Sentry, Datadog, PagerDuty
CRM/商務Salesforce, HubSpot, Stripe

這些都有對應的 MCP。現在想像這個兩難:

選項 A:全部安裝

Session 開始時載入所有 MCP:
- github (~2,000 tokens)
- gitlab (~2,500 tokens)
- slack (~3,000 tokens)
- jira (~4,000 tokens)
- notion (~2,500 tokens)
- sentry (~14,000 tokens)
- ...還有另外 10 個

總計:50,000+ tokens,在你開始工作之前就消耗了。
這可能是你 context 預算的 50%。沒了。

選項 B:按專案分開

專案 A: github + vercel
專案 B: gitlab + jira
專案 C: slack + notion

這完全違背了初衷。Claude Code 的強大之處在於它是統一的指揮中心 - 一個協調所有工具的地方。按專案分割意味著:

  • 不斷切換 context
  • 失去跨平台洞察
  • 無法統一自動化工作流

選項 C:按需載入的未來

# skills/work-hub/SKILL.md
---
description: 統一工作管理中樞
mcp:
  communication: [slack, discord]
  code: [github, gitlab]
  projects: [jira, notion]
  monitoring: [sentry]
context: fork
---

現在 Claude Code 成為它應該成為的樣子:你數位工作生活的真正中樞神經系統。需要:

  • 檢查 GitHub PR + 通知 Slack + 更新 Jira?一個指令。
  • 審查 GitLab MR + 發到 Discord + 記錄到 Notion?一個指令。
  • 除錯 Sentry 錯誤 + 建立 GitHub issue + 在 Linear 分配?一個指令。

每個工作流只載入它需要的 MCP。你的主 context 保持乾淨。

目前的變通方案(不理想)

是的,你現在可以使用 skills 來包裝功能而不使用 MCP - 透過 bash/curl 直接呼叫 API。但這樣:

  • 更脆弱(沒有 MCP 的錯誤處理)
  • 更囉唆(原始 API vs. 語意工具)
  • 錯失重點(我們有 MCP 是有原因的)

最關鍵的問題是認證:

面向MCPSkills + Scripts
認證管理集中在 settings.json散落在 .env、scripts、環境變數
安全性環境隔離容易外洩到 logs/shell history
Token 刷新自動處理需自己實作
錯誤處理標準化回應各 API 不同
# MCP 方式 - 乾淨且安全
mcp: [github]
# 認證在 settings.json,隔離,永不暴露

# Script 方式 - 認證散落各處
# 選項 1:.env 檔案(需要管理)
# 選項 2:寫死在 script 裡(危險)
# 選項 3:每次都要傳遞(繁瑣、易出錯)

MCP 的價值不只是工具本身——而是集中且安全的認證管理。Context 隔離保留了這個優勢,同時解決了 context 消耗的問題。

按需載入架構不只是優化。它是解鎖 Claude Code 作為通用工作協調器潛力的關鍵。

為什麼這是合理的

1. Context 效率

你的主對話保持完整的 context 預算。MCP 只有在需要它們的特定 agent 或 skill 運行時才載入。

2. 細粒度權限

不再是「這個 session 可以存取所有東西」,而是分層控制:

Layer 0: 主 Context(最小權限)
   └── filesystem(只讀), memory

Layer 1: 開發 Agents
   └── code-reviewer: + git(讀取)
   └── debugger: + bash(沙盒)

Layer 2: 專門 Skills
   └── /deploy: + vercel, github(推送)
   └── /db-migrate: + postgres(寫入)

Layer 3: 管理操作
   └── /production-access: 全部(需確認)

3. 漸進式安全

不再是「全有或全無」的權限,而是縱深防禦。程式碼審查不需要資料庫寫入權限。部署不需要 Sentry 存取權限。

4. 生態系統可擴展性

MCP 生態系統正在爆發式成長。每週都有數十個新伺服器。「在開始時載入所有東西」的模式根本無法擴展。

實現可能性

理想的解決方案結合雙向配置,以達到最大靈活性和向後相容:

MCP 端:延遲載入標記

在 settings.json 中,每個 MCP 可以聲明是否在 session 開始時載入:

{
  "mcpServers": {
    "memory": {
      "command": "...",
      "lazy": false    // 總是載入(預設,向後相容)
    },
    "github": {
      "command": "...",
      "lazy": true     // 請求前不載入
    },
    "postgres": {
      "command": "...",
      "lazy": true     // 請求前不載入
    }
  }
}

向後相容:省略 lazy 或設定 lazy: false 維持現行行為。

Agent/Skill 端:Frontmatter 聲明

Agents 和 skills 聲明它們需要哪些 MCP:

# agents/database-specialist.md
---
name: database-specialist
description: 資料庫操作專家
tools: [Read, Bash, Grep]
mcp:
  required: [postgres]    # 必須有
  optional: [redis]       # 有最好
context: fork
---

載入邏輯

MCP lazy 設定Agent/Skill 聲明結果
false(或省略)-✅ Session 開始時載入(現行行為)
true未聲明❌ 不載入
truemcp: [xxx]✅ Agent/Skill 執行時載入

這種雙向方式實現:

  • 漸進式遷移:逐一將大型 MCP 改為 lazy: true
  • 零破壞性變更:現有配置照常運作
  • 細粒度控制:基礎設施層和應用層都可設定

證據:Claude Code 正朝這個方向發展

看看演進過程:

版本功能趨勢
2.0.65Context awareness, status line追蹤 context 使用
2.1.0Skills 的 context: fork隔離架構
2.1.1Agent frontmatter可配置 agents
2.1.3Skills = Commands 統一簡化
2.2.x?按需 MCP?邏輯下一步

架構基礎已經存在。系統已經支援。需求很明確。

需要考慮的挑戰

挑戰可能的解決方案
MCP 啟動延遲預熱池,首次提及時預連接
Fork 結束後的狀態無狀態設計,session 級快取
工具發現延遲清單 - 工具已聲明但未載入
憑證範圍帶限制的環境繼承

這些都是可解決的問題。Fork 架構已經處理了大部分。

願景:Claude Code 作為通用工作協調器

這個提案不只是為了節省 token。它是關於釋放 Claude Code 真正能夠成為的東西

今天,Claude Code 是一個強大的 coding 助手。有了按需 MCP 載入,它將轉變為更有野心的東西:你整個數位工作生活的通用協調器

架構組件已經就位:

  • context: fork 提供隔離
  • Agent/Skill frontmatter 提供聲明
  • MCP 生態系統提供整合

缺少的是連接:讓 agents 和 skills 能夠聲明並按需載入它們自己的 MCP

這是自然的下一步。問題不是這會不會發生,而是何時如何發生。


本提案發布於 claude-world.com,作為我們持續探索 Claude Code 架構可能性的一部分。