diff options
| -rw-r--r-- | packages/mcp/src/index.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/packages/mcp/src/index.ts b/packages/mcp/src/index.ts index 46aa487..4ab8af8 100644 --- a/packages/mcp/src/index.ts +++ b/packages/mcp/src/index.ts @@ -568,6 +568,53 @@ server.tool( }, ); server.tool( + "search_memories_by_text", + "Search memories using text query with auto-generated embedding", + { + query: z.string().describe("The search query text"), + threshold: z + .number() + .optional() + .describe("Minimum similarity threshold (0-1, default 0.7)"), + limit: z + .number() + .optional() + .describe("Maximum number of results (default 10)"), + projectId: z.string().optional().describe("Filter by project ID"), + folderId: z.string().optional().describe("Filter by folder ID"), + }, + async (parameters) => { + if (!embeddingService) { + return { + content: [ + { + type: "text" as const, + text: "Embedding service not configured. Set OPENAI_API_KEY or IMEMIO_EMBEDDING_TYPE=local.", + }, + ], + isError: true, + }; + } + + const queryEmbedding = await embeddingService.generate(parameters.query); + const searchResults = await memoryStore.search(queryEmbedding, { + threshold: parameters.threshold, + limit: parameters.limit, + projectId: parameters.projectId, + folderId: parameters.folderId, + }); + + return { + content: [ + { + type: "text" as const, + text: JSON.stringify(searchResults, null, 2), + }, + ], + }; + }, +); +server.tool( "generate_embedding", "Generate an embedding vector for text content", { |