載入中

Roots 是一種授予 MCP 伺服器存取您本機上特定檔案和資料夾的方式。可以將其視為一種權限系統,它表示「嘿,MCP 伺服器,你可以存取這些檔案」——但它們的作用遠不止於授予權限。

Roots 解決的問題

如果沒有 roots,您會遇到一個常見的問題。想像一下,您有一個 MCP 伺服器,其中有一個影片轉換工具,該工具接受檔案路徑並將 MP4 轉換為 MOV 格式。

標題為「如果 roots 不存在……」的圖表:一個 MCP 伺服器公開了一個 convert_video 工具,該工具可將 .mp4 影片檔案轉換為 .mov,並需要本機上某個影片檔案的路徑

當使用者要求 Claude「將 biking.mp4 轉換為 mov 格式」時,Claude 只會用檔案名稱來呼叫該工具。但問題來了——Claude 無法搜尋您整個檔案系統來找出該檔案實際存放的位置。

一個聊天畫面,使用者說「Convert biking.mp4 to mov format」,旁邊是一個本機檔案系統樹狀結構,包含 Movies、Documents 和 Photos 資料夾;biking.mp4 被標示在 Movies/Sports 深處,這是 Claude 看不到的位置

您的檔案系統可能很複雜,檔案分散在不同的目錄中。使用者知道 biking.mp4 檔案在他們的 Movies 資料夾中,但 Claude 並沒有這個上下文資訊。

您可以透過要求使用者始終提供完整路徑來解決這個問題,但這並不是很友善的使用者體驗。沒有人想每次都打出完整的檔案路徑。

Roots 的實際運作

以下是使用 roots 後工作流程的變化:

  1. 使用者要求轉換一個影片檔案
  2. Claude 呼叫 list_roots 來查看它可以存取哪些目錄
  3. Claude 在可存取的目錄上呼叫 read_dir 來尋找該檔案
  4. 一旦找到,Claude 就會用完整路徑呼叫轉換工具

這一切都是自動發生的——使用者仍然可以只說「convert biking.mp4」,而不需要提供完整路徑。

安全性與邊界

Roots 也透過限制存取來提供安全性。如果您只授予對 Desktop 資料夾的存取權限,MCP 伺服器就無法存取 Documents 或 Downloads 等其他位置的檔案。

當 Claude 嘗試存取核准的 roots 之外的檔案時,它會收到錯誤,並可以告知使用者該檔案無法從目前的伺服器設定中存取。

實作細節

MCP SDK 不會自動強制執行 root 限制——您需要自行實作這一點。一個典型的模式是建立一個像 is_path_allowed() 這樣的輔助函式,它會:

  • 接收一個請求的檔案路徑
  • 取得已核准的 roots 清單
  • 檢查請求的路徑是否落在其中一個 roots 之內
  • 回傳 true/false 以表示存取權限

然後,您需要在任何存取檔案或目錄的工具中,於執行實際檔案操作之前呼叫此函式。

主要優點

  • 使用者友善 - 使用者不需要提供完整的檔案路徑
  • 聚焦搜尋 - Claude 只會在已核准的目錄中尋找,使檔案搜尋更快速
  • 安全性 - 防止意外存取已核准區域之外的敏感檔案
  • 靈活性 - 您可以透過工具提供 roots,或直接將其注入提示中

Roots 讓 MCP 伺服器既更強大又更安全,它賦予 Claude 尋找檔案所需的上下文資訊,同時對其可存取的範圍維持清楚的邊界。