search_nodes
Find relevant entities in a knowledge graph by searching names, types, and content to support semantic code indexing and retrieval.
Instructions
Search for nodes in the knowledge graph based on a query
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query to match against entity names, types, and observation content |
Implementation Reference
- build/tools/graph/search-nodes.js:24-41 (handler)The searchNodesHandler function implements the core logic of the 'search_nodes' tool. It validates the query input, calls knowledgeGraphManager.searchNodes, formats the result as JSON text content, and handles errors.export const searchNodesHandler = async (args) => { if (!args.query || typeof args.query !== 'string') { throw new Error("The 'query' parameter is required and must be a string"); } try { const results = await knowledgeGraphManager.searchNodes(args.query); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] }; } catch (error) { console.error("Error in search_nodes tool:", error); throw error; } };
- The input schema and metadata definition for the 'search_nodes' tool, specifying the required 'query' string parameter.export const searchNodesTool = { name: "search_nodes", description: "Search for nodes in the knowledge graph based on a query", inputSchema: { type: "object", properties: { query: { type: "string", description: "The search query to match against entity names, types, and observation content" }, }, required: ["query"], }, };
- build/tools/graph/register-graph-tools-batch3.js:20-26 (registration)Explicit registration of the 'search_nodes' tool and its handler into the toolRegistry.// Enregistrer search_nodes try { toolRegistry.register(searchNodesTool, searchNodesHandler); console.log(`✅ Outil enregistré: ${searchNodesTool.name}`); } catch (error) { console.error(`❌ Erreur lors de l'enregistrement de ${searchNodesTool.name}:`, error);
- The core searchNodes method in KnowledgeGraphManager that performs the actual node searching by filtering entities and relations based on the query matching names, types, or observations case-insensitively.async searchNodes(query) { const graph = await this.loadGraph(); // Filter entities const filteredEntities = graph.entities.filter(e => e.name.toLowerCase().includes(query.toLowerCase()) || e.entityType.toLowerCase().includes(query.toLowerCase()) || e.observations.some(o => o.toLowerCase().includes(query.toLowerCase()))); // Create a Set of filtered entity names for quick lookup const filteredEntityNames = new Set(filteredEntities.map(e => e.name)); // Filter relations to only include those between filtered entities const filteredRelations = graph.relations.filter(r => filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to)); const filteredGraph = { entities: filteredEntities, relations: filteredRelations, }; return filteredGraph; }
- build/core/registry.js:218-219 (registration)The 'search_nodes' tool is listed in the expected tools array for verification in the auto-registry system.'search_nodes', 'open_nodes',