MemoVault
MemoVault is a local, privacy-focused memory system for AI assistants that enables persistent memory across sessions.
Store memories — Add information with optional type classification (fact, preference, event, opinion, procedure, personal)
Search memories — Find relevant memories via keyword (BM25) or semantic (vector) search
Chat with memory — Get AI responses automatically enhanced with relevant stored memories as context
Retrieve a specific memory — Fetch full content and metadata by unique ID
List recent memories — Browse recently stored memories with a configurable limit
Delete memories — Remove a specific memory by ID, or clear all memories at once
Monitor status — Check memory system health, statistics, and token economics via a real-time web dashboard
Integrate with AI tools — Connect with Claude Code, Cursor, Gemini CLI, and Codex to auto-inject memory context before prompts and save session summaries on exit
Flexible backend — Run fully locally with Ollama, or use OpenAI; all data stored as local files by default
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MemoVaultRemember that I prefer using Python for backend development"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MemoVault
A personal memory system for AI assistants — runs entirely on your machine, stores everything locally, and integrates with Claude Code, Cursor, Gemini CLI, and Codex via lifecycle hooks.
Privacy first. Nothing leaves your machine by default. Memories are stored as local files. The dashboard polls your own REST API. Plugin hooks call
localhostonly.
Features
STM / LTM architecture — short-term session memory with decay + long-term memory with 4-dimensional importance scoring
BM25 + vector search — keyword (simple) or semantic (Qdrant) retrieval
MCP server — first-class Claude Code integration with 15+ tools
Plugin hooks — lifecycle hooks for Claude Code, Cursor, Gemini CLI, Codex CLI
Dashboard UI — real-time web dashboard at
http://localhost:8080/uiToken economics — tracks discovery vs read tokens and efficiency ratio
Fully local — Ollama LLM + local embeddings + embedded Qdrant, zero cloud dependency
Related MCP server: claude-recall
Installation
From source
git clone https://github.com/your-org/memovault
cd memovault
pip install -e . # or: uv sync
cp .env.example .envFrom PyPI
pip install memovaultSetup
Option A — Fully local (Ollama)
1. Install Ollama and pull models
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1 # main LLM
ollama pull nomic-embed-text # embeddings2. Configure .env
MEMOVAULT_LLM_BACKEND=ollama
MEMOVAULT_OLLAMA_MODEL=llama3.1:latest
MEMOVAULT_OLLAMA_API_BASE=http://localhost:11434
MEMOVAULT_EMBEDDER_BACKEND=ollama
MEMOVAULT_EMBEDDER_OLLAMA_MODEL=nomic-embed-text:latest
# simple = BM25 (no vector DB), vector = Qdrant (semantic search)
MEMOVAULT_MEMORY_BACKEND=simple
MEMOVAULT_DATA_DIR=./memovault_data3. Start
memovault service start
open http://localhost:8080/uiOption B — OpenAI
MEMOVAULT_LLM_BACKEND=openai
MEMOVAULT_OPENAI_API_KEY=sk-...
MEMOVAULT_OPENAI_MODEL=gpt-4o-mini
MEMOVAULT_EMBEDDER_BACKEND=openai
MEMOVAULT_EMBEDDER_OPENAI_MODEL=text-embedding-3-small
MEMOVAULT_MEMORY_BACKEND=vectorMemory content is sent to OpenAI's API for scoring and embedding when using this backend.
Claude Code — MCP Integration
Add to ~/.claude/claude.json:
Local (Ollama)
{
"mcpServers": {
"memovault": {
"command": "memovault",
"args": ["mcp"],
"env": {
"MEMOVAULT_LLM_BACKEND": "ollama",
"MEMOVAULT_OLLAMA_MODEL": "llama3.1:latest"
}
}
}
}OpenAI
{
"mcpServers": {
"memovault": {
"command": "memovault",
"args": ["mcp"],
"env": {
"MEMOVAULT_LLM_BACKEND": "openai",
"MEMOVAULT_OPENAI_API_KEY": "sk-..."
}
}
}
}Plugin Hooks
Hooks automatically inject memory context before each prompt and save session summaries on exit. Requires the REST API to be running.
Quick start
memovault service start # start REST API
memovault plugins install claude-code # install hooksAll platforms
memovault plugins list # show status for all platforms
memovault plugins install claude-code
memovault plugins install cursor
memovault plugins install gemini
memovault plugins install codex
memovault plugins uninstall claude-code # remove hooksWhat each hook does
Hook | Trigger | Action |
| Before every prompt | Fetches recent session summaries + relevant memories, prepends as context |
| When the tool exits | Summarizes the session and stores it to LTM |
Platform details
Claude Code — writes hooks to ~/.claude/settings.json:
{
"hooks": {
"UserPromptSubmit": [{
"matcher": ".*",
"command": "memovault hook prompt-submit --api http://localhost:8080"
}],
"Stop": [{
"command": "memovault hook session-end --api http://localhost:8080"
}]
}
}Cursor — writes memovault.hooks config to Cursor's settings.json.
Gemini CLI / Codex CLI — adds a shell wrapper function to ~/.zshrc. Run source ~/.zshrc once after install to activate.
Auto-start the service on login
# Add to ~/.zshrc or ~/.bash_profile
memovault service start 2>/dev/nullService Management
memovault service start # start REST API in background
memovault service start --port 9090
memovault service status
memovault service stop
# Foreground (useful for debugging)
memovault api --host 127.0.0.1 --port 8080License
MIT
Available Tools
8 toolsadd_memoryA
Store new information in memory.
Use this to remember facts, preferences, events, or any important information the user wants to persist across sessions.
Args: content: The information to remember memory_type: Optional type (fact, preference, event, opinion, procedure, personal)
Returns: Confirmation message with the memory ID
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| memory_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it 'stores' (a write operation) and persists 'across sessions', but lacks details on permissions, rate limits, or error handling. It adds some context (persistence scope) but misses behavioral traits like idempotency or side effects.
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?
Front-loaded with purpose, followed by usage guidelines, args, and returns in a structured format. Every sentence adds value with no redundancy, efficiently covering key aspects in minimal text.
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?
Given 2 parameters, no annotations, and an output schema (returns confirmation with ID), the description is mostly complete. It covers purpose, usage, params, and returns, but lacks behavioral details like error cases or persistence guarantees, which are important for a write tool.
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 must compensate. It explains 'content' as 'information to remember' and 'memory_type' with optional values (fact, preference, etc.), adding meaning beyond the bare schema. However, it doesn't detail format constraints or examples for 'content'.
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 clearly states the verb 'store' and resource 'information in memory', specifying it's for persisting facts, preferences, events, etc. It distinguishes from siblings like 'clear_memories' (deletion) or 'get_memory' (retrieval) by focusing on creation/persistence.
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 provides clear context on when to use ('to remember facts, preferences, events... across sessions'), but doesn't explicitly state when not to use or name alternatives like 'update_memory' if such a tool existed. It implies usage for persistence needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat_with_memoryA
Chat with memory-enhanced responses.
Use this for questions where stored memories might provide context. The response will incorporate relevant memories automatically.
Args: query: User's question or message top_k: Number of memories to use as context (default: 5)
Returns: AI response enhanced with relevant memories
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 mentions that responses are 'enhanced with relevant memories automatically,' but lacks details on behavioral traits such as how memories are selected, whether this requires specific permissions, rate limits, or what happens if no memories are found. The description is minimal and doesn't adequately disclose operational behavior.
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 appropriately sized and front-loaded: it starts with the core purpose, followed by usage guidelines, then parameter explanations, and return value. Every sentence adds value without redundancy, making it efficient and well-structured.
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?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is somewhat complete but has gaps. It explains the purpose, usage, and parameters, but lacks behavioral details and doesn't fully leverage the output schema (which exists but isn't referenced). For a memory-enhanced chat tool, more context on how memories are integrated would be helpful.
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 description includes an 'Args' section that explains 'query' as the user's question and 'top_k' as the number of memories to use as context with a default. Since schema description coverage is 0%, this adds meaningful semantics beyond the bare schema, but it doesn't fully compensate for the coverage gap (e.g., no details on 'top_k' constraints or 'query' format).
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 clearly states the tool's purpose: 'Chat with memory-enhanced responses' and 'The response will incorporate relevant memories automatically.' It specifies the verb (chat) and resource (memory-enhanced responses), but doesn't explicitly distinguish it from sibling tools like 'search_memories' or 'get_memory' which might also retrieve memories.
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 provides clear context for when to use this tool: 'Use this for questions where stored memories might provide context.' However, it doesn't explicitly state when NOT to use it or name alternatives among the sibling tools (e.g., when to use 'search_memories' vs. this tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_memoriesA
Clear all stored memories.
Warning: This permanently deletes all memories!
Returns: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the destructive nature ('permanently deletes all memories'), which is critical for a mutation tool, and specifies the return value ('Confirmation message'). This covers safety, outcome, and response format adequately.
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 highly concise and well-structured: the first sentence states the purpose, the warning highlights critical behavior, and the return information is clearly separated. Every sentence adds essential value with zero waste, making it easy to parse and understand quickly.
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?
Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is complete. It explains the destructive action, warns of permanence, and notes the return type, which complements the output schema. No additional context is needed for this straightforward operation.
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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately omits parameter details, maintaining focus on the tool's action and effects. A baseline of 4 is applied as it efficiently handles the lack of parameters without unnecessary elaboration.
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 clearly states the specific action ('Clear') and resource ('all stored memories'), distinguishing it from sibling tools like delete_memory (which targets specific memories) and list_memories (which only reads). The verb+resource combination is precise and unambiguous.
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 implicitly provides usage guidance through the warning about permanent deletion, suggesting this tool should be used cautiously and only when complete memory clearance is needed. However, it does not explicitly compare to alternatives like delete_memory for partial removal or mention specific scenarios when this tool is preferred over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryC
Remove a specific memory.
Args: memory_id: The unique identifier of the memory to delete
Returns: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Remove' implies a destructive operation, it doesn't specify whether deletion is permanent, reversible, requires specific permissions, or has side effects. The confirmation message return is mentioned but not elaborated.
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 appropriately sized with a clear main statement followed by structured Args and Returns sections. Every sentence earns its place, though the 'Args' and 'Returns' labels could be integrated more naturally into flowing text.
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?
Given this is a destructive operation with no annotations, 0% schema coverage, but an output schema exists, the description is minimally adequate. It covers the basic purpose and parameter meaning but lacks important behavioral context about deletion consequences and usage guidelines relative to siblings.
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 must compensate. It adds the meaning of 'memory_id' as 'The unique identifier of the memory to delete', which provides essential context beyond the bare schema. However, it doesn't explain format, constraints, or where to obtain this identifier.
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 clearly states the action ('Remove') and target resource ('a specific memory'), making the purpose immediately understandable. However, it doesn't differentiate this from the sibling tool 'clear_memories' which likely removes multiple memories, so it doesn't reach the highest score.
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 provides no guidance on when to use this tool versus alternatives like 'clear_memories' (for bulk deletion) or other sibling tools. It simply states what the tool does without context about appropriate use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoryB
Retrieve a specific memory by ID.
Args: memory_id: The unique identifier of the memory
Returns: The memory content and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of behavioral disclosure. It states the tool retrieves a memory, implying a read-only operation, but doesn't cover critical aspects like authentication needs, rate limits, error handling (e.g., what happens if the ID doesn't exist), or performance characteristics. This is a significant gap for a tool with no annotation support.
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 well-structured and appropriately sized: it starts with a clear purpose statement, followed by separate 'Args' and 'Returns' sections. Each sentence earns its place by directly contributing to understanding. It could be slightly more concise by integrating the sections into a single paragraph, but the structure enhances readability without unnecessary verbosity.
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?
Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return value documentation), the description is reasonably complete. It covers the basic purpose and parameter semantics. However, it lacks behavioral details (e.g., error cases) and usage guidelines, which are minor gaps in an otherwise adequate context for a simple retrieval tool.
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 description adds minimal semantics beyond the input schema: it explains that 'memory_id' is 'The unique identifier of the memory,' which clarifies the parameter's purpose. However, with 0% schema description coverage, the schema only defines the parameter's type (string) and requirement, so the description compensates slightly but doesn't provide format details (e.g., UUID, length constraints) or examples. This meets the baseline for low coverage with some added value.
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 clearly states the tool's purpose: 'Retrieve a specific memory by ID.' This specifies the verb ('Retrieve'), resource ('memory'), and key constraint ('by ID'), making it easy to understand. However, it doesn't explicitly differentiate from siblings like 'list_memories' or 'search_memories' beyond the 'specific' qualifier, which is why it doesn't reach a 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'list_memories' for multiple memories or 'search_memories' for filtered searches, nor does it specify prerequisites or exclusions. The lack of usage context leaves the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memoriesC
Show recent memories.
Args: limit: Maximum number of memories to return (default: 10)
Returns: Dictionary with list of recent memories
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions returning recent memories with a limit, but doesn't cover critical aspects like whether this is a read-only operation (implied but not stated), pagination, sorting order, error conditions, or performance characteristics. It adds minimal context beyond the basic function.
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 appropriately sized and front-loaded with the core purpose in the first sentence. The Args and Returns sections are structured but slightly verbose; every sentence earns its place by adding value, such as the parameter explanation and return format.
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?
Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is minimally adequate. However, it lacks details on behavioral traits like recency definition or error handling, making it incomplete for optimal agent use without annotations.
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 description adds meaningful semantics for the single parameter 'limit,' explaining it as 'Maximum number of memories to return (default: 10).' This compensates for the 0% schema description coverage by clarifying the parameter's purpose and default value, though it doesn't detail constraints like minimum/maximum values.
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 the tool 'Show recent memories,' which is a clear verb+resource combination. However, it doesn't differentiate from siblings like 'get_memory' (singular) or 'search_memories' (filtered search), making the purpose somewhat vague in context. It's not tautological but lacks specificity about what 'recent' means or how this differs from other list-like tools.
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 is provided on when to use this tool versus alternatives. For example, it doesn't specify if this is for a quick overview versus detailed retrieval, or when to prefer 'search_memories' for filtered results. The description implies usage for recent items but offers no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statusB
Get the current status of the memory system.
Returns: Dictionary with status information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns a dictionary with status information, which is helpful, but doesn't cover critical aspects like whether this is a read-only operation (implied but not stated), potential performance impact, error conditions, or what specific status fields to expect. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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 appropriately concise with two sentences that directly address the tool's function and return value. It's front-loaded with the core purpose ('Get the current status...') followed by output information. While efficient, the second sentence could be slightly more integrated into the main description for better flow.
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?
Given the tool has 0 parameters, 100% schema coverage, and an output schema exists (which handles return value documentation), the description provides adequate basic information about what the tool does. However, for a status-checking tool in a memory system context, it could benefit from more context about what 'status' encompasses (e.g., memory usage, system health, configuration) to help the agent understand when this tool is truly needed versus other siblings.
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 tool has 0 parameters, and schema description coverage is 100% (since there are no parameters to describe). The description appropriately doesn't waste space discussing nonexistent parameters. A baseline of 4 is justified as the description efficiently focuses on the tool's purpose rather than parameter details that aren't needed.
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 clearly states the tool's purpose with a specific verb ('Get') and resource ('current status of the memory system'). It distinguishes this as a status-checking operation rather than data manipulation like its siblings (add_memory, delete_memory, etc.). However, it doesn't explicitly differentiate from other read-only siblings like get_memory or list_memories, which prevents a perfect score.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention when this status check is appropriate (e.g., for monitoring, debugging, or before other operations) or when to prefer other tools like get_memory for specific data retrieval. The lack of usage context leaves the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesB
Search for relevant memories.
Use this to find stored information related to a topic or question.
Args: query: What to search for top_k: Maximum number of results (default: 5)
Returns: Dictionary with matching memories
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of behavioral disclosure. It mentions that the tool 'searches' and 'returns' results, but doesn't specify aspects like whether it's read-only, how it handles errors, if there are rate limits, or what authentication is needed. This leaves significant gaps for a tool with no annotation coverage.
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 appropriately sized and front-loaded, with a clear purpose statement followed by usage guidance and parameter details. Each sentence adds value, but the structure could be slightly improved by integrating the 'Returns' section more seamlessly or avoiding redundancy with the output 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?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is reasonably complete. It covers purpose, usage, and parameters, and since an output schema exists, it doesn't need to explain return values in detail. However, it could benefit from more behavioral context or sibling tool differentiation.
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 description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'query' is 'What to search for' and 'top_k' is the 'Maximum number of results (default: 5),' providing clear context for both parameters. This compensates well for the low schema coverage, though it doesn't detail format constraints or advanced usage.
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 clearly states the tool's purpose as 'Search for relevant memories' and 'find stored information related to a topic or question,' which is a specific verb+resource combination. However, it doesn't explicitly distinguish this search function from sibling tools like 'list_memories' or 'get_memory,' which prevents a perfect score.
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 provides implied usage guidance with 'Use this to find stored information related to a topic or question,' which suggests when to use it. However, it lacks explicit guidance on when to choose this tool over alternatives like 'list_memories' or 'chat_with_memory,' and doesn't mention any exclusions or prerequisites.
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.
8 tool updates
v0.1.0- First observed
add_memory - First observed
chat_with_memory - First observed
clear_memories - First observed
delete_memory - First observed
get_memory - First observed
list_memories - First observed
memory_status - First observed
search_memories
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose with no overlap. For example, add_memory stores new information, get_memory retrieves a specific memory by ID, search_memories finds relevant memories by query, and chat_with_memory uses memories to enhance responses. The descriptions reinforce these distinct roles, making tool selection unambiguous.
All tool names follow a consistent verb_noun pattern with snake_case (e.g., add_memory, delete_memory, list_memories). The naming is predictable and readable throughout the set, with no deviations in style or convention.
With 8 tools, the count is well-scoped for a memory management server. It covers core operations like CRUD (add, get, delete, list), search, chat integration, status checks, and clearing, with each tool earning its place without feeling excessive or insufficient.
The tool set provides complete coverage for memory management, including CRUD operations (add_memory, get_memory, delete_memory, list_memories), search capabilities (search_memories), integration (chat_with_memory), system management (clear_memories, memory_status). There are no obvious gaps, and agents can handle full memory lifecycles without dead ends.
Maintenance
Related MCP Connectors
Memory system for AI agents with semantic search. Store and recall memories with ease.
- memoryOAuthcom.leapmemory
Long-term memory for AI assistants. Isolated per-user storage, recall across conversations.
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceThe Cursor10x Memory System creates a persistent memory layer for AI assistants (specifically Claude), enabling them to retain and recall short-term, long-term and episodic memory on autonomously.1811 npm80MIT
- AlicenseNot gradedqualityFmaintenanceA persistent memory server for Claude Code that captures session context and tool outputs to inject relevant history into future sessions. It enables long-term recall through semantic search and automatic context management, allowing for more consistent and context-aware coding interactions.10 npm253ISC
- AlicenseAqualityDmaintenanceA persistent semantic memory system for Claude Code that provides a structured, versioned document store with semantic search and graph visualization. It acts as a memoization layer to store and retrieve research, design decisions, and codebase insights across different work sessions.10Apache 2.0
- AlicenseAqualityCmaintenanceA full-featured long-term memory system for Claude Code that persistently stores and retrieves preferences, decisions, and project context across sessions using hybrid search and LLM-powered extraction.147 npmMIT