/ 目錄 / 演練場 / Filesystem
● 官方 modelcontextprotocol ⚡ 即開即用

Filesystem

作者 modelcontextprotocol · modelcontextprotocol/servers

給 Claude 沙箱化的單一目錄讀寫存取權限 — 重構程式、處理文件、分析日誌,無需調用 shell。

標準的檔案系統 MCP。將一個或多個目錄掛載為根目錄;每次工具呼叫都被硬性限制在這些根目錄內,所以 Claude 無法透過 ../ 的方式存取你的 SSH 金鑰。支援文字、二進制、搜尋和行級編輯。是最受歡迎的 MCP 的原因。

為什麼要用

核心特性

即時演示

實際使用效果

filesystem.replay ▶ 就緒
0/0

安裝

選擇你的客戶端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

開啟 Claude Desktop → Settings → Developer → Edit Config。儲存後重啟應用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Cursor 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

格式與 Claude Desktop 相同。重啟 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "filesystem",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  ]
}

Continue 使用伺服器物件陣列,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "filesystem": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@modelcontextprotocol/server-filesystem",
          "/workspace"
        ]
      }
    }
  }
}

加入 context_servers。Zed 儲存後熱重載。

claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /workspace

一行命令搞定。用 claude mcp list 驗證,claude mcp remove 移除。

使用場景

實戰用法: Filesystem

如何在整個程式碼庫中重構函式而不破壞它

👤 需要重新命名或變更在許多檔案中使用的 API 的工程師 ⏱ ~20 min intermediate

何時使用: 你需要重新命名函式、變更其簽名或內聯一個幫助函式 — 且它被用在全程式碼庫的 30 個以上檔案中。

前置條件
  • 乾淨的 git 工作樹git status 沒有顯示任何暫存內容 — 這樣你可以用 git diff 檢查並在需要時 git restore
  • 檔案系統根目錄限定在版本庫 — 使用 npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo 啟動
