- Introduction
- Avantages en termes d'économie de tokens
- Fonctionnalités principales
- Guide d'utilisation par mode
- Exemples de code détaillés
- Intégration avec d'autres MCPs
- Bonnes pratiques et optimisations
- Référence technique
- Dépannage
Le MCP QuickFiles est un serveur qui fournit des méthodes optimisées pour manipuler efficacement des fichiers et répertoires multiples en une seule opération. Il a été conçu spécifiquement pour réduire la consommation de tokens lors des interactions avec les fichiers, tout en offrant des fonctionnalités avancées comme la lecture d'extraits spécifiques ou l'édition groupée.
Ce guide vous aidera à tirer le meilleur parti du MCP QuickFiles dans les différents modes de Roo, avec des exemples concrets et des recommandations adaptées à chaque contexte d'utilisation.
L'utilisation du MCP QuickFiles permet de réaliser des économies significatives de tokens par rapport aux méthodes traditionnelles :
| Opération | Méthode standard | MCP QuickFiles | Économie de tokens | Modes bénéficiaires |
|---|---|---|---|---|
| Lecture de 5 fichiers | 5 appels à read_file | 1 appel à read_multiple_files | ~75% | Code, Debug, Ask |
| Lecture d'extraits | Lecture complète + filtrage | read_multiple_files avec excerpts | ~90% | Debug, Ask |
| Édition de 3 fichiers | 3 appels à write_to_file | 1 appel à edit_multiple_files | ~70% | Code, Architect |
| Navigation dans 10 dossiers | 10 appels à list_files | 1 appel à list_directory_contents | ~85% | Architect, Orchestrator |
| Suppression de fichiers | Appels multiples à execute_command | 1 appel à delete_files | ~60% | Code, Debug |
Ces économies sont réalisées grâce à :
- La réduction du nombre de requêtes et des métadonnées associées
- L'extraction ciblée de contenu pertinent uniquement
- Le traitement par lots des opérations similaires
- Le formatage optimisé des réponses
Permet de lire plusieurs fichiers en une seule requête avec des options avancées :
- Lecture de fichiers complets ou d'extraits spécifiques
- Numérotation de lignes optionnelle
- Limitation du nombre de lignes par fichier et au total
Liste le contenu de répertoires avec des informations détaillées :
- Navigation récursive optionnelle
- Affichage de métadonnées (taille, type, nombre de lignes)
- Limitation du nombre de lignes dans la sortie
Supprime plusieurs fichiers en une seule opération :
- Suppression groupée efficace
- Rapport détaillé des résultats
Modifie plusieurs fichiers en une seule opération :
- Application de plusieurs modifications par fichier
- Possibilité de cibler des sections spécifiques (à partir d'une ligne donnée)
- Rapport détaillé des modifications effectuées
Cas d'usage optimaux :
- Analyse rapide de multiples fichiers de code source
- Refactorisation de code à travers plusieurs fichiers
- Recherche de patterns dans la base de code
Fonctionnalités recommandées :
read_multiple_filesavec extraits pour analyser des portions spécifiques du codeedit_multiple_filespour appliquer des modifications cohérentes à travers la base de codelist_directory_contentspour comprendre la structure du projet
Économie de tokens : 60-80% selon les opérations
Exemple d'utilisation :
// Refactorisation d'une fonction dans plusieurs fichiers
await client.callTool('quickfiles-server', 'edit_multiple_files', {
files: [
{
path: 'src/utils.js',
diffs: [
{
search: 'function oldName(params) {',
replace: 'function newName(params) {'
}
]
},
{
path: 'src/components/Component.js',
diffs: [
{
search: 'oldName(',
replace: 'newName('
}
]
}
]
});Cas d'usage optimaux :
- Inspection de fichiers de logs et de configuration
- Analyse de sections spécifiques de code pour identifier des bugs
- Comparaison de différentes versions de fichiers
Fonctionnalités recommandées :
read_multiple_filesavec numérotation de lignes pour faciliter le débogagelist_directory_contentspour identifier rapidement les fichiers pertinentsedit_multiple_filespour corriger des bugs similaires dans plusieurs fichiers
Économie de tokens : 70-90% pour l'analyse de logs
Exemple d'utilisation :
// Analyse de logs d'erreur dans plusieurs fichiers
const logsResult = await client.callTool('quickfiles-server', 'read_multiple_files', {
paths: [
{
path: 'logs/error.log',
excerpts: [
{ start: 1000, end: 1050 } // Cibler la section avec l'erreur
]
},
{
path: 'logs/app.log',
excerpts: [
{ start: 500, end: 550 }
]
}
],
show_line_numbers: true // Facilite la référence aux lignes spécifiques
});Cas d'usage optimaux :
- Vue d'ensemble de la structure du projet
- Analyse de la cohérence architecturale à travers plusieurs fichiers
- Documentation et génération de rapports
Fonctionnalités recommandées :
list_directory_contentspour cartographier la structure du projetread_multiple_filespour analyser les interfaces et les dépendancesedit_multiple_filespour mettre à jour la documentation dans plusieurs fichiers
Économie de tokens : 50-75% pour l'analyse de structure
Exemple d'utilisation :
// Cartographie de la structure du projet
const structureResult = await client.callTool('quickfiles-server', 'list_directory_contents', {
paths: [
{
path: 'src',
recursive: true // Explorer toute la structure
}
]
});Cas d'usage optimaux :
- Recherche rapide d'informations dans plusieurs fichiers
- Extraction de contexte pertinent pour répondre aux questions
- Accès efficace aux fichiers de documentation
Fonctionnalités recommandées :
read_multiple_filesavec extraits pour obtenir uniquement l'information pertinentelist_directory_contentspour identifier les fichiers contenant potentiellement l'information recherchée
Économie de tokens : 80-95% pour la recherche d'informations
Exemple d'utilisation :
// Recherche d'informations sur une API dans la documentation
const docsResult = await client.callTool('quickfiles-server', 'read_multiple_files', {
paths: [
'docs/api.md',
'docs/examples.md',
'README.md'
],
show_line_numbers: false,
max_lines_per_file: 500 // Limiter la quantité d'information
});Cas d'usage optimaux :
- Coordination efficace entre différents modes
- Transfert optimal de contexte entre les modes
- Gestion efficace des ressources (tokens)
Fonctionnalités recommandées :
- Toutes les fonctionnalités pour optimiser le transfert de contexte entre les modes
read_multiple_filesavec limitation de lignes pour contrôler la consommation de tokensedit_multiple_filespour appliquer des modifications recommandées par différents modes
Économie de tokens : 60-85% pour la coordination entre modes
Exemple d'utilisation :
// Préparation de contexte pour transfert entre modes
const contextResult = await client.callTool('quickfiles-server', 'read_multiple_files', {
paths: [
{
path: 'src/main.js',
excerpts: [
{ start: 10, end: 50 } // Section pertinente uniquement
]
},
'package.json',
'tsconfig.json'
],
max_total_lines: 200 // Contrôle strict de la consommation de tokens
});// Scénario: Analyser l'utilisation d'une fonction spécifique dans plusieurs fichiers
const analysisResult = await client.callTool('quickfiles-server', 'read_multiple_files', {
paths: [
// Rechercher dans tous les fichiers JavaScript du dossier src
...jsFiles.map(file => ({
path: file,
excerpts: [
// Extraire uniquement les lignes contenant la fonction recherchée
// avec quelques lignes de contexte avant et après
...findFunctionOccurrences(file, 'targetFunction', 3)
]
}))
],
show_line_numbers: true,
max_total_lines: 1000
});
// Fonction helper pour trouver les occurrences (simulation)
function findFunctionOccurrences(file, functionName, contextLines) {
// Cette fonction analyserait le fichier pour trouver les lignes
// contenant la fonction et retournerait des objets { start, end }
// pour chaque occurrence avec le contexte demandé
return [
{ start: 45, end: 52 },
{ start: 120, end: 127 }
];
}// Scénario: Mise à jour des imports dans plusieurs fichiers
const editResult = await client.callTool('quickfiles-server', 'edit_multiple_files', {
files: [
// Appliquer les modifications à tous les fichiers concernés
...affectedFiles.map(file => ({
path: file,
diffs: [
{
// Mettre à jour les imports
search: "import { OldComponent } from '@/components';",
replace: "import { NewComponent } from '@/components/new';"
},
{
// Mettre à jour les utilisations
search: "<OldComponent",
replace: "<NewComponent"
},
{
// Mettre à jour les fermetures de balises
search: "</OldComponent>",
replace: "</NewComponent>"
}
]
}))
]
});
// Vérification des modifications
console.log(`${editResult.filter(r => r.modified).length} fichiers modifiés sur ${affectedFiles.length}`);// Scénario: Générer un rapport sur la structure du projet
const structureResult = await client.callTool('quickfiles-server', 'list_directory_contents', {
paths: [
{
path: 'src',
recursive: true
},
{
path: 'tests',
recursive: true
}
],
max_lines: 5000
});
// Analyse des résultats
const fileTypes = {};
const directoryStructure = {};
// Traitement des résultats pour extraire des statistiques
// ...
// Génération d'un rapport Markdown
const reportContent = `# Rapport de structure du projet\n\n...`;
// Sauvegarde du rapport
await client.callTool('quickfiles-server', 'edit_multiple_files', {
files: [{
path: 'docs/project-structure.md',
diffs: [{
search: ".*",
replace: reportContent
}]
}]
});Le MCP QuickFiles peut être utilisé en combinaison avec d'autres MCPs pour créer des workflows puissants et économes en tokens.
// Scénario: Récupérer du contenu web, le convertir en Markdown et le sauvegarder
// 1. Utiliser Jinavigator pour convertir des pages web en Markdown
const webContents = await jinavigatorClient.callTool('multi_convert', {
urls: [
{ url: 'https://example.com/docs/page1' },
{ url: 'https://example.com/docs/page2' }
]
});
// 2. Utiliser QuickFiles pour sauvegarder les contenus convertis
await quickfilesClient.callTool('edit_multiple_files', {
files: webContents.map((result, index) => ({
path: `docs/web-content-${index + 1}.md`,
diffs: [{
search: ".*",
replace: result.content
}]
}))
});
// 3. Générer un index des contenus sauvegardés
const indexContent = `# Index des contenus web\n\n${
webContents.map((_, index) =>
`- [Contenu ${index + 1}](web-content-${index + 1}.md)`
).join('\n')
}`;
await quickfilesClient.callTool('edit_multiple_files', {
files: [{
path: 'docs/index.md',
diffs: [{
search: ".*",
replace: indexContent
}]
}]
});// Scénario: Analyser du code, générer un rapport et le sauvegarder
// 1. Utiliser QuickFiles pour lire les fichiers de code
const codeFiles = await quickfilesClient.callTool('read_multiple_files', {
paths: [
'src/main.js',
'src/utils.js',
'src/components/App.js'
],
show_line_numbers: true
});
// 2. Analyser le code (simulation)
const analysisResults = analyzeCode(codeFiles);
// 3. Générer un rapport
const reportContent = generateReport(analysisResults);
// 4. Sauvegarder le rapport
await quickfilesClient.callTool('edit_multiple_files', {
files: [{
path: 'reports/code-analysis.md',
diffs: [{
search: ".*",
replace: reportContent
}]
}]
});-
Utiliser les extraits de façon ciblée
- Ne demander que les portions de fichiers réellement nécessaires
- Utiliser des algorithmes pour identifier les sections pertinentes avant de faire la requête
-
Limiter le nombre de lignes
- Toujours définir
max_lines_per_fileetmax_total_linespour éviter les surprises - Ajuster ces limites en fonction du contexte et de la tâche
- Toujours définir
-
Grouper les opérations similaires
- Regrouper les lectures de fichiers similaires dans une seule requête
- Regrouper les modifications liées dans une seule opération d'édition
-
Filtrer les fichiers non pertinents
- Utiliser
list_directory_contentspour identifier les fichiers pertinents avant de les lire - Exclure les fichiers binaires ou trop volumineux
- Utiliser
graph TD
A[Début de la tâche] --> B{Type d'opération?}
B -->|Lecture| C[Plusieurs fichiers?]
B -->|Écriture| D[Modifications multiples?]
B -->|Navigation| E[Structure du projet?]
C -->|Oui| F[read_multiple_files]
C -->|Non| G[read_file standard]
D -->|Oui| H[edit_multiple_files]
D -->|Non| I[write_to_file standard]
E -->|Oui| J[list_directory_contents]
E -->|Non| K[list_files standard]
F --> L[Économie: 50-80% tokens]
H --> M[Économie: 60-90% tokens]
J --> N[Économie: 40-70% tokens]
Description : Lit plusieurs fichiers en une seule requête avec numérotation de lignes optionnelle et extraits de fichiers.
Paramètres :
{
"paths": [
"chemin/vers/fichier1.txt",
"chemin/vers/fichier2.txt"
],
"show_line_numbers": true,
"max_lines_per_file": 1000,
"max_total_lines": 2000
}Ou avec extraits :
{
"paths": [
{
"path": "chemin/vers/fichier.txt",
"excerpts": [
{ "start": 10, "end": 20 },
{ "start": 50, "end": 60 }
]
}
],
"show_line_numbers": true
}Description : Liste tous les fichiers et répertoires sous un chemin donné, avec la taille des fichiers.
Paramètres :
{
"paths": [
{
"path": "chemin/vers/repertoire",
"recursive": true
}
],
"max_lines": 1000
}Description : Supprime une liste de fichiers en une seule opération.
Paramètres :
{
"paths": [
"chemin/vers/fichier1.txt",
"chemin/vers/fichier2.txt"
]
}Description : Édite plusieurs fichiers en une seule opération en appliquant des diffs.
Paramètres :
{
"files": [
{
"path": "chemin/vers/fichier.txt",
"diffs": [
{
"search": "texte à remplacer",
"replace": "nouveau texte"
},
{
"search": "autre texte",
"replace": "autre remplacement",
"start_line": 10
}
]
}
]
}Problème : Le fichier ou répertoire spécifié n'existe pas.
Solution :
- Vérifiez que le chemin est correct et que le fichier existe
- Utilisez des chemins absolus si nécessaire
- Vérifiez les permissions du répertoire parent
Problème : Les paramètres fournis ne correspondent pas au schéma attendu.
Solution :
- Vérifiez que tous les paramètres requis sont fournis
- Vérifiez que les types de données sont corrects
- Consultez la documentation pour le format exact des paramètres
Problème : Lenteur ou consommation excessive de mémoire lors de la lecture de fichiers volumineux.
Solution :
- Utilisez le paramètre
max_lines_per_filepour limiter le nombre de lignes lues - Utilisez des extraits (
excerpts) pour lire uniquement les parties nécessaires - Divisez les opérations en plusieurs requêtes plus petites