Roots 是一種授予 MCP 伺服器存取您本機上特定檔案和資料夾的方式。可以將其視為一種權限系統,它表示「嘿,MCP 伺服器,你可以存取這些檔案」——但它們的作用遠不止於授予權限。
Roots 解決的問題
如果沒有 roots,您會遇到一個常見的問題。想像一下,您有一個 MCP 伺服器,其中有一個影片轉換工具,該工具接受檔案路徑並將 MP4 轉換為 MOV 格式。

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

您的檔案系統可能很複雜,檔案分散在不同的目錄中。使用者知道 biking.mp4 檔案在他們的 Movies 資料夾中,但 Claude 並沒有這個上下文資訊。
您可以透過要求使用者始終提供完整路徑來解決這個問題,但這並不是很友善的使用者體驗。沒有人想每次都打出完整的檔案路徑。
Roots 的實際運作
以下是使用 roots 後工作流程的變化:
- 使用者要求轉換一個影片檔案
- Claude 呼叫
list_roots來查看它可以存取哪些目錄 - Claude 在可存取的目錄上呼叫
read_dir來尋找該檔案 - 一旦找到,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 尋找檔案所需的上下文資訊,同時對其可存取的範圍維持清楚的邊界。