mcp-memory
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., "@mcp-memoryremember that the client prefers email updates every Monday"
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.
mcp-memory
A standalone MCP (Model Context Protocol) memory server with persistent storage, vector recall, and 3-way fuse retrieval.
Features
Memory CRUD — Write, read, search, update, and delete memories with categories and tags
Vector recall — Semantic similarity search using any OpenAI-compatible embedding API
BM25 search — Full-text keyword search with CJK bigram tokenization
3-way fuse retrieval — Combines BM25 + semantic vectors + tag graph via Reciprocal Rank Fusion (RRF) for the best results
Binary vector storage — Compact append-only format (~1/4 the size of JSON), with lazy compaction
Usage-based boosting — Frequently accessed memories rank slightly higher, with cold-start protection
Atomic writes — Write-to-temp-then-rename prevents data corruption on crashes
Related MCP server: MCP Server + Document Memory System
Quick Start
npm install
npm startOr configure it in your Claude Desktop / Claude Code MCP settings:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["/path/to/mcp-memory/src/index.js"],
"env": {
"MCP_MEMORY_DIR": "/path/to/your/data",
"EMBEDDING_API_URL": "https://api.openai.com/v1",
"EMBEDDING_API_KEY": "sk-...",
"EMBEDDING_MODEL": "text-embedding-3-small"
}
}
}
}Environment Variables
Variable | Description | Default |
| Directory for memory data files |
|
| OpenAI-compatible embedding API base URL | (none — semantic search disabled) |
| API key for the embedding service | (none) |
| Embedding model name | (none) |
| Minimum cosine similarity to return results |
|
Semantic search (recall with op:similar or op:fuse) requires an embedding API. Without it, you can still use keyword search and date-based recall.
MCP Tools
Memory CRUD
write_memory— Write a new memory with optional category and tags. After writing, surfaces related older memories.read_memories— Paginated reading (newest first), filterable by category or tag.search_memories— Exact substring keyword search.update_memory— Update content, tags, or category of an existing memory.delete_memory— Delete a memory by ID.get_stats— Memory count by category and vector index status.
Recall (Multi-mode Retrieval)
The recall tool supports four modes via the op parameter:
day— Fetch memories by date or date rangetimemachine— See what happened N days/months/years agosimilar— Semantic vector search (finds related memories even with different wording)fuse— ★ Best mode. 3-way fusion search combining:Lexical (BM25) — Exact term matching with TF-IDF weighting
Semantic (vector) — Cosine similarity via embedding vectors
Graph (tag) — Shared-tag neighborhood expansion
Results are merged using Reciprocal Rank Fusion (RRF), which combines rankings without needing to normalize scores across different methods.
How Fuse Search Works
Query: "that time we fixed the server crash"
BM25 (lexical) Vector (semantic) Tag Graph
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ #1 server log│ │ #1 prod outage│ │ #1 deploy note│
│ #2 crash fix │ │ #2 crash fix │ │ #2 server cfg │
│ #3 ... │ │ #3 ... │ │ #3 ... │
└──────┬───────┘ └──────┬────────┘ └──────┬────────┘
│ │ │ (×0.5)
└──────────────────────┴───────────────────────┘
│
RRF Fusion (k=60)
│
┌─────────────┴─────────────┐
│ #1 crash fix [lex#2·sem#2]│
│ #2 prod outage [sem#1] │
│ #3 server log [lex#1] │
└───────────────────────────┘Each result is annotated with which retrieval paths found it and their ranks, so you can judge confidence.
Data Storage
All data is stored as JSON files in the data directory:
memories.json— Memory entriesmem-vec-index.json— Vector index metadata (slot mappings)mem-vec.bin— Binary vector data (Float32, append-only)mem-hits.json— Access frequency tracking
License
MIT
Available Tools
7 toolsdelete_memoryC
Delete a memory by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID |
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 disclosing behavioral traits. It makes no statement about whether deletion is permanent, irreversible, whether it returns a success/failure indicator, what happens for non-existent IDs, or any side effects. For a destructive operation, this is a severe gap.
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?
Although the single sentence is short, this is under-specification rather than conciseness. The description omits critical behavioral context, making it more of a truncated placeholder. A concise definition should pack essential information into few words, not drop essential information entirely.
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 delete tool with no annotations and no output schema, the description is incomplete. An agent needs to know if deletion is irreversible, if there is a confirmation step, error handling for missing IDs, and what the return value is. None of this is provided, leaving the agent unable to predict consequences.
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% because the single 'id' parameter already has a description ('Memory ID'). The tool description's 'by ID' merely restates that same semantic without adding format, constraint, or contextual information beyond the schema. Per the rubric, baseline 3 applies since 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?
The description uses a specific verb ('Delete'), clearly names the resource ('memory'), and identifies the required identifier ('by ID'). This unambiguously distinguishes it from sibling operations like write_memory, read_memories, search_memories, and update_memory, even without reading their schemas.
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 use this tool versus alternatives, when not to use it, or any exclusions. It does not mention prerequisites like first searching for the memory ID, nor does it state that this is the only way to permanently remove a memory. The agent must infer usage solely from the name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsB
Get memory statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 disclosing behavior. It only says 'Get memory statistics', which implies a read operation, but does not state whether any authentication is required, whether results are cached, or what the output format is. This is minimal disclosure for a tool with no annotations.
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, concise sentence with no extraneous words. It is front-loaded with the verb and object, and it is appropriately sized for a tool with no parameters. Every word earns its place, and nothing could be removed without losing meaning.
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?
The description is incomplete for a tool with no output schema and no annotations. It does not specify what statistics are returned (e.g., count, size, last access times) or provide any context for when to use it. Given the tool's simplicity, it should at least mention the kind of statistics or offer a hint about its purpose relative to the memory system.
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 zero parameters, so the schema is empty and the baseline is 4. The description adds no parameter-specific information, which is acceptable since there are none to document. It does not need to compensate for schema gaps because there are no gaps.
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 clear action 'Get' and a specific resource 'memory statistics', which distinguishes it from sibling tools that write, read, search, update, delete, or recall memories. However, it does not elaborate on what the statistics encompass, so it is clear but not fully detailed.
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 use this tool versus alternatives. It does not mention that this is for overall memory metrics rather than individual memory content, nor does it suggest any specific scenario or prerequisite. The description leaves selection entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_memoriesA
Read memories with pagination (newest first). Use search_memories for keyword lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag | |
| page | No | Page number (default 1) | |
| limit | No | Items per page (default 8, max 20) | |
| category | No | Filter by category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description’s verb 'Read' makes the non-destructive nature clear, and it discloses pagination and newest-first ordering. It does not mention error handling or rate limits, but for a read operation these are minor gaps; the description adds meaningful behavioral context beyond the bare tool 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?
Two concise sentences with no waste. The primary purpose and ordering are stated first, followed by the routing alternative. Every word serves a purpose.
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 read tool with no output schema, the description is mostly complete. It states what is read and the ordering, but does not specify what the returned memory objects contain. Given the tool’s low complexity and clear purpose, this is a minor gap.
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 the parameters are already fully documented in the input schema. The description only adds the pagination context, which aligns with page and limit, but does not explain the filtering semantics of tag/category or how they combine. This meets the baseline for high schema coverage without adding much extra.
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 reads memories with pagination and newest-first ordering, and it explicitly distinguishes itself from search_memories by directing keyword lookups to that sibling. This gives an agent a precise understanding of what the tool does and how it differs from a close alternative.
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 a direct usage rule: use read_memories for general paginated reading, and use search_memories when keyword lookup is needed. This explicit routing makes it easy for an agent to choose between the two most similar tools without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Multi-mode memory retrieval. • day: Fetch memories by date (date or from+to, YYYY-MM-DD) • timemachine: See what happened N days/months/years ago today • similar: Semantic recall — find related memories even with different wording (requires embedding API) • fuse: ★ 3-way fusion (BM25 + semantic + tag graph → RRF). Best for finding specific things.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| to | No | ||
| date | No | ||
| from | No | ||
| text | No | ||
| limit | No | ||
| daysAgo | No | ||
| yearsAgo | No | ||
| monthsAgo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses a meaningful dependency ('requires embedding API') and explains the fusion mechanism (BM25 + semantic + tag graph → RRF), which adds context beyond the schema. However, it does not mention output shape, pagination, error behavior, or any side effects/read-only guarantees, leaving gaps for an agent to discover at runtime.
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 compact and scannable, front-loading the tool's purpose in one line and then using a tight bullet list for each mode. Every line adds useful information with no filler.
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?
This is a complex multi-mode tool with 9 parameters, no annotations, and no output schema. The description gives helpful mode summaries and key dependency warnings, but does not fully specify required parameters per mode (e.g., what 'similar' and 'fuse' require), limit behavior, or return value expectations. An agent can likely call it, but some trial and error is still needed.
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 does explain several parameter families (date/from/to, daysAgo/monthsAgo/yearsAgo, semantic similarity) in relation to modes. However, it does not describe 'limit', 'text' explicitly, or how parameters combine for the 'fuse' mode, so parameter semantics remain incomplete.
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 performs 'multi-mode memory retrieval' and enumerates four distinct retrieval modes with specific meanings. It identifies the resource (memories) and the operation (retrieve/fetch/find), making the purpose clear. It does not explicitly contrast itself with sibling tools like search_memories, so it stops short of full differentiation.
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 per-mode usage guidance: day uses date or from+to, timemachine uses relative time, similar requires an embedding API, and fuse is described as best for finding specific things. It provides a clear context for choosing among modes, though it does not address when to use recall versus sibling tools such as search_memories or read_memories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesA
Search memories by keyword (exact substring match). For semantic search, use recall with op:similar or op:fuse.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Search keyword | |
| category | No | Limit to category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and it makes a meaningful disclosure: searches are exact substring matches, which prevents the agent from assuming semantic or fuzzy behavior. It also signals that semantic variants belong to recall. It doesn't mention case sensitivity, ordering, or pagination, but those are secondary for a simple search 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?
Two short sentences with no filler. The primary matching behavior is front-loaded, and the alternative is given only after the core purpose is clear. Every phrase contributes to selection or invocation.
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 low-complexity tool with one required parameter, the description plus schema is sufficient to invoke it correctly and to avoid the main confusion with recall. It does omit the return shape and any result-limiting behavior, but those are not critical for basic use given the simple signature.
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 both parameters are already documented in the schema. The description adds value mainly by clarifying that `keyword` is matched as an exact substring, but it doesn't elaborate on `category` beyond the schema's 'Limit to category.' This meets the baseline without going beyond it.
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 and resource ('Search memories') and immediately qualifies the core behavior as an 'exact substring match.' This distinguishes it from the semantic recall sibling without requiring the agent to inspect either schema.
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 second sentence explicitly states when not to use this tool: 'For semantic search, use recall with op:similar or op:fuse.' This gives the agent a clear routing rule and names the exact alternative operations, leaving no ambiguity about which tool handles fuzzy/semantic queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memoryC
Update an existing memory by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID | |
| tags | No | New tags | |
| content | No | New content | |
| category | No | New category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It reveals that the operation is a mutation of an existing memory, but it does not explain whether omitted fields are left untouched or cleared, whether the memory must exist, what error behavior occurs, or what is returned.
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 filler. Every word contributes to identifying the action, target, and required identifier.
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?
The tool has multiple optional fields and sibling write operations, yet the description omits partial-update semantics, error behavior, and return value details. With no annotations and no output schema, this level of context is insufficient for an agent 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?
The schema already describes all four parameters (id, tags, content, category) with 100% coverage, so the baseline is 3. The description adds no additional semantic detail beyond the schema, which is acceptable but not additive.
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 action ('Update'), a resource ('an existing memory'), and the key selector ('by ID'). It is clear on its own, but it does not explicitly distinguish itself from the sibling tool write_memory, so the differentiation is only implicit.
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 given about when to use update_memory versus write_memory, read_memories, search_memories, or recall. The description implies this tool is for modifying an existing memory, but it does not state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_memoryB
Write a new memory. Choose a category that fits the content.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags for organization | |
| content | Yes | The memory content | |
| category | No | Category (default: general) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only states that it writes a memory, but does not mention side effects, return values, error behavior, or requirements. There is no indication of whether it overwrites existing memories or what happens on success, which is a significant gap for a write operation.
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, concise sentence that avoids verbosity. However, it is so brief that it sacrifices substantive content. It earns points for efficiency but could be structured better by front-loading critical behavioral information.
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 tool with three parameters and no output schema, the description lacks essential context: no mention of what the tool returns, no indication of when to use it vs. update_memory, and no behavioral details. Given no annotations, this is incomplete and leaves the agent guessing about the tool's full effect.
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 the schema already documents all parameters. The description adds a small hint about category selection ('Choose a category that fits the content') but does not introduce new semantics beyond the schema. It meets the baseline for a well-covered schema.
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 'Write a new memory' which clearly identifies the verb (write/create) and resource (memory). It is distinct from siblings like read_memories, update_memory, and delete_memory, leaving no ambiguity about what this tool does.
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 offers no guidance on when to use this tool versus alternatives. It does not mention that this is for creating new memories, while update_memory handles modifications, or that search_memories is for retrieval. The phrase 'Choose a category' is about parameter selection, not usage context.
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.
7 tool updates
v1.0.0- First observed
delete_memory - First observed
get_stats - First observed
read_memories - First observed
recall - First observed
search_memories - First observed
update_memory - First observed
write_memory
TDQS
Scored across 7 tools
The core CRUD tools (write/read/update/delete) are clearly distinct. However, search_memories and recall overlap in retrieval, though recall's modes (similar/fuse) are semantically distinct from exact substring matching, so boundaries are mostly clear.
All tool names follow a consistent verb_noun pattern in snake_case (write_memory, read_memories, search_memories, update_memory, delete_memory, get_stats). 'recall' is a single verb but fits the action-oriented style without breaking consistency.
Seven tools is well-scoped for a memory management server, covering all essential operations without redundancy or bloat. Each tool serves a clear purpose and earns its place.
The set provides full CRUD lifecycle (create, read, update, delete), plus dedicated search and statistical functions. The multi-mode recall covers advanced retrieval needs, leaving no obvious gaps in the memory domain.
Related MCP Connectors
- ContextaOAuthcc.contexta
Persistent memory and knowledge graph for AI assistants — keyword + vector + graph search.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Universal persistent memory and knowledge retrieval layer for AI agents and LLMs.
- AmberOAuthcom.ambermem
Long-term memory for AI assistants. Hybrid retrieval, query expansion, auto-topics.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.14-
- FlicenseNot gradedqualityDmaintenanceEnables AI systems to remember interactions, understand document context through semantic search, and intelligently route requests with persistent memory and quality-scored content synthesis.-
- FlicenseBqualityDmaintenanceEnables persistent memory for AI systems by providing tools for episodic, semantic, and procedural data storage through a vector-and-graph-enhanced database. It allows models to maintain long-term continuity using similarity search, thematic clustering, and identity tracking.241-

Memsolus MCP Serverofficial
AlicenseAqualityDmaintenanceProvides persistent long-term memory for AI agents through semantic search and automated knowledge graph extraction. It enables agents to store, recall, and reason over facts, preferences, and relationships across multiple conversations and sessions.1414 npmMIT