/ Annuaire / Playground / Filesystem
● Officiel modelcontextprotocol ⚡ Instantané

Filesystem

par modelcontextprotocol · modelcontextprotocol/servers

Donnez à Claude un accès lecture/écriture sandbox à un répertoire — refactorisez du code, traitez des docs, analysez des logs sans utiliser le shell.

Le Filesystem MCP de référence. Monte un ou plusieurs répertoires comme racines ; chaque appel d'outil est strictement limité à ces racines, donc Claude ne peut pas remonter via ../ jusqu'à vos clés SSH. Supporte le texte, binaire, recherche et éditions au niveau des lignes. Le MCP le plus installé pour une raison.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

filesystem.replay ▶ prêt
0/0

Installer

Choisissez votre 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"
      ]
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

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

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

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

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

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

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

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

Continue utilise un tableau d'objets serveur plutôt qu'une map.

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

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

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

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : Filesystem

Comment refactoriser une fonction dans l'ensemble du codebase sans la casser

👤 Ingénieurs renommant/remodélisant une API utilisée dans de nombreux fichiers ⏱ ~20 min intermediate

Quand l'utiliser : Vous devez renommer une fonction, modifier sa signature ou inliner un helper — et elle est utilisée dans 30+ fichiers du dépôt.

Prérequis
  • Répertoire de travail git propregit status n'affiche rien en staging — donc vous pouvez utiliser git diff pour examiner et git restore si nécessaire
  • Racine du système de fichiers limité au dépôt — Lancez avec npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo
