memory_query
Query and retrieve stored knowledge from the persistent memory system of Large Language Models (LLMs) to enhance context continuity and learning across sessions.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- Implements the core logic for the 'memory_query' tool: queries factStore with args, formats results as markdown text with details like score, domain, tags, etc., handles empty results and errors.async handleQuery(args) { try { const result = await this.factStore.queryFacts(args); if (result.facts.length === 0) { return { content: [ { type: 'text', text: `No insights found matching your query: "${args.query}"`, }, ], }; } let response = `Found ${result.facts.length} insights (${result.total} total matches):\n\n`; for (const [index, fact] of result.facts.entries()) { response += `**${index + 1}. ${fact.type.replace('_', ' ')}** (Score: ${fact.qualityScore}/100)\n`; response += `*Domain: ${fact.domain}*\n`; response += `${fact.content}\n`; if (fact.tags && fact.tags.length > 0) { response += `*Tags: ${fact.tags.join(', ')}*\n`; } if (fact.relatedFacts && fact.relatedFacts.length > 0) { response += `*Related: ${fact.relatedFacts.length} connected facts*\n`; } if (fact.relevanceScore !== undefined) { response += `*Relevance: ${fact.relevanceScore.toFixed(2)}*\n`; } if (fact.semanticScore !== undefined) { response += `*Semantic: ${fact.semanticScore.toFixed(3)}*\n`; } response += `\n`; } return { content: [ { type: 'text', text: response.trim(), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error querying insights: ${error.message}`, }, ], isError: true, }; } }
- src/tools/modules/MemoryQueryHandler.js:12-58 (registration)Registers the 'memory_query' tool with the MCP server, providing description, input schema, and a handler lambda that calls the handleQuery method.registerQueryTool(server) { server.registerTool( 'memory_query', 'Search and retrieve relevant insights from the memory system', { type: 'object', properties: { query: { type: 'string', description: 'Search query to find relevant insights', }, type: { type: 'string', description: 'Filter by fact type', }, domain: { type: 'string', description: 'Filter by domain', }, tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags', }, minScore: { type: 'number', description: 'Minimum quality score (0-100)', default: 0, }, limit: { type: 'number', description: 'Maximum number of results', default: 10, }, includeRelated: { type: 'boolean', description: 'Include related facts in results', default: false, }, }, required: ['query'], }, async (args) => { return await this.handleQuery(args); } ); }
- Input schema (JSON Schema) for the 'memory_query' tool, defining parameters for querying memory insights with filters.{ type: 'object', properties: { query: { type: 'string', description: 'Search query to find relevant insights', }, type: { type: 'string', description: 'Filter by fact type', }, domain: { type: 'string', description: 'Filter by domain', }, tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags', }, minScore: { type: 'number', description: 'Minimum quality score (0-100)', default: 0, }, limit: { type: 'number', description: 'Maximum number of results', default: 10, }, includeRelated: { type: 'boolean', description: 'Include related facts in results', default: false, }, }, required: ['query'], },
- src/tools/MemoryTools.js:23-29 (registration)In MemoryTools.registerTools, calls MemoryQueryHandler.registerTools(server), which registers the 'memory_query' tool among others.async registerTools(server) { // Register tools from modular components this.operations.registerTools(server); this.queryHandler.registerTools(server); this.streamingTools.registerTools(server); this.management.registerTools(server); }
- src/tools/MemoryTools.js:15-15 (helper)Instantiates MemoryQueryHandler in MemoryTools constructor, providing factStore and processor dependencies.this.queryHandler = new MemoryQueryHandler(factStore, processor);