/ Verzeichnis / Playground / Filesystem
● Offiziell modelcontextprotocol ⚡ Sofort

Filesystem

von modelcontextprotocol · modelcontextprotocol/servers

Geben Sie Claude sandboxed Lese-/Schreibzugriff auf ein Verzeichnis — Code refaktorieren, Dokumente verarbeiten, Logs analysieren, ohne in eine Shell zu wechseln.

Das Referenz-Filesystem-MCP. Hängt ein oder mehrere Verzeichnisse als Roots ein; jeder Tool-Aufruf ist streng auf diese Roots begrenzt, sodass Claude nicht per ../ zu Ihren SSH-Schlüsseln gelangt. Unterstützt Text, Binärdaten, Suche und zeilengenaue Edits. Das mit Abstand am häufigsten installierte MCP — aus gutem Grund.

Warum nutzen

Hauptfunktionen

Live-Demo

In der Praxis

filesystem.replay ▶ bereit
0/0

Installieren

Wählen Sie Ihren Client

~/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"
      ]
    }
  }
}

Öffne Claude Desktop → Settings → Developer → Edit Config. Nach dem Speichern neu starten.

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

Cursor nutzt das gleiche mcpServers-Schema wie Claude Desktop. Projektkonfiguration schlägt die globale.

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

Klicken Sie auf das MCP-Servers-Symbol in der Cline-Seitenleiste, dann "Edit Configuration".

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

Gleiche Struktur wie Claude Desktop. Windsurf neu starten zum Übernehmen.

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

Continue nutzt ein Array von Serverobjekten statt einer Map.

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

In context_servers hinzufügen. Zed lädt beim Speichern neu.

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

Einzeiler. Prüfen mit claude mcp list. Entfernen mit claude mcp remove.

Anwendungsfälle

Praxisnahe Nutzung: Filesystem

So refaktorieren Sie eine Funktion in einer gesamten Codebasis, ohne etwas zu zerbrechen

👤 Entwickler, die eine API umbenennen oder umgestalten, die in vielen Dateien verwendet wird ⏱ ~20 min intermediate

Wann einsetzen: Sie müssen eine Funktion umbenennen, ihre Signatur ändern oder einen Helper inlinen — und sie wird in 30+ Dateien im Repo verwendet.

Voraussetzungen
  • Sauberer Git-Arbeitsbaumgit status zeigt nichts Gestagtes — damit Sie per git diff prüfen und per git restore zurückrollen können
  • Filesystem-Root auf das Repo beschränkt — Starten Sie mit npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo
Ablauf
  1. Jede Aufrufstelle finden
    Durchsuche die Codebasis nach jeder Verwendung von getUserProfile(. Gruppiere die Treffer nach Datei und gib mir eine Zählung pro Datei.✓ Kopiert
    → Dateiliste mit Trefferzahlen, mit Unterscheidung zwischen Tests und Source
  2. Edit in einer Datei als Dry-Run
    Zeige mir, wie der Edit in src/api/users.ts aussehen würde — als Diff, nicht als ganze Datei. Schreibe noch nichts.✓ Kopiert
    → Minimaler Diff-Patch, kein komplettes Datei-Rewrite
  3. Auf alle Dateien anwenden und berichten
    Wende die gleiche Transformation auf jede Datei aus Schritt 1 an. Nutze edit_file (zeilengenau), nicht write_file (Überschreiben). Melde mir jede Datei, bei der das Muster nicht sauber passte.✓ Kopiert
    → Pro-Datei Erfolg-/Skip-Protokoll

Ergebnis: Ein fokussierter, überprüfbarer Git-Diff, gegen den Sie Tests laufen lassen können — keine überraschenden Ganze-Datei-Rewrites.

Fallstricke
  • Claude nutzt write_file und verliert stillschweigend die Hälfte der Datei, wenn der Edit komplex ist — Fordern Sie explizit edit_file für In-Place-Änderungen; erlauben Sie write_file nur für neu erstellte Dateien
  • Treffer in unverwandtem Code (z. B. getUserProfileAvatar) — Verankern Sie die Suche: getUserProfile( mit der schließenden Klammer oder nutzen Sie eine Word-Boundary-Regex
Kombinieren mit: git · github

Einen Crash durch lokales Lesen von Produktions-Logs triagieren

👤 On-Call-Engineers mit Logs auf der Platte ⏱ ~15 min beginner

Wann einsetzen: Sie haben ein Log-Bundle aus einem Kundenvorfall heruntergeladen und müssen die Nadel im Heuhaufen finden, ohne Grep-Akrobatik.

Voraussetzungen
  • Logs auf der Platte — Entpacken Sie sie in einen eigenen Ordner /incidents/<ticket>/
Ablauf
  1. Strukturellen Überblick verschaffen
    Liste die Dateien unter /incidents/TICKET-1234/. Zeige für jede Log-Datei Größe sowie den ersten und letzten Timestamp im Inhalt.✓ Kopiert
    → Zeitlich eingegrenzte Inventur
  2. Fehler-Cluster finden
    Durchsuche alle .log-Dateien nach dem Muster ERROR|FATAL|panic. Gib mir die 10 Minuten mit der höchsten Trefferdichte.✓ Kopiert
    → Zeitfenster auf Minuten eingegrenzt, nicht Stunden
  3. Kontext rund um den ersten FATAL lesen
    Lies 50 Zeilen Kontext um die erste FATAL-Zeile in app.log. Erkläre, was das System unmittelbar vor dem Crash getan hat.✓ Kopiert
    → Narrative Rekonstruktion, kein Log-Abschreiben

Ergebnis: Eine Timeline aus 5 Sätzen, die Sie direkt in das Incident-Dokument einfügen können.

Fallstricke
  • Große Log-Dateien (>50 MB) sprengen den Model-Context — Fordern Sie nur Head/Tail + Grep-artige Extraktion an; bitten Sie Claude nie, bei großen Dateien 'die ganze Datei zu lesen'
Kombinieren mit: sentry · github

Fragen zu einem Ordner mit PDFs, Markdown und Dokumenten stellen

👤 Researcher und Analysten mit einem Stapel Referenzmaterial ⏱ ~15 min beginner

Wann einsetzen: Sie haben 50 Papers/Verträge/Reports in einem Ordner und müssen eine bestimmte Information extrahieren oder dokumentübergreifend vergleichen.

Voraussetzungen
  • Dokumente in einem Ordner organisiert — Flachen Sie die Struktur ab; Claude traversiert flachere Strukturen besser
Ablauf
  1. Ordner indexieren
    Liste jede Datei unter /research/2026-market-study/. Gib mir für jede den Dateinamen und die ersten 200 Zeichen.✓ Kopiert
    → Inventur mit Quick-Previews
  2. Die eigentliche Frage stellen
    Welches dieser Dokumente erwähnt 'contractual indemnity cap'? Zitiere für jeden Treffer den exakten Satz und gib den Dateinamen an.✓ Kopiert
    → Zitate mit Dateinamen, keine vagen Aussagen
  3. Dokumentübergreifende Synthese
    Vergleiche die Indemnity-Caps in den 3 Dokumenten, die sie enthalten. Welcher ist für uns am günstigsten und warum?✓ Kopiert
    → Side-by-Side-Vergleich mit direkten Zitaten

Ergebnis: Antworten mit Dateiname+Zitat, die Sie in 30 Sekunden verifizieren können.

Fallstricke
  • Gescannte PDFs sind bildbasiert — Inhaltssuche schlägt fehl — Führen Sie zuerst OCR aus (z. B. ocrmypdf) oder nutzen Sie ein dediziertes PDF-MCP; markieren Sie 'nicht-durchsuchbare' Dateien vorher
  • Claude fasst zusammen und verliert die Quellenangabe — Fordern Sie im Prompt immer Dateiname + exaktes Zitat; lehnen Sie Antworten ohne ab
Kombinieren mit: memory

Ein neues Projekt aus einer Spec in einem Chat-Turn aufsetzen

👤 Entwickler, die einen neuen Service/Lib/Prototyp starten ⏱ ~10 min beginner

Wann einsetzen: Sie haben eine einparagraphige Spec und möchten die Boilerplate (Ordner, package.json, README, Tests) materialisiert haben, ohne aus einem Template-Repo zu kopieren.

Voraussetzungen
  • Leeres Zielverzeichnismkdir /projects/newthing und richten Sie den Filesystem-Root auf das Elternverzeichnis
Ablauf
  1. Layout vor dem Schreiben abstimmen
    Ich möchte ein TypeScript-Node-CLI-Tool, das X macht. Schlage die Ordnerstruktur vor und liste jede Datei, die du anlegen würdest, mit einer einzeiligen Zweckbeschreibung. Schreibe noch nichts.✓ Kopiert
    → Datei-für-Datei-Plan — Sie können vetoen, bevor die Platte berührt wird
  2. Die Dateien schreiben
    Sieht gut aus. Erstelle alle diese Dateien unter /projects/newthing/. Nutze minimalen, idiomatischen Inhalt — keine Platzhalter-Kommentare, keine 'TODO'-Stubs.✓ Kopiert
    → Dateien auf der Platte, kompiliert/lintet im ersten Anlauf sauber
  3. Durch Zurücklesen verifizieren
    Lies jede Datei, die du gerade erstellt hast, und bestätige, dass das Projekt tsc --noEmit und npm test bestehen würde. Behebe alles, was es nicht täte.✓ Kopiert
    → Selbstcheck mit konkreten Fixes, kein Herumlavieren

Ergebnis: Ein funktionsfähiges Skelettprojekt in 3 Minuten statt 30.

Fallstricke
  • Claude schreibt Dateien und vergisst mitten in der Session, was es geschrieben hat — Lassen Sie zuerst den Dateiplan erzeugen, dann schreiben; erneutes Lesen am Ende fängt Drift ab
Kombinieren mit: git · github

Kombinationen

Mit anderen MCPs für 10-fache Wirkung

filesystem + github

Dateien lokal bearbeiten, einen Branch pushen und einen PR öffnen, ohne den Chat zu verlassen

Behebe den Tippfehler in src/utils/format.ts:42, pushe dann einen neuen Branch fix/typo-format und öffne einen PR mit dem Titel 'fix: typo in format.ts'.✓ Kopiert
filesystem + git

Edits vornehmen, den Diff prüfen, committen — alles innerhalb von Claude

Refaktoriere die 3 doppelten Helper in src/ in einen gemeinsamen Util. Zeige mir den Diff vor dem Commit, dann committe mit einer sauberen Message.✓ Kopiert
filesystem + sqlite

Eine CSV von der Platte lesen und in eine SQLite-Tabelle zur Analyse laden

Lies /data/orders.csv, leite die Typen ab und lade sie in /data/analysis.db als Tabelle orders.✓ Kopiert

Werkzeuge

Was dieses MCP bereitstellt

WerkzeugEingabenWann aufrufenKosten
read_text_file path: str, head?: int, tail?: int Eine Textdatei lesen; nutzen Sie head/tail, um riesige Dateien zu vermeiden free
read_media_file path: str Bilder, PDFs, Audio als Base64 für multimodalen Input lesen free
read_multiple_files paths: str[] Verwandte Dateien in einem Turn batch-lesen (schneller als N Aufrufe) free
write_file path: str, content: str Eine neue Datei erstellen oder komplett ersetzen — destruktiv free
edit_file path: str, edits: [{oldText, newText}], dryRun?: bool Sicherere zeilengenaue Edits; bei existierenden Dateien immer gegenüber write_file bevorzugen free
create_directory path: str Ein Verzeichnis anlegen (rekursiv, mkdir -p) free
list_directory path: str Nicht-rekursives ls free
directory_tree path: str Überblick über eine Projektstruktur auf einen Blick free
move_file source: str, destination: str Umbenennen oder verschieben free
search_files path: str, pattern: str, excludePatterns?: str[] Rekursive Inhaltssuche — wie grep free
get_file_info path: str Eine Datei statten, ohne den Inhalt zu lesen free
list_allowed_directories none Prüfen, mit welchen Roots der Server gestartet wurde free

Kosten & Limits

Was der Betrieb kostet

API-Kontingent
Unbegrenzt — es ist lokales I/O
Tokens pro Aufruf
Hängt von der Dateigröße ab — rechnen Sie mit ~1 Token pro 4 Zeichen Dateiinhalt
Kosten in €
Kostenlos
Tipp
Nutzen Sie search_files und head/tail statt ganze Dateien zu lesen. Ein 2-MB-Log im Context kostet ~500k Tokens.

Sicherheit

Rechte, Secrets, Reichweite

Minimale Scopes: filesystem-read filesystem-write (if mutating)
Credential-Speicherung: Keine Credentials — der Zugriff erfolgt über die als Argumente übergebenen Root-Verzeichnisse
Datenabfluss: Keiner vom Server selbst — Dateiinhalte werden über den MCP-Client als Context an Ihren LLM-Provider übertragen
Niemals gewähren: root=/ root=$HOME root=/etc or /var

Fehlerbehebung

Häufige Fehler und Lösungen

Error: Path is not within allowed directories

Die Datei liegt außerhalb jedes beim Start übergebenen Roots. Starten Sie den Server mit einem zusätzlichen Root-Arg neu oder nutzen Sie list_allowed_directories, um zu sehen, was tatsächlich erlaubt ist.

Prüfen: Bitten Sie Claude, `list_allowed_directories` aufzurufen
ENOENT: no such file or directory

Tippfehler im Pfad oder falsche Annahme zum Arbeitsverzeichnis. Nutzen Sie directory_tree auf dem Root, um das tatsächliche Layout zu sehen.

edit_file: oldText not found

Das oldText-Muster muss exakt passen, inklusive Whitespace. Lassen Sie Claude zuerst read_text_file aufrufen und den genauen Substring kopieren.

Huge file freezes the client

Lesen Sie keine vollständigen Dateien, die größer als ein paar MB sind. Nutzen Sie die head/tail-Parameter von read_text_file oder search_files, um nur die relevanten Zeilen zu finden.

Prüfen: Prüfen Sie die Dateigröße zuerst mit `get_file_info`

Alternativen

Filesystem vs. andere

AlternativeWann stattdessenKompromiss
git MCPSie brauchen versionsbewusste Operationen (diff, blame, log) statt reines Datei-I/OKeine Schreib-Tools; nur lesend durch eine Git-Linse
GitHub MCPDateien liegen in einem Remote-Repo und Sie möchten keinen lokalen CloneBenötigt einen PAT; Latenz pro Datei ist deutlich höher als lokale Platte
JetBrains MCPSie möchten, dass Edits in Ihrer laufenden IDE mit Refactor-Tooling erscheinenErfordert eine geöffnete JetBrains-IDE; schwergewichtiger als das reine Filesystem

Mehr

Ressourcen

📖 Offizielle README auf GitHub lesen

🐙 Offene Issues ansehen

🔍 Alle 400+ MCP-Server und Skills durchsuchen