Déroulement
  1. Trouvez chaque site d'appel
    Recherchez dans le codebase chaque utilisation de getUserProfile(. Groupez les correspondances par fichier et donnez-moi un décompte par fichier.✓ Copié
    → Liste des fichiers avec décomptes, sans distinction tests vs source
  2. Simuler l'édition sur un fichier
    Montrez-moi à quoi ressemblerait l'édition dans src/api/users.ts — un diff, pas le fichier entier. N'écrivez pas encore.✓ Copié
    → Patch diff minimal, pas une réécriture du fichier entier
  3. Appliquez à tous les fichiers et rapportez
    Appliquez la même transformation à chaque fichier de l'étape 1. Utilisez edit_file (niveau ligne), pas write_file (remplacement). Dites-moi tout fichier où la correspondance n'a pas été nette.✓ Copié
    → Journal de succès/saut par fichier

Résultat : Un diff git ciblé et vérifiable sur lequel vous pouvez exécuter des tests — pas de réécriture surprise du fichier entier.

Pièges
  • Claude utilise write_file et abandonne silencieusement la moitié du fichier lorsque l'édition est complexe — Exigez explicitement edit_file pour les modifications en place ; n'autorisez write_file que pour les fichiers créés en nouveau
  • La correspondance touche du code non lié (par ex. getUserProfileAvatar) — Ancrez la recherche : getUserProfile( avec la parenthèse fermante, ou utilisez un regex de limite de mot
Combiner avec : git · github

Triez un crash en lisant les fichiers journaux de production localement

👤 Ingénieurs de garde avec des logs sur disque ⏱ ~15 min beginner

Quand l'utiliser : Vous avez téléchargé un bundle de logs depuis un incident client et devez trouver l'aiguille sans recourir à grep.

Prérequis
  • Logs sur disque — Téléchargez/décompressez dans un dossier dédié /incidents/<ticket>/
Déroulement
  1. Obtenez un aperçu structurel
    Listez les fichiers sous /incidents/TICKET-1234/. Pour chaque fichier journal, affichez la taille et le premier + dernier horodatage à l'intérieur.✓ Copié
    → Inventaire limité dans le temps
  2. Trouvez le cluster d'erreur
    Recherchez dans tous les fichiers .log le motif ERROR|FATAL|panic. Donnez-moi les 10 minutes avec la plus haute densité de correspondances.✓ Copié
    → Fenêtre de temps réduite aux minutes, pas aux heures
  3. Lisez le contexte autour du premier fatal
    Lisez 50 lignes de contexte autour de la première ligne FATAL dans app.log. Expliquez ce que le système faisait juste avant de s'arrêter.✓ Copié
    → Reconstruction narrative, pas régurgitation de log

Résultat : Une chronologie en 5 phrases que vous pouvez coller dans le doc d'incident.

Pièges
  • Les gros fichiers journaux (>50MB) dépassent le contexte du modèle — Demandez uniquement l'extraction head/tail + style grep ; ne demandez jamais à Claude de 'lire le fichier entier' sur quoi que ce soit de volumineux
Combiner avec : sentry · github

Posez des questions sur un dossier de PDFs, Markdown et docs

👤 Chercheurs, analystes ayant un tas de matériel de référence ⏱ ~15 min beginner

Quand l'utiliser : Vous avez 50 papiers/contrats/rapports dans un dossier et devez extraire un fait spécifique ou comparer entre eux.

Prérequis
  • Documents organisés dans un dossier — Aplatissez en un seul répertoire ou un arbre peu profond ; Claude traverse mieux sur des structures plus plates
Déroulement
  1. Indexez le dossier
    Listez chaque fichier sous /research/2026-market-study/. Pour chaque, dites-moi le nom de fichier et les 200 premiers caractères.✓ Copié
    → Inventaire avec aperçus rapides
  2. Posez la vraie question
    Lequel de ces documents mentionne 'plafond d'indemnité contractuelle' ? Pour chaque correspondance, citez la phrase exacte et donnez-moi le nom du fichier.✓ Copié
    → Citations avec nom de fichier, pas juste des impressions
  3. Synthèse inter-documents
    Comparez les plafonds d'indemnité entre les 3 docs qui les ont. Lequel nous est le plus favorable et pourquoi ?✓ Copié
    → Comparaison côte à côte avec citations directes

Résultat : Réponses avec citations nom de fichier+citation que vous pouvez vérifier en 30 secondes.

Pièges
  • Les PDFs numérisés sont basés sur des images — la recherche par contenu échoue — Exécutez OCR d'abord (par ex. ocrmypdf) ou utilisez un MCP PDF dédié ; notez les fichiers 'non-recherchables' avant de commencer
  • Claude résume et perd l'attribution de la source — Exigez toujours nom de fichier + citation exacte dans l'invite ; rejetez les réponses sans elle
Combiner avec : memory

Échafaudez un nouveau projet à partir d'une spec en une seule proposition de chat

👤 Ingénieurs démarrant un nouveau service/lib/prototype ⏱ ~10 min beginner

Quand l'utiliser : Vous avez une spec d'un paragraphe et voulez que le boilerplate (dossiers, package.json, README, tests) soit matérialisé sans copier depuis un dépôt modèle.

Prérequis
  • Répertoire cible videmkdir /projects/newthing et pointez la racine du système de fichiers sur son parent
Déroulement
  1. Conveniez de la disposition avant d'écrire
    Je veux un outil CLI Node TypeScript qui fait X. Proposez la structure de dossier et listez chaque fichier que vous créeriez avec un but d'une ligne. N'écrivez pas encore.✓ Copié
    → Plan fichier par fichier — vous pouvez interdire avant que le disque ne soit touché
  2. Écrivez les fichiers
    Ça a l'air bien. Créez tous ces fichiers sous /projects/newthing/. Utilisez du contenu minimal, idiomatique — pas de commentaires d'espace réservé, pas de stubs 'TODO'.✓ Copié
    → Fichiers sur disque, compile/lint clean du premier coup
  3. Vérifiez en relisant
    Lisez chaque fichier que vous venez de créer et confirmez que le projet passerait tsc --noEmit et npm test. Réparez tout ce qui ne le ferait pas.✓ Copié
    → Auto-vérification avec correctifs concrets, pas du blabla

Résultat : Un projet skeleton fonctionnel en 3 minutes au lieu de 30.

Pièges
  • Claude écrit des fichiers puis oublie ce qu'il a écrit en milieu de session — Faites-le produire le plan de fichier d'abord, puis écrire ; la relecture à la fin attrape la dérive
Combiner avec : git · github

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

filesystem + github

Éditez les fichiers localement, poussez une branche et ouvrez une PR sans quitter le chat

Corrigez la faute de frappe dans src/utils/format.ts:42, puis poussez une nouvelle branche fix/typo-format et ouvrez une PR intitulée 'fix: typo in format.ts'.✓ Copié
filesystem + git

Effectuez des éditions, examinez le diff, commitez — tout dans Claude

Refactorisez les 3 helpers dupliqués dans src/ en une seule util partagée. Montrez-moi le diff avant de committer, puis commitez avec un message propre.✓ Copié
filesystem + sqlite

Lisez un CSV du disque et chargez-le dans une table SQLite pour analyse

Lisez /data/orders.csv, déduisez les types et chargez-le dans /data/analysis.db en tant que table orders.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
read_text_file path: str, head?: int, tail?: int Lisez un fichier texte ; utilisez head/tail pour éviter de charger d'énormes fichiers free
read_media_file path: str Lisez des images, PDFs, audio en base64 pour entrée multimodale free
read_multiple_files paths: str[] Batch-lisez les fichiers connexes en une seule proposition (plus rapide que N appels) free
write_file path: str, content: str Créez un nouveau fichier ou remplacez-en entièrement un — destructif free
edit_file path: str, edits: [{oldText, newText}], dryRun?: bool Éditions plus sûres au niveau des lignes ; préférez toujours à write_file pour les fichiers existants free
create_directory path: str Créez un répertoire (récursif, style mkdir -p) free
list_directory path: str ls non-récursif free
directory_tree path: str Aperçu de la structure d'un projet en un coup d'œil free
move_file source: str, destination: str Renommez ou déplacez free
search_files path: str, pattern: str, excludePatterns?: str[] Recherche de contenu récursive — comme grep free
get_file_info path: str Stat un fichier sans lire le contenu free
list_allowed_directories none Confirmez avec quelles racines le serveur a été lancé free

Coût et limites

Coût d'exécution

Quota d'API
Illimité — c'est de l'I/O locale
Tokens par appel
Dépend de la taille du fichier — budgétisez ~1 token par 4 caractères de contenu de fichier
Monétaire
Gratuit
Astuce
Utilisez search_files et head/tail plutôt que de lire des fichiers entiers. Un log de 2MB versé dans le contexte coûte ~500k tokens.

Sécurité

Permissions, secrets, portée

Portées minimales : filesystem-read filesystem-write (if mutating)
Stockage des identifiants : Pas de credentials — l'accès se fait via les répertoires racines passés en args
Sortie de données : Aucun depuis le serveur — le contenu des fichiers est expédié à votre fournisseur de LLM via le client MCP en tant que contexte
Ne jamais accorder : root=/ root=$HOME root=/etc or /var

Dépannage

Erreurs courantes et correctifs

Error: Path is not within allowed directories

Le fichier est en dehors de chaque racine passée au lancement. Relancez le serveur avec un arg racine supplémentaire, ou utilisez list_allowed_directories pour voir ce qui est réellement autorisé.

Vérifier : Demandez à Claude d'appeler `list_allowed_directories`
ENOENT: no such file or directory

Erreur de typage de chemin ou hypothèse de répertoire de travail incorrecte. Utilisez directory_tree sur la racine pour voir la disposition réelle.

edit_file: oldText not found

Le motif oldText doit correspondre exactement y compris l'espace blanc. Demandez à Claude d'utiliser read_text_file d'abord et copiez la sous-chaîne exacte.

Huge file freezes the client

Ne lisez pas les fichiers entiers plus grands que quelques MB. Utilisez les params head/tail sur read_text_file, ou search_files pour trouver juste les lignes pertinentes.

Vérifier : Vérifiez d'abord la taille du fichier avec `get_file_info`

Alternatives

Filesystem vs autres

AlternativeQuand l'utiliserCompromis
git MCPVous avez besoin d'opérations conscientes de version (diff, blame, log) plutôt que d'I/O de fichier brutPas d'outils d'écriture ; lecture seule via une lentille git
GitHub MCPLes fichiers vivent dans un dépôt distant et vous ne voulez pas de clone localNécessite un PAT ; la latence par fichier est beaucoup plus élevée que le disque local
JetBrains MCPVous voulez que les éditions apparaissent dans votre instance IDE en cours d'exécution avec outils de refactorisationNécessite une IDE JetBrains ouverte ; plus lourd que le système de fichiers simple

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills