Skip to main content
Glama

search_memories_similarity

Find stored memories by comparing vector embeddings to retrieve semantically similar content based on similarity thresholds.

Instructions

Search memories by vector similarity

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
embeddingYesQuery embedding vector
limitNoMaximum number of results
thresholdNoMinimum similarity threshold

Implementation Reference

  • The actual implementation of searchMemoriesBySimilarity method that performs vector similarity search using PostgreSQL's <=> operator to find memories with embeddings above a threshold, ordered by similarity distance.
    async searchMemoriesBySimilarity(queryEmbedding, limit = 10, threshold = 0.7) {
      try {
        const embeddingVector = `[${queryEmbedding.join(',')}]`;
        
        const results = await this.db
          .select({
            id: schema.memories.id,
            type: schema.memories.type,
            content: schema.memories.content,
            importance: schema.memories.importance,
            accessCount: schema.memories.accessCount,
            createdAt: schema.memories.createdAt,
            relevanceScore: schema.memories.relevanceScore,
            similarity: sql`1 - (${schema.memories.embedding} <=> ${embeddingVector}::vector)`.as('similarity')
          })
          .from(schema.memories)
          .where(
            and(
              eq(schema.memories.status, 'active'),
              sql`1 - (${schema.memories.embedding} <=> ${embeddingVector}::vector) >= ${threshold}`
            )
          )
          .orderBy(sql`${schema.memories.embedding} <=> ${embeddingVector}::vector`)
          .limit(limit);
    
        return results;
      } catch (error) {
        const truncatedEmbedding = queryEmbedding.length > 10 
          ? `[${queryEmbedding.slice(0, 5).join(',')}...${queryEmbedding.slice(-5).join(',')}] (${queryEmbedding.length} values)`
          : `[${queryEmbedding.join(',')}]`;
        console.error('Error searching memories by similarity with embedding:', truncatedEmbedding, error.message);
        throw error;
      }
    }
  • mcp.js:546-552 (registration)
    The tool handler case that receives the tool request and calls memoryManager.searchMemoriesBySimilarity with the embedding, limit, and threshold parameters.
    case "search_memories_similarity":
      const similarMemories = await memoryManager.searchMemoriesBySimilarity(
        args.embedding,
        args.limit || 10,
        args.threshold || 0.7
      );
      return { content: [{ type: "text", text: JSON.stringify(similarMemories, null, 2) }] };
  • mcp.js:62-86 (schema)
    The tool schema definition for search_memories_similarity including its description, input parameters (embedding array, limit integer, threshold number), and required fields.
    {
      name: "search_memories_similarity",
      description: "Search memories by vector similarity",
      inputSchema: {
        type: "object",
        properties: {
          embedding: {
            type: "array",
            items: { type: "number" },
            description: "Query embedding vector"
          },
          limit: {
            type: "integer",
            description: "Maximum number of results",
            default: 10
          },
          threshold: {
            type: "number",
            description: "Minimum similarity threshold",
            default: 0.7
          }
        },
        required: ["embedding"]
      }
    },
  • A standalone schema definition for search_memories_similarity in the memory-tools module, defining the same input validation structure as the main registration.
      name: "search_memories_similarity",
      description: "Search memories by vector similarity",
      inputSchema: {
        type: "object",
        properties: {
          embedding: {
            type: "array",
            items: { type: "number" },
            description: "Query embedding vector"
          },
          limit: {
            type: "integer",
            description: "Maximum number of results",
            default: 10
          },
          threshold: {
            type: "number",
            description: "Minimum similarity threshold",
            default: 0.7
          }
        },
        required: ["embedding"]
      }
    },

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/randyandrade/agi-mcp-server'

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