🎯 什麼情境該想到我

當你的 MCP server「需要 LLM、需要問使用者、或需要知道能碰哪些檔案」,但又想保持乾淨、把控制權留給 client 的時候。這三個是 client 反過來提供給 server 的能力。

⚙️ 怎麼用(三選一,對應需求)

  1. Sampling(借用 LLM):server 用 sampling/createMessage 請 client 幫忙做 LLM 補全——這樣 server 不必自帶模型 SDK、不必自付 API 費、保持模型無關。可帶 modelPreferences(cost/speed/intelligence 權重)、systemPrompt、maxTokens。設計上是 human-in-the-loop:使用者可審核/修改請求與回應。例:findBestFlight 把 47 個航班丟給 LLM 選最佳。
  2. Elicitation(向使用者要資訊):server 用 elicitation/create 帶一個 JSON schema,在流程中動態要輸入或要確認(別一開始就逼使用者填完所有欄位)。使用者可提供/拒絕/取消,client 會依 schema 驗證。絕不可用來要密碼或 API key
  3. Roots(限定檔案範圍):client 用 file:// URI 告訴 server「你該聚焦哪些目錄」;可隨使用者切換專案動態更新(roots/list_changed)。這是協調機制、不是安全邊界——真正的隔離要靠 OS 權限/sandbox。

🧪 我實際套用的紀錄

  • 2026-07-26:(待填)

⚠️ 注意 / 什麼時候不適用

  • Roots 只是「請 server 自律」,不能當防線;不受信任的 server 仍可能越界。
  • Sampling/Elicitation 都應保留使用者審核關卡,避免 server 藉此偷渡敏感操作。

🔗 相關工具