openmem-mcp
Indexes Obsidian vaults as memory sources, allowing notes from Obsidian to be retained and updated in the configured memory backend.
Supports Ollama as an LLM route for Hindsight memory stacks, enabling local model-backed reflection and synthesis.
Supports OpenAI-compatible LLM endpoints as a model route for Hindsight memory stacks, enabling reflection and synthesis.
OpenMem
Docs: bcmyguest.github.io/openmem/ · npm: @bcmyguest/openmem · MCP: npx -y -p @bcmyguest/openmem openmem-mcp · Repo: github.com/bcmyguest/openmem
OpenMem is a memory interface for coding agents: a stable memory_* API and ops surface over pluggable backends (Hindsight, mem0, Cognee, …), with shared wizard, indexer, and import/export formats (PMM first).
Formerly personal-memory. Use the
openmemCLI and MCP server name; installers drop the oldpersonal-memoryMCP entry.
Start here: Concepts · Quickstart
Quickstart
Step | Command |
1. Wizard |
|
2. Check |
|
3. Coding agents |
|
Checkout instead of npx:
git clone https://github.com/bcmyguest/openmem.git && cd openmem
npm install && npx . setupNeeds: Docker Compose v2, Node ≥ 20.12, and an LLM route if you use Hindsight (lemond, Ollama, or OpenAI-compatible — set in the wizard).
Day-2
npx @bcmyguest/openmem up
npx @bcmyguest/openmem down
npx @bcmyguest/openmem switch mem0 --yes
npx @bcmyguest/openmem doctorWizard dry-run (what first setup plans — no writes):

Full guide: Quickstart · Concepts · Architecture
Related MCP server: mem0-mcp
Architecture
flowchart TB
subgraph disk["Sources on disk"]
GIT[Git repos]
OBS[Obsidian vaults]
MD[notes · papers · bookmarks]
FEED[Feed cache]
end
subgraph compose["Docker Compose — one active provider"]
IDX[indexer]
PROV[(Provider API)]
IDX -->|retain / update| PROV
LIT[LiteLLM]
NLM[NotebookLM sync]
LIT -.->|Hindsight stack + optional reflect synth| PROV
NLM -.->|opt-in profile| PROV
end
LIT --> LLM[(lemond · Ollama · OpenAI-compatible)]
subgraph host["Host — coding agents"]
AG[Claude Code · Codex · Cursor Agent · OpenCode]
UMCP["OpenMem MCP\n(memory_*)"]
SHIM["Session hooks"]
PLG["Hindsight plugin\n(optional)"]
SKILL["openmem skill"]
PMCP[Provider MCP optional]
NLMCP[NotebookLM MCP optional]
end
GIT --> IDX
OBS --> IDX
MD --> IDX
FEED --> IDX
AG <-->|stdio| UMCP
AG <-->|hooks| SHIM
AG --> SKILL
AG <-->|optional| PLG
SHIM --> UMCP
AG <-->|stdio| PMCP
AG <-->|stdio| NLMCP
UMCP -->|loopback HTTP| PROV
PLG -->|loopback HTTP| PROV
PMCP -->|loopback HTTP| PROV
NLMCP -->|loopback HTTP| PROV
W["npx @bcmyguest/openmem\nsetup · install-mcp"] -.->|configure| compose
W -.->|mcp.json| UMCPConnection | What it is |
Sources → indexer → provider | Shared watcher; sink from active manifest ( |
Agents → MCP / hooks → provider |
|
Wizard (dashed) | Writes env, starts compose, registers MCP — not on the hot indexing path |
On Hindsight stacks, memory_reflect uses Hindsight's native reflect API and returns its answer with source evidence. On mem0 and Cognee, it searches first and uses the configured LiteLLM route for synthesis when available; otherwise it returns the search hits. See Architecture for MCP and hooks limits.
Providers and portability
Providers — manifests under
providers/(Hindsight, mem0, Cognee). Add another with a compose fragment, indexer sink, and wizard hooks.MCP — unified
memory_*plus optional native/NotebookLM servers: MCP setup.Portable memory —
memory_export/memory_importspeak PMM: Portable memory.Switch —
npx @bcmyguest/openmem switch <provider>does not migrate data by itself; export/import (or re-index) moves content.
Default Hindsight compose: litellm, hindsight (127.0.0.1:8888), indexer. mem0/Cognee stacks omit LiteLLM unless you add them separately.
Inspiration and related
OpenMem is not affiliated with these projects; they shape the problem or the pattern.
Inspiration for a vendor-agnostic interface + pluggable providers (there: feature flags; here: coding-agent memory). | |
One CLI over many backends; declarative config and tasks without replacing each tool’s own settings. | |
Default memory provider in this repo. | |
Supported memory provider. | |
Supported memory provider. | |
Model proxy used on Hindsight stacks. |
More setup analogues (Chezmoi, Home Assistant integrations, …): Provider status.
License
Apache License 2.0 — see LICENSE (Copyright 2026 B Guest).
Available Tools
10 toolsmemory_addA
Store text in the active memory provider (Hindsight bank, mem0 user scope, or Cognee dataset ingest when supported). On Hindsight, defaults to async ingest so the MCP returns before LLM extraction finishes (avoids client timeouts).
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Hindsight bank or mem0 user_id scope (default: openmem-mcp) | |
| async | No | Hindsight only: queue background ingest (default true). Set false to wait for extraction (slow; may hit MCP timeouts). | |
| content | Yes | Text to remember | |
| metadata | No | Optional provider-specific metadata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the most important runtime trait: Hindsight ingest is async by default so the call returns before LLM extraction completes, avoiding client timeouts. It does not cover failure modes, deduplication/overwrite behavior on existing content, or how the 'active' provider is resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, then the one non-obvious operational caveat. Every clause earns its place and nothing is repeated verbatim from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description should say what is returned (an id? a confirmation?), whether repeated content dedupes, and how the active provider is chosen. The async caveat is well covered, but those gaps leave an agent guessing about return handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including the bank scoping dual-purpose and async flag) are already documented in the schema; the description's provider list merely echoes that. The vague `metadata` field ("provider-specific") gets no clarification beyond the schema in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Store text") and resource ("active memory provider"), and enumerates the concrete backends (Hindsight bank, mem0 user scope, Cognee dataset). It is clearly the write counterpart to siblings like memory_recall and memory_search, but it never names those siblings to draw the contrast explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies when to call it (persisting text), and the async note gives runtime guidance, but there is no explicit when-to-use guidance versus memory_import, memory_consolidate, or memory_reflect, nor any statement of prerequisites or what should not be added.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_consolidateD
Provider maintenance: Cognee cognify for a bank/dataset; Hindsight notes LiteLLM route; mem0 skips.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses almost nothing: no statement of whether consolidation mutates or deletes stored memories, whether it is reversible, how long it runs, or what it costs. The one genuine behavioral signal is that mem0 is skipped, which is useful but far short of adequate for a maintenance operation on a memory store.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact sentence with no padding, and the 'Provider maintenance:' prefix is correctly front-loaded. However, the compression is achieved by dropping connectives and articles, producing telegraphic fragments whose ambiguity is not offset by brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with zero annotations, an undocumented sole parameter, and no output schema, the description should explain effects and return behavior. Instead it offers three provider-specific fragments, leaving an agent unable to predict what happens after the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'bank' parameter, and the description only obliquely alludes to it via 'for a bank/dataset'. It never says whether bank is required, what an omitted bank means (all banks?), or what a valid identifier looks like, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The leading phrase 'Provider maintenance' gestures at an administrative operation, but the rest is provider-specific jargon ('Cognee cognify', 'Hindsight notes LiteLLM route') that never states in plain terms what the tool actually does. 'Consolidate' plus the fragmented provider clauses does not let an agent distinguish this from memory_reflect or memory_provider_status with confidence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to invoke this versus any of the nine siblings, no preconditions, and no exclusions. The 'mem0 skips' fragment implies a provider-specific no-op but never frames it as an invocation rule, so an agent has no basis for routing decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_exportA
Export memories as PMM v1 (json/jsonl). Hindsight lists via /memories/list; mem0 GET /memories; Cognee dataset /data.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Hindsight bank, mem0 user_id, or indexer bank for Cognee dataset mapping. Omit on Hindsight to export all banks. | |
| format | No | Serialization (default json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full burden: it discloses the supported formats and which provider endpoints back each bank type, and notes the all-banks option. It never states that this is a read-only operation, whether exports are paginated/streamed, or any size/time limits, so a mutation-free export is left to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action and formats front-loaded, zero repetition of the name. The provider-endpoint shorthand is dense but earns its place as implementation context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter, zero-required export with full schema coverage and no output schema, the description covers action, target format and per-provider source behavior. Missing read-only/pagination notes are minor rather than blocking for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented; the description only echoes the format enum and the bank's role for Hindsight listings without adding syntax, defaults beyond the schema, or examples. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export memories') plus the target serialization ('PMM v1 (json/jsonl)'), which cleanly separates it from memory_import, memory_recall and memory_search. It does not name a sibling explicitly, so it falls short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'export' – the agent can infer backup/migration rather than live retrieval, but there is no explicit 'use this when' or exclusion against memory_recall/memory_search. The second sentence routes per-provider behavior but says nothing about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetA
Delete a memory by id (mem0) or drop an entire Hindsight bank when bank is set without memory_id.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Hindsight bank to delete, or mem0 user_id scope for bulk delete | |
| memory_id | No | Provider memory id (mem0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the destructive scope (single memory vs. entire bank), but omits irreversibility, confirmation requirements, and what happens if both parameters are supplied — significant gaps for a delete tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the primary action and then the conditional second mode. No filler, nothing redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the two modes but leaves out preconditions, irreversibility, and result behavior. Adequate to call correctly, but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; however the description adds meaning beyond the schema by explaining the interaction between the two parameters — that bank without memory_id triggers a whole-bank drop. That conditional semantics is not inferable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete/drop) with two clearly delineated resource modes: a single memory by id via mem0, or an entire Hindsight bank. This is readily distinguishable from siblings like memory_recall, memory_search, and memory_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete routing rule: pass bank alone to drop a bank, pass memory_id to delete a single memory. It does not explicitly name alternatives or state exclusions (e.g., when to prefer memory_consolidate), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_importC
Import PMM v1 payload into the active provider (best-effort cross-provider).
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Serialized export payload | |
| merge_strategy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Best-effort cross-provider' usefully discloses that partial or lossy imports are possible, but nothing is said about write/permission requirements, reversibility, idempotency, or how merge_strategy affects existing data — large gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is arguably too terse given the tool's complexity, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and one of two parameters undocumented, the description should explain the merge semantics and what the agent gets back or what can be lost. As written, an agent cannot call this safely with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: 'data' is documented as a serialized payload and the description adds that it is a PMM v1 format, but merge_strategy has no schema description and the description never explains skip_duplicates vs overwrite. The description therefore fails to compensate for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Import') and resource ('PMM v1 payload') with a target ('the active provider'), which distinguishes it from siblings like memory_export and memory_add. 'PMM v1' and 'active provider' are unexplained jargon, but the import operation itself is identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus memory_add or memory_consolidate, nor any prerequisites about provider state. The only contextual hint is 'best-effort cross-provider,' which implies behavior but does not route the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_project_scopeB
Read the local project bank mapping and session access policy for a workspace. Makes no memory-provider calls.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Absolute workspace path (defaults to the MCP process working directory) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully clarifies that the tool reads local state and makes no memory-provider calls, but it does not describe permissions, failure behavior, or what the returned mapping/policy looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two front-loaded sentences with no filler. The purpose is stated first, followed by the key non-provider behavioral constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple local read with one optional, fully documented parameter, the description gives enough context to call the tool correctly. The main omission is that, with no output schema, it does not describe the return shape beyond naming the data categories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional parameter is fully described in the schema, so the baseline is 3. The description adds no parameter-level meaning beyond what the schema already provides for 'cwd'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and precise resource ('local project bank mapping and session access policy for a workspace'). It also differentiates itself from provider-backed siblings by noting 'Makes no memory-provider calls', though it does not name specific alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no named alternatives. The negative behavioral note ('no memory-provider calls') hints at a local-only scope but does not tell an agent when to choose this tool over memory_recall or memory_provider_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_provider_statusA
Report active MEMORY_PROVIDER and resolved backend URL (no secrets).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does add real value by implying a read-only operation and explicitly promising "no secrets" are returned (redaction behavior). However it does not say what happens when MEMORY_PROVIDER is unset or how the URL is resolved (env vs. config vs. default), which are the questions this tool exists to answer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the parenthetical caveat placed where it matters. Nothing is wasted and nothing needs to be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description effectively doubles as the return-value contract (provider name, resolved URL, secrets excluded). The only missing piece is the unset/unresolved case, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description also adds light semantics about the return surface by distinguishing the raw MEMORY_PROVIDER from the "resolved" backend URL, but there are no parameters to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Report") and a specific resource (active MEMORY_PROVIDER plus resolved backend URL). It is unambiguously distinct from every sibling, which all perform recall/add/search/export operations rather than diagnostic status reporting, though it never names a sibling to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you call this to discover which memory backend is in effect, but there is no explicit when-to-use statement, no preconditions, and no alternatives named. For a simple diagnostics tool this is minimally adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recallC
Retrieve context for a question (Hindsight recall API; mem0/Cognee use search under the hood).
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | ||
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It mentions the backend APIs but does not describe whether the operation is read-only, what it returns, whether it mutates state, or any permission/rate-limit considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no padding. The parenthetical about Hindsight/mem0/Cognee is somewhat tangential but still compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and three undocumented parameters, the description leaves significant gaps. It does not tell an agent enough about behavior, return values, or parameter usage to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for all three parameters. It only indirectly maps 'query' to 'a question'; the 'bank' and 'limit' parameters are not explained at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve context for a question.' It is clear what the tool does in general, but it does not distinguish this from the sibling memory_search beyond a vague parenthetical about underlying implementations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for question-answering context retrieval, but gives no explicit guidance on when to choose memory_recall over memory_search or memory_reflect. There are no exclusions or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_reflectB
Synthesize session context for a question. Hindsight uses recall; mem0/Cognee search then optional LiteLLM synthesis (PM_LLM_URL / stack LiteLLM).
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | ||
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does add useful behavioral context: behavior varies by provider, and mem0/Cognee may perform search plus optional LiteLLM synthesis using PM_LLM_URL. However, it does not state whether the call is read-only, whether it persists anything, expected cost/latency, or auth requirements beyond a config variable name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is compact and front-loads the purpose in the first sentence. The second sentence is dense with unexplained names and acronyms (Hindsight, mem0/Cognee, PM_LLM_URL, stack LiteLLM), reducing its practical clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three undocumented parameters, no annotations, and no output schema, the description leaves significant gaps: parameter meanings, return shape, side effects, and selection guidance versus siblings are missing. The provider routing note helps, but not enough to make the definition complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only implies that 'query' is the question being synthesized, while 'bank' and 'limit' are left entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Synthesize session context for a question.' The second sentence distinguishes this from lower-level siblings by naming recall/search as internal steps, though the provider jargon makes the boundary less crisp than it could be.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: synthesize context for a question, with recall/search mentioned as internal mechanisms. There is no explicit rule for when to choose this over memory_recall or memory_search, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchC
Semantic or graph search over memories in the active provider.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Optional bank / user_id scope | |
| limit | No | Max results where supported | |
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it discloses almost nothing behavioral: not whether the call is read-only (implied only by the verb 'search'), not whether 'active provider' must be configured first, not what happens when the provider doesn't support limits, and not what result shape to expect. One clause about the two search modes is the only added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is tight, though the brevity edges into under-specification rather than optimal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover more: it should say what a result contains, whether ordering/relevance scores are returned, and how provider selection and limits interact. For a search tool in a nine-sibling memory family, this leaves the agent guessing on core call semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 67%, and the undocumented parameter is the required one: 'query'. The description says search may be 'semantic or graph' but never explains how the query string is interpreted differently in each mode, nor what 'active provider' means for scoping alongside the 'bank' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (search) and a specific resource (memories), and adds the useful qualifier that it can be semantic or graph-based and operates against the active provider. That distinguishes it from mutating siblings like memory_add or memory_forget, though it doesn't explicitly contrast with the closest alternative, memory_recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over memory_recall, or over memory_reflect/memory_project_scope. The only usage signal is implicit — that it's a query tool — and nothing says when-not to use it or what prerequisites (an active provider, a populated bank) are required.
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.
10 tool updates
v0.6.3- First observed
memory_add - First observed
memory_consolidate - First observed
memory_export - First observed
memory_forget - First observed
memory_import - First observed
memory_project_scope - First observed
memory_provider_status - First observed
memory_recall - First observed
memory_reflect - First observed
memory_search
TDQS
Scored across 10 tools
Most tools have distinct operations, but memory_recall, memory_search, and memory_reflect overlap in retrieval/synthesis semantics. The descriptions clarify provider-specific behavior, which mostly resolves the ambiguity.
All tools use a consistent snake_case memory_* prefix and clear verb/noun patterns. The naming is predictable across the entire set.
Ten tools is well-scoped for a memory-provider abstraction layer. Each tool covers a meaningful operation such as add, search, export, status, consolidation, or scoping.
The surface covers creation, retrieval, deletion, import/export, provider status, synthesis, consolidation, and project scoping. Minor gaps exist around direct update or get-by-id operations, but core workflows are covered.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Memory for AI agent teams across tools, sessions, repositories, and teammates.
Persistent memory for AI agents. Search, store, and recall across sessions.
Related MCP Servers
- AlicenseAqualityBmaintenanceMemory manager for AI apps and Agents using various graph and vector stores and allowing ingestion from 30+ data sources632,783Apache 2.0

mem0-mcpofficial
AlicenseAqualityCmaintenanceSelf-hosted Mem0 MCP server integrating Qdrant, Neo4j, and Ollama for semantic memory search, graph entity relationships, and memory management via OpenMemory API.64MIT- AlicenseAqualityBmaintenanceProvides persistent, searchable memory across AI coding agent and chat history (Claude Code, Codex, Gemini CLI, ChatGPT, and more) via retrieval-augmented generation, enabling semantic and hybrid search to retain context across sessions.5MIT
- AlicenseNot gradedqualityCmaintenanceConsolidates git history, test results, and Copilot sessions into a searchable SQLite database for AI assistants to answer questions about development activity.5MIT