Skip to main content
Glama
rag-tools.js9.9 kB
import { indexProject, updateProject } from "../rag/indexer.js"; import { getProjects, getProjectStatistics, searchCode } from "../rag/searcher.js"; import { setEmbeddingProvider } from "../rag/vector-store.js"; // Définition des 4 outils RAG préfixés export const ragTools = [ { name: "rag_index_project", description: "Indexer un projet complet pour la recherche sémantique avec options RAG", inputSchema: { type: "object", properties: { project_path: { type: "string", description: "Chemin absolu vers le projet à indexer" }, file_patterns: { type: "array", items: { type: "string" }, description: "Patterns de fichiers à inclure (ex: ['**/*.py', '**/*.js'])", default: ["**/*.{js,ts,py,md,txt,json,yaml,yml,html,css,scss}"] }, recursive: { type: "boolean", description: "Parcourir les sous-dossiers récursivement", default: true }, embedding_provider: { type: "string", description: "Fournisseur d'embeddings (fake, ollama, sentence-transformers)", enum: ["fake", "ollama", "sentence-transformers"], default: "fake" }, embedding_model: { type: "string", description: "Modèle d'embeddings (pour Ollama: 'nomic-embed-text', 'all-minilm', etc.)", default: "nomic-embed-text" }, chunk_size: { type: "number", description: "Taille des chunks pour le découpage (en tokens)", default: 1000, minimum: 100, maximum: 10000 }, chunk_overlap: { type: "number", description: "Chevauchement entre les chunks (en tokens)", default: 200, minimum: 0, maximum: 1000 } }, required: ["project_path"] } }, { name: "rag_search_code", description: "Recherche sémantique dans le code indexé avec options RAG", inputSchema: { type: "object", properties: { query: { type: "string", description: "Requête de recherche sémantique" }, project_filter: { type: "string", description: "Filtrer par chemin de projet spécifique" }, limit: { type: "number", description: "Nombre maximum de résultats", default: 10, minimum: 1, maximum: 50 }, threshold: { type: "number", description: "Seuil de similarité (0.0 à 1.0)", default: 0, minimum: 0, maximum: 1 }, format_output: { type: "boolean", description: "Formater la sortie pour l'affichage", default: true }, embedding_provider: { type: "string", description: "Fournisseur d'embeddings pour la recherche (fake, ollama, sentence-transformers)", enum: ["fake", "ollama", "sentence-transformers"], default: "fake" }, embedding_model: { type: "string", description: "Modèle d'embeddings (pour Ollama: 'nomic-embed-text', 'all-minilm', etc.)", default: "nomic-embed-text" } }, required: ["query"] } }, { name: "rag_manage_projects", description: "Gérer et lister les projets indexés", inputSchema: { type: "object", properties: { action: { type: "string", description: "Action à effectuer", enum: ["list", "stats"], default: "list" }, project_path: { type: "string", description: "Chemin du projet pour les statistiques (requis pour 'stats')" } } } }, { name: "rag_update_project", description: "Mettre à jour l'indexation d'un projet (indexation incrémentale) avec options RAG", inputSchema: { type: "object", properties: { project_path: { type: "string", description: "Chemin absolu vers le projet à mettre à jour" }, file_patterns: { type: "array", items: { type: "string" }, description: "Patterns de fichiers à inclure", default: ["**/*.{js,ts,py,md,txt,json,yaml,yml,html,css,scss}"] }, recursive: { type: "boolean", description: "Parcourir les sous-dossiers récursivement", default: true }, embedding_provider: { type: "string", description: "Fournisseur d'embeddings (fake, ollama, sentence-transformers)", enum: ["fake", "ollama", "sentence-transformers"], default: "fake" }, embedding_model: { type: "string", description: "Modèle d'embeddings (pour Ollama: 'nomic-embed-text', 'all-minilm', etc.)", default: "nomic-embed-text" }, chunk_size: { type: "number", description: "Taille des chunks pour le découpage (en tokens)", default: 1000, minimum: 100, maximum: 10000 }, chunk_overlap: { type: "number", description: "Chevauchement entre les chunks (en tokens)", default: 200, minimum: 0, maximum: 1000 } }, required: ["project_path"] } } ]; // Fonction pour exécuter les outils RAG export async function executeRagTool(name, args) { // Configurer le fournisseur d'embeddings si spécifié if (args.embedding_provider) { setEmbeddingProvider(args.embedding_provider, args.embedding_model || "nomic-embed-text"); } switch (name) { case "rag_index_project": const indexOptions = { filePatterns: args.file_patterns, recursive: args.recursive, chunkSize: args.chunk_size, chunkOverlap: args.chunk_overlap }; const indexResult = await indexProject(args.project_path, indexOptions); return { content: [{ type: "text", text: JSON.stringify(indexResult, null, 2) }] }; case "rag_search_code": const searchOptions = { projectFilter: args.project_filter, limit: args.limit, threshold: args.threshold }; const searchResult = await searchCode(args.query, searchOptions); if (args.format_output !== false) { const formatted = `Recherche RAG: "${args.query}"\n` + `Résultats: ${searchResult.totalResults}\n` + `Temps d'exécution: ${searchResult.stats?.executionTime || 0}ms\n` + `Projets scannés: ${searchResult.stats?.projectsScanned || 0}\n\n` + searchResult.results.map((r, i) => `${i + 1}. ${r.filePath} (score: ${(r.score * 100).toFixed(2)}%)\n` + ` Projet: ${r.metadata.projectPath}\n` + ` Contenu: ${r.content.substring(0, 100)}...`).join('\n\n'); return { content: [{ type: "text", text: formatted }] }; } return { content: [{ type: "text", text: JSON.stringify(searchResult, null, 2) }] }; case "rag_manage_projects": if (args.action === "stats" && args.project_path) { const stats = await getProjectStatistics(args.project_path); return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] }; } else { const projects = await getProjects(); return { content: [{ type: "text", text: JSON.stringify(projects, null, 2) }] }; } case "rag_update_project": const updateOptions = { filePatterns: args.file_patterns, recursive: args.recursive, chunkSize: args.chunk_size, chunkOverlap: args.chunk_overlap }; const updateResult = await updateProject(args.project_path, updateOptions); return { content: [{ type: "text", text: JSON.stringify(updateResult, null, 2) }] }; default: throw new Error(`Unknown RAG tool: ${name}`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ali-48/rag-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server