步驟
  1. 找出所有呼叫位置
    搜尋程式碼庫中所有 getUserProfile( 的用法。按檔案分組並告訴我每個檔案有多少個符合。✓ 已複製
    → 檔案清單與符合計數,不區分測試與原始檔案
  2. 在單一檔案上乾執行編輯
    告訴我在 src/api/users.ts 中編輯會是什麼樣子 — 一個 diff,不是完整檔案。還不要寫。✓ 已複製
    → 最小 diff 補丁,不是完整檔案重寫
  3. 套用到所有檔案並報告
    將相同的轉換套用到步驟 1 中的每個檔案。使用 edit_file (行級),不是 write_file (覆蓋)。告訴我任何模式不完全符合的檔案。✓ 已複製
    → 每檔案的成功/跳過日誌

結果: 一個專注、可審查的 git diff,你可以對其執行測試 — 沒有意外的整個檔案重寫。

注意事項
  • Claude 使用 write_file 並在編輯複雜時無聲地丟失一半的檔案 — 明確要求原地變更使用 edit_file;只允許新建檔案時使用 write_file
  • 符合命中無關的程式碼 (例如 getUserProfileAvatar) — 限定搜尋:使用 getUserProfile( 加上尾部括號,或使用單字邊界 regex
搭配使用: git · github

透過本地讀取產環日誌檔案來分類崩潰

👤 有日誌在磁碟上的值班工程師 ⏱ ~15 min beginner

何時使用: 你已下載客戶事件的日誌束,需要找出問題而不需要 grep 技巧。

前置條件
  • 磁碟上的日誌 — 在專用的 /incidents/<ticket>/ 資料夾下下載/解壓縮
步驟
  1. 取得結構化概覽
    列出 /incidents/TICKET-1234/ 下的檔案。對每個日誌檔案,顯示大小及內部的第一個和最後一個時間戳。✓ 已複製
    → 時間限定的清單
  2. 找出錯誤群集
    搜尋所有 .log 檔案的模式 ERROR|FATAL|panic。告訴我符合最多密度的 10 分鐘。✓ 已複製
    → 時間視窗縮小到分鐘,不是小時
  3. 讀取第一個 fatal 周圍的上下文
    讀取 app.log 中第一個 FATAL 行周圍的 50 行上下文。解釋系統在崩潰前正在做什麼。✓ 已複製
    → 敘事重建,不是日誌重複

結果: 一個 5 句話的時間軸,你可以貼到事件文件中。

注意事項
  • 大型日誌檔案 (>50MB) 會爆炸模型上下文 — 只要求 head/tail + grep 風格提取;永遠不要要求 Claude 在大檔案上『讀取整個檔案』
搭配使用: sentry · github

詢問關於 PDF、Markdown 和文件資料夾的問題

👤 有參考資料堆的研究人員、分析師 ⏱ ~15 min beginner

何時使用: 你在資料夾中有 50 篇論文/合約/報告,需要提取一個特定事實或跨檔案比較。

前置條件
  • 組織在一個資料夾中的文件 — 展平到一個目錄或淺樹;Claude 在平坦結構上遍歷更好
步驟
  1. 索引資料夾
    列出 /research/2026-market-study/ 下的每個檔案。對每個,告訴我檔案名稱和前 200 個字元。✓ 已複製
    → 有快速預覽的清單
  2. 提出真正的問題
    這些文件中哪一個提到『合約賠償上限』?對每個符合,引用確切的句子並告訴我檔案名稱。✓ 已複製
    → 有檔案名稱的引用,不只是感覺
  3. 跨文件合成
    比較有賠償上限的 3 個文件的上限。哪一個對我們最有利以及為什麼?✓ 已複製
    → 有直接引用的並排比較

結果: 有檔案名稱+引用引用的答案,你可以在 30 秒內驗證。

注意事項
  • 掃描的 PDF 是基於圖片的 — 按內容搜尋失敗 — 先執行 OCR (例如 ocrmypdf) 或使用專用的 PDF MCP;在開始前記下『無法搜尋』的檔案
  • Claude 摘要並失去來源屬性 — 始終在提示中要求 檔案名稱 + 確切引用;拒絕沒有它的答案
搭配使用: memory

在一個聊天回合中從規格建立新專案架構

👤 啟動新服務/程式庫/原型的工程師 ⏱ ~10 min beginner

何時使用: 你有一段規格說明並想要將樣板 (資料夾、package.json、README、測試) 物質化,無需從範本版本庫複製。

前置條件
  • 空白目標目錄mkdir /projects/newthing 並將檔案系統根目錄指向其父目錄
步驟
  1. 寫入前同意版面配置
    我想要一個做 X 的 TypeScript Node CLI 工具。提議資料夾結構並列出你會建立的每個檔案及其一行用途。還不要寫。✓ 已複製
    → 逐檔案計畫 — 你可以在觸及磁碟前否決
  2. 寫檔案
    看起來不錯。在 /projects/newthing/ 下建立所有這些檔案。使用最少、習慣用語的內容 — 沒有佔位符註解、沒有 'TODO' 存根。✓ 已複製
    → 磁碟上的檔案,首次編譯/lint 乾淨
  3. 透過讀回來驗證
    讀取你剛建立的每個檔案並確認專案會通過 tsc --noEmitnpm test。修復任何不會通過的。✓ 已複製
    → 自檢有具體修復,不是含糊其辭

結果: 在 3 分鐘內而不是 30 分鐘的工作骨架專案。

注意事項
  • Claude 寫檔案然後在會話中間忘記寫了什麼 — 讓它先產生檔案計畫,然後寫;最後重新讀取可以抓住偏差
搭配使用: git · github

組合

與其他 MCP 搭配,撬動十倍槓桿

filesystem + github

本地編輯檔案、推送分支並開啟 PR 而不離開聊天

修復 src/utils/format.ts:42 的拼寫錯誤,然後推送新分支 fix/typo-format 並開啟標題為『fix: typo in format.ts』的 PR。✓ 已複製
filesystem + git

進行編輯、檢查 diff、提交 — 全部在 Claude 內

將 src/ 中的 3 個重複幫助函式重構為一個共享工具。提交前向我顯示 diff,然後用乾淨的訊息提交。✓ 已複製
filesystem + sqlite

從磁碟讀取 CSV 並將其載入到 SQLite 表中進行分析

讀取 /data/orders.csv、推斷類型並將其載入到 /data/analysis.db 作為表 orders✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
read_text_file path: str, head?: int, tail?: int 讀取文字檔案;使用 head/tail 避免載入巨大檔案 免費
read_media_file path: str 讀取圖片、PDF、音訊為 base64 供多模態輸入 免費
read_multiple_files paths: str[] 批量讀取相關檔案在一個回合中 (比 N 個呼叫快) 免費
write_file path: str, content: str 建立新檔案或完全替換一個 — 破壞性 免費
edit_file path: str, edits: [{oldText, newText}], dryRun?: bool 更安全的行級編輯;對現有檔案始終優先於 write_file 免費
create_directory path: str 建立目錄 (遞迴,mkdir -p 風格) 免費
list_directory path: str 非遞迴 ls 免費
directory_tree path: str 一目瞭然的專案結構概覽 免費
move_file source: str, destination: str 重新命名或重新配置 免費
search_files path: str, pattern: str, excludePatterns?: str[] 遞迴內容搜尋 — 如 grep 免費
get_file_info path: str 不讀取內容地 stat 檔案 免費
list_allowed_directories none 確認伺服器啟動時使用的根目錄 免費

成本與限制

運行它的成本

API 配額
無限制 — 這是本地 I/O
每次呼叫 Token 數
取決於檔案大小 — 預算每 4 個檔案內容字元約 1 個 token
費用
免費
提示
使用 search_fileshead/tail 而不是讀取整個檔案。將 2MB 日誌傾倒到上下文中會花費約 500k token。

安全

權限、密鑰、影響範圍

最小權限: filesystem-read filesystem-write (如果變動)
憑證儲存: 無認證 — 存取是透過作為 arg 傳遞的根目錄
資料出站: 伺服器沒有 — 檔案內容透過 MCP 用戶端作為上下文被送往你的 LLM 提供者
切勿授予: root=/ root=$HOME root=/etc or /var

故障排查

常見錯誤與修復

錯誤:路徑不在允許的目錄內

該檔案在啟動時傳遞的每個根之外。使用額外的根 arg 重新啟動伺服器,或使用 list_allowed_directories 查看實際允許的內容。

驗證: Ask Claude to call `list_allowed_directories`
ENOENT: 無此檔案或目錄

路徑拼寫錯誤或錯誤的工作目錄假設。在根目錄上使用 directory_tree 查看實際版面配置。

edit_file: 找不到 oldText

oldText 模式必須完全匹配,包括空白。要求 Claude 先 read_text_file 然後複製確切的子字串。

巨大檔案凍結用戶端

不要讀取超過幾 MB 的完整檔案。在 read_text_file 上使用 head/tail 參數,或使用 search_files 只找相關行。

驗證: Check file size with `get_file_info` first

替代方案

Filesystem 對比其他方案

替代方案何時用它替代權衡
git MCP你需要版本感知操作 (diff、blame、log) 而不是原始檔案 I/O沒有寫入工具;透過 git 鏡頭的唯讀
GitHub MCP檔案位於遠端版本庫中且你不想要本地複製需要 PAT;每檔案延遲遠高於本地磁碟
JetBrains MCP你想要編輯出現在你的執行中 IDE 實例中,帶有重構工具需要開啟 JetBrains IDE;比純檔案系統更重

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills