Skip to main content
Glama

vector-memory

Persistent vector memory for AI agents backed by Ollama (embeddings, tested with qwen3-embedding:8b) and Qdrant (vector store). Two entry points over the same core (vector_memory.core):

  • vector-memory-mcp — MCP stdio server (six tools, 1:1 with core ops)

  • vector-memory — one-shot CLI (typer, 1:1 with the same core ops)

It exposes six operations:

Tool

Description

save_memory(text, metadata, collection)

Embeds text via Ollama and upserts it into Qdrant. metadata is optional metadata — a JSON object or a JSON string, both accepted — stored alongside the vector. Optional collection targets a specific collection (created on the fly if missing; empty = server default).

save_memories(texts, metadata, collection)

Batch version: embeds a list of texts in one Ollama call and upserts them as a single batch. metadata (object or JSON string) applies to all documents.

search_memory(query, limit, filter, collection)

Embeds query and returns the limit most similar stored memories — each hit includes its point ID, similarity score, metadata, and text, so you can delete_memory/update_memory straight from search output. Optional filter is a payload filter — JSON object or JSON string (see below).

update_memory(point_id, text, metadata, collection)

Re-embeds text and overwrites the point in place (same ID). Empty metadata keeps the existing payload metadata; a JSON object or JSON string replaces it. Nonexistent IDs return an error.

delete_memory(point_id, collection)

Deletes the stored memory (point) with the given ID.

list_collections()

Lists all existing Qdrant collections.

Every data tool takes an optional collection string; an empty value uses the server-configured collection (--collection / COLLECTION_NAME).

Payload filtering

search_memory accepts an optional filter — a JSON object or a JSON string built from payload fields. List values become a MatchAny condition (matches if the payload field contains any of the values), scalar values become exact matches. Multiple conditions are AND-ed together:

{"tags": ["x"]}                      // payload.tags contains "x"
{"source": "doc1"}                   // exact match
{"tags": ["a", "b"], "source": "s"}  // AND of MatchAny + match

On startup the server connects to Ollama and Qdrant and creates the collection automatically if it does not exist (cosine distance, dimension probed from the embedding model). If a collection already exists with a different vector dimension than the current EMBED_MODEL produces — whether the default collection at startup or an ad-hoc one named in a tool call — the server fails fast with a clear error instead of silently storing corrupt vectors — fix it by deleting and recreating the collection, or by switching back to the original embedding model.

Invalid metadata/filter JSON is not silently ignored: the tool's return string includes a warning line (e.g. Warning: failed to parse metadata JSON; saved with empty metadata).

Requirements

  • Python 3.11+ and uv

  • A reachable Ollama instance (default http://192.168.X.X:11434)

  • A reachable Qdrant instance (default http://192.168.X.X:6333)

Related MCP server: Qdrant MCP Server

Installation (CLI)

From the repo directory, install both executables as editable uv tools (on PATH in ~/.local/bin, edits to the checkout take effect immediately):

uv tool install -e .

This installs vector-memory (and the optional vector-memory-mcp server executable). Verify with vector-memory list-collections.

Configuration

Settings resolve in order: CLI flags > environment variables > defaults.

Setting

CLI flag

Env var

Default

Ollama base URL

--ollama-url

OLLAMA_URL

http://192.168.X.X:11434

Qdrant base URL

--qdrant-url

QDRANT_URL

http://192.168.X.X:6333

Embedding model

--embed-model

EMBED_MODEL

qwen3-embedding:8b

Collection name

--collection

COLLECTION_NAME

agent_scenarios

Upgrading from mcp-ollama-qdrant

Upgrading from the old mcp-ollama-qdrant repo/server: collections and memories carry over unchanged — the package rename does not touch Qdrant. Register the new entry points (vector-memory CLI, vector-memory-mcp server) in your client config instead of mcp-ollama-qdrant; the default collection agent_scenarios is reused as-is.

Running

With uv (recommended — handles the venv and sync automatically):

uv sync
uv run vector-memory-mcp        # run the stdio MCP server (or: python mcp_server.py)
uv run vector-memory search "db outage"   # one-shot CLI (no daemon)
uv run vector-memory --help               # save | save-many | search | update | delete | list-collections

Every CLI invocation is one-shot — there is no daemon and no CLI-to-server RPC; the CLI calls the same core functions as the MCP server directly.

Interactive testing / inspection:

uv run mcp dev mcp_server.py

CLI commands

vector-memory save "text" --metadata '{"project":"p","type":"decision","tags":["x"]}' [--collection C]
vector-memory save-many "text A" "text B" --metadata '{...}' [--collection C]
vector-memory search "query" [--limit N] [--filter '{"tags":["x"]}'] [--project p] [--collection C]
vector-memory update <point-id> --text "new text" [--metadata '{...}']
vector-memory delete <point-id>
vector-memory list-collections

Semantics worth knowing: point IDs are uuid4 — saving identical text twice creates two points (dedupe is the caller's job; use update to modify in place). update --metadata replaces the whole payload metadata; pass only --text to keep it. Search hits include ID + score + metadata + full text. --project-scoped searches only see memories saved with a project metadata field. Invalid metadata/filter JSON continues with a Warning: line — check for it.

MCP client config

Add to your client's MCP config (Claude Desktop, Hermes, etc.):

{
  "mcpServers": {
    "vector-memory": {
      "command": "uv",
      "args": [
        "--directory", "/path/to/vector-memory",
        "run", "vector-memory"
      ],
      "env": {
        "OLLAMA_URL": "http://192.168.X.X:11434",
        "QDRANT_URL": "http://192.168.X.X:6333",
        "EMBED_MODEL": "qwen3-embedding:8b",
        "COLLECTION_NAME": "agent_scenarios"
      }
    }
  }
}

(Env entries are optional if the defaults already point at your instances.)

For Hermes ~/.hermes/config.yaml:

mcp:
  servers:
    vector-memory:
      command: uv
      args: ["--directory", "/path/to/vector-memory", "run", "vector-memory"]

Testing

Offline unit tests (Ollama and Qdrant are mocked — no live services needed):

uv run pytest tests/

End-to-end smoke test against live Ollama + Qdrant (saves a few memories, searches for them, prints similarity scores):

uv sync
uv run python scripts/live_smoke.py

Notes

  • All diagnostics are logged to stderr; stdout is reserved for the stdio MCP transport.

  • Dependency pins: numpy<2, qdrant-client<1.15, mcp[cli]<2 — chosen for compatibility with older x86-64 hardware (pre-x86-64-v2) and the mcp v2 FastMCP rename. Adjust only with reason.

Available Tools

6 tools
delete_memoryA

Delete a stored memory (point) from the vector DB by ID.

If point_id does not exist, an error is returned (existence is checked
first). If collection is given, the deletion happens there (default: the
server-configured collection).
ParametersJSON Schema
NameRequiredDescriptionDefault
point_idYes
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that a nonexistent point_id raises an error because existence is checked first, and that collection defaults to the server-configured one. It does not state that the deletion is permanent/irreversible, whether it requires elevated permissions, or whether it can remove multiple points.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, followed by the failure mode and the optional scoping parameter. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and both parameters plus the error path are covered. The one notable omission for a destructive tool is an explicit irreversibility/permission note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does for both parameters: point_id is the ID of the stored point whose existence is validated, and collection scopes the deletion with a documented default (server-configured collection). No format examples (e.g., ID scheme) are given, but meaning is clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (a stored memory/point) in the vector DB, keyed by ID. It is unambiguous what the tool does and clearly distinct from search_memory/update_memory, though it never names the siblings explicitly to route the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the obvious CRUD semantics, and the error-on-missing-id note gives some operational context. However, there is no explicit guidance on when to delete versus update_memory or how to handle a memory that should be removed but not destroyed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_collectionsA

List all collections currently present in Qdrant.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral disclosure. It implies a read-only enumeration with 'currently present', but does not state that it is non-mutating, whether results are paginated or ordered, or whether any auth/scope is required — though for a zero-parameter listing tool there is limited behavior to disclose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the resource and scope appear immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a zero-parameter list operation the description is essentially complete, with only minor omissions around ordering/auth that are unlikely to affect correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('collections'), scoped to 'currently present in Qdrant'. It is unambiguous, and no sibling tool (delete_memory, save_memory, search_memory, update_memory) operates on collections, so no sibling conflict needs resolving.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to call this versus alternatives, nor any prerequisite or follow-up context (e.g., using the result before calling another collection-scoped tool). It only states what the tool does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_memoriesB

Save multiple documents into the vector DB in one batch.

All texts are embedded in a single Ollama call and upserted together. metadata (JSON string or object) is applied to every document. If collection is given, the memories are stored there (created automatically if missing).

ParametersJSON Schema
NameRequiredDescriptionDefault
textsYes
metadataNo{}
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add real behavior: embeddings happen in a single Ollama call, writes are upserts, metadata is stamped on every document, and the collection is auto-created if missing. It omits error/failure behavior, overwrite semantics for existing documents, and any size or rate constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences with no filler, front-loaded with what the tool does before the operational details. The information is well ordered, though the parenthetical about JSON string or object slightly duplicates the schema's anyOf.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, and the mutation semantics are partially covered. However, for a no-annotation batch write the description leaves the agent without error handling, overwrite behavior, or batch-size expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate; it explains that metadata is applied to every document and that collection defaults to being auto-created. It says nothing about how texts is chunked, per-call limits, or the string-vs-object metadata duality, leaving gaps the schema does not fill.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save multiple documents into the vector DB') and the scope ('in one batch'), which implicitly but clearly separates it from the singular save_memory sibling. It stops short of naming the sibling it is not, so differentiation relies on the agent inferring from 'multiple'/'batch'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use versus when-not guidance and no acknowledgment of save_memory, search_memory, or update_memory as alternatives. The batch framing is the only signal for choosing this over the single-document tool, which is weak routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_memoryA

Save a new document or scenario outcome into the vector DB.

metadata may be a JSON string (e.g. '{"source": "doc1", "tags": ["a"]}')
or a JSON object — both are accepted. On parse failure an empty dict is
stored instead and a warning is returned alongside the result. If
collection is given, the memory is stored there (created automatically
if missing; default: the server-configured collection).
ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
metadataNo{}
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it discloses that metadata parse failure stores an empty dict and returns a warning, and that a supplied collection is created automatically if missing. Less positive traits are undisclosed, notably whether saving duplicate text overwrites or appends, and no auth/permission context is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose leads, followed by the two non-obvious parameter behaviors, with no filler sentences. The parenthetical JSON example is slightly heavy but earns its place by resolving the string-vs-object ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still notes a warning is returned alongside the result. For a 3-parameter mutation tool with no annotations, this is nearly complete; the main omission is duplicate/overwrite behavior and permission requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and largely does: it explains that metadata accepts either a JSON string or a JSON object, documents the failure fallback, and explains collection semantics including the default. Only 'text', the sole required parameter, is left unelaborated, which is self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Save a new document or scenario outcome into the vector DB.' An agent knows this is a write-to-vector-store operation, but the description never distinguishes it from the near-identical sibling save_memories (plural) or from update_memory, which is the real risk here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'new' implies creation as opposed to update_memory, but this is inference rather than guidance. There is no explicit when-to-use, when-not-to-use, or named alternative despite three closely related siblings, so an agent has no stated basis for choosing between save_memory, save_memories, and update_memory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memoryA

Search the vector DB for past documents/scenarios semantically similar to a query.

filter is an optional payload filter, as a JSON string or object (e.g.
'{"tags": ["x"]}' — only items whose tags field contains "x").
List values use MatchAny, scalars use exact match, and multiple
conditions are AND-ed. On parse failure the search runs without a filter
and a warning is returned alongside the results.
If collection is given, the search runs there (default: the
server-configured collection).
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
filterNo
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does so well: it discloses that a filter parse failure degrades to an unfiltered search with a warning returned alongside results, and that an omitted collection falls back to the server-configured one. It does not state the read-only nature explicitly or discuss result ordering/pagination, but for a search operation the disclosed failure-mode behavior is the valuable part.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in one sentence, followed by tightly scoped paragraphs on filter and collection. The filter explanation is dense but every clause adds operative detail; nothing reads as filler, though the parenthetical example is slightly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers the two parameters whose semantics are non-obvious plus the error path. The only meaningful gap is the undocumented 'limit' behavior, which an agent would have to guess from the default of 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does an excellent job on 'filter' (JSON string or object, MatchAny for lists, exact match for scalars, AND-ed conditions) and covers the 'collection' default, but 'limit' is never explained and 'query' is left to the obvious. Roughly half the parameters get added meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search the vector DB for past documents/scenarios semantically similar to a query.' That is unambiguous and clearly distinct from the save/delete/update siblings. It does not explicitly name an alternative for the list_collections style use case, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the filter and collection mechanics, which tells an agent when those parameters matter, but there is no explicit 'use this instead of X when Y' guidance and no exclusions. An agent must infer that this is the retrieval entry point rather than being told.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_memoryA

Update an existing memory (point) in place under the same ID.

If point_id does not exist, an error is returned (existence is checked
first). When text is given, it is re-embedded and overwrites the stored
text; when text is None the existing text and vector are kept. When
metadata is given (JSON string or object), the payload metadata is
replaced entirely; when left empty ("") the existing metadata is kept.
Passing both text=None and an empty metadata is an error (nothing to
update).
If collection is given, the update happens there.
ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
metadataNo
point_idYes
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that a missing point_id errors (existence checked first), that text triggers re-embedding and overwrites stored text, that metadata is replaced entirely, that empty string keeps existing metadata, and that text=None plus empty metadata is an error. It omits auth/permission requirements and concurrency/atomicity behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key fact (in-place update under the same ID) is front-loaded, and the conditional semantics that follow are dense but each sentence carries load-bearing information. Slightly heavy for the topic but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and the description thoroughly covers mutation semantics, error conditions, and validation rules for a no-annotation write tool. The only missing context is permission/authorization and any side effects beyond the target point.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: point_id must exist (checked first), text=None preserves existing text/vector while a value re-embeds and overwrites, metadata accepts a JSON string or object and is replaced wholesale, empty string preserves it, and collection scopes the update. This is more meaning than the bare schema provides for all four parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('Update an existing memory (point) in place under the same ID'), which cleanly separates it from siblings like save_memory and delete_memory. An agent can tell this is an in-place mutation keyed by point_id without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the conditions under which different behaviors occur (text given vs None, metadata given vs empty), which is useful implied guidance. However, it never names alternatives or explicitly states when to prefer update_memory over save_memory/delete_memory, so contextual routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observeddelete_memory
    • First observedlist_collections
    • First observedsave_memories
    • First observedsave_memory
    • First observedsearch_memory
    • First observedupdate_memory

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct operation: save (single), save_memories (batch), search, update, delete, and list_collections. The single-vs-batch split between save_memory and save_memories is explicitly distinguished in the descriptions, so an agent can reliably choose.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (save_memory, search_memory, update_memory, delete_memory, save_memories, list_collections). The only variation, list_collections, reflects a genuinely different resource (collections vs memories), not an inconsistent style.

Tool Count5/5

Six tools is well-scoped for a vector-DB memory server, covering the full point lifecycle plus collection listing without redundancy. Nothing feels padded or missing at the count level.

Completeness4/5

Core memory lifecycle (create, batch create, search, update, delete) and collection listing are all present, making the surface largely complete. Minor gaps remain: no get_memory-by-ID retrieval and no collection deletion/creation management beyond implicit auto-creation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides intelligent memory management capabilities using Qdrant vector database for semantic search and storage. Supports global, learned, and agent-specific memory types with markdown processing and duplicate detection.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables storing and retrieving information using semantic search with Qdrant vector database. Acts as a memory layer for LLMs to persistently store and semantically search through information and metadata.
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Persistent semantic memory for AI agents. SQLite-backed, local-first, zero config. Semantic search via Ollama embeddings with keyword fallback. Tools: remember, recall, history, forget, stats.
    17
    37 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides persistent AI agent memory using a local vector database for long-term semantic storage and short-term session scratchpads. It enables low-latency memory operations including search, storage, and bulk management without external cloud dependencies.
    -