recall-mcp
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., "@recall-mcpremember that I prefer functional React components over class components"
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.
π§ Recall MCP β Long-term Memory for AI Agents
Your agent finally remembers what it did yesterday. Cross-session, persistent, semantic memory for any MCP-compatible agent (Claude Desktop, Cursor, Cline, Continue, β¦).
π― The Problem (worth 100,000+ GitHub stars)
Every time you start a new chat with Claude, Cursor, or any AI agent, it starts from zero. It doesn't remember:
The bug you fixed yesterday
The architecture decisions from last week
Your codebase conventions (tabs vs spaces, framework version, test runner)
Your preferences ("always use TypeScript", "never commit directly to main")
The project's gotchas ("the auth middleware is broken, bypass it for now")
This means:
π You repeat yourself β explain the same context every session
π Slower iteration β agent re-discovers what it already knew
π Worse quality β no accumulated knowledge
πΈ Wasted tokens β re-reading the same files, re-asking the same questions
Related MCP server: Central Intelligence
β¨ The Solution
Recall MCP gives your agent persistent, searchable memory across sessions.
# Yesterday, in chat session A:
agent.call("remember", content="User prefers tabs over spaces. Project uses Next.js 14 with App Router.")
agent.call("remember", content="Auth middleware has a known bug with session expiry; bypass for now.")
# Today, in chat session B (fresh context):
agent.call("recall", query="code style preferences")
# β [{"content": "User prefers tabs over spaces. Project uses Next.js 14 with App Router.",
# "score": 0.95, "tags": ["coding-style"], "project": "webapp", ...}]
agent.call("recall", query="known bugs auth")
# β [{"content": "Auth middleware has a known bug with session expiry; bypass for now.",
# "score": 0.87, ...}]Why it's better than context-pruning approaches
Approach | When it works | When it fails |
Context pruning (e.g. the other skill I shipped) | Compresses tool output within a session | Useless across sessions β the agent still forgets everything when you start a new chat |
Recall MCP (this project) | Works across sessions β yesterday's context is searchable today | Doesn't help if your conversation is one-shot |
They're complementary: use a pruner to fit more useful context in the current session, and use Recall so the next session doesn't have to start from scratch.
π Quick Start
1. Install
Option A β pip (PyPI, recommended):
pip install recall-mcp
# After install, the `recall-mcp` command is available:
recall-mcp # starts the MCP server on stdioOption B β uvx (no install, run directly):
uvx recall-mcpOption C β single-file (zero install):
curl -sSL https://github.com/eddyflores100-lang/recall-mcp/raw/main/mcp_recall.py \
-o ~/.local/bin/recall-mcp
chmod +x ~/.local/bin/recall-mcpNo pip install step, no virtualenv, no API keys β just Python 3.10+ with stdlib.
2. Configure with your agent
If you installed via pip/uvx: use
"command": "recall-mcp"with no args. If you used the single-file download: use"command": "python3"with"args": ["/path/to/mcp_recall.py"].
Claude Desktop β edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"recall": {
"command": "recall-mcp"
}
}
}Cursor β .cursor/mcp.json:
{
"mcpServers": {
"recall": {
"command": "recall-mcp"
}
}
}Cline / Continue / any MCP client β same pattern: set command to recall-mcp (post-install) or python3 with the script path (single-file mode).
3. Start using
Restart your agent and you'll see 8 new tools available. Try:
"Remember that I prefer functional React components over class components."
Then start a brand new chat:
"Recall what I told you about React conventions."
Your agent will pull the memory and continue where you left off.
π οΈ MCP Tools (8 total)
Tool | What it does |
| Store a memory with optional tags / project / importance (0..1). Auto-deduplicates by content hash. |
| Semantic-ish search via FTS5 BM25 + recency/importance/access-count boosting. |
| Delete a memory by |
| List with filters: |
| Pass a list of chat messages β automatically extracts memorable facts/preferences/decisions and stores them. |
| Total count, per-project, per-source, per-tag breakdown, oldest, newest, most-accessed, avg importance, DB size. |
| Dump memories as JSON (optionally per-project) β perfect for backups or transferring between machines. |
| Load JSON back in. |
Tool call examples
// remember
{
"content": "PostgreSQL connection string format: postgres://user:pass@host:5432/db",
"tags": ["database", "postgres"],
"project": "backend",
"importance": 0.8
}
// recall
{
"query": "how to connect to postgres",
"limit": 5,
"project": "backend",
"min_importance": 0.3
}
// summarize_session (great for end-of-session snapshots)
{
"messages": [
{"role": "user", "content": "I always use pnpm, never npm."},
{"role": "assistant", "content": "Noted. I'll use pnpm throughout."},
{"role": "user", "content": "We decided to deploy on Vercel."}
],
"project": "webapp"
}ποΈ Architecture
ββββββββββββββββ stdio (JSON-RPC) ββββββββββββββββββββ
β MCP client β ββββββββββββββββββββββββββΊ β mcp_recall.py β
β (Claude / β β β
β Cursor / β β ββββββββββββββ β
β Cline β¦) β β β MemoryStoreβ β
ββββββββββββββββ β β - rememberβ β
β β - recall β β
β β - forget β β
β β - stats β β
β β ... β β
β ββββββββ¬ββββββ β
β β β
β βΌ β
β ββββββββββββββ β
β β SQLite β β
β β + FTS5 β β
β β (local file)β β
β ββββββββββββββ β
ββββββββββββββββββββ
Default path:
~/.recall/memory.dbRanking formula (for recall results):
score = bm25_rank Γ 1.0
+ recency_decay Γ 0.5 (full weight 90d, then linear fade to 0.25)
+ importance Γ 0.5 (user-set 0..1)
+ min(access_count Γ 0.05, 0.5)This means: a memory that matches the query, was recently stored, marked as important, and accessed often will rank highest. A 6-month-old low-importance memory won't completely vanish, but it won't crowd out fresher results either.
π Privacy & Security
100% local β every byte lives in
~/.recall/memory.dbon your machine.Zero telemetry β no external API calls, no analytics, no phone-home.
Auto-redacts secrets before storage. Detected patterns include:
GitHub tokens (
ghp_β¦,gho_β¦,ghs_β¦, fine-grained)OpenAI keys (
sk-β¦), Anthropic keys (sk-ant-β¦), Gemini (AIzaβ¦)AWS access keys (
AKIAβ¦)JWTs (
eyJβ¦)Stripe keys, Slack tokens, Bearer tokens, private keys
password=β¦assignmentsConnection strings with embedded credentials (
postgres://user:pass@β¦)All replaced with
[REDACTED]before being written to disk.
Per-project isolation β memories from project A don't bleed into project B's
recallunless you ask for them.Export anytime β
export_memoriesgives you the full database as JSON. Your data is yours.
π Comparison
Feature | Recall MCP | mem0 | LangChain Memory | Zep |
Local-first (no cloud) | β | β | β | β |
Zero external dependencies | β | β | β | β |
MCP-native | β | β | β | β |
Cross-session | β | β | β (per-conversation) | β |
Auto-summarize sessions | β | β | β | β |
Smart decay (LRU + recency) | β | β | β | β |
Secret redaction built-in | β | β | β | β |
Export / import | β | partial | β | β |
Free (no paid plan) | β | $ | β | $ |
Setup time | 30 sec | 10 min | 5 min | 10 min |
βοΈ Configuration (env vars)
Var | Default | Description |
|
| Path to SQLite DB file |
|
| Max chars per memory (truncates with notice) |
|
| Days at full weight before decay starts |
|
| Hard cap on |
|
|
|
π§ͺ Testing
# Option A β full pytest suite (43 tests across 4 files)
git clone https://github.com/eddyflores100-lang/recall-mcp.git
cd recall-mcp
pip install -e ".[dev]"
python -m pytest tests/ -v
# Expected: 43 passed
# Option B β single-file smoke test (no pytest needed, 14 tests)
python test_recall.py
# Expected: === 14 passed, 0 failed ===CI: GitHub Actions runs the full suite on Python 3.10β3.13 across Ubuntu, macOS, and Windows on every push and PR.
The test suite covers:
Protocol (9 tests): initialize, ping, notifications/initialized, tools/list, invalid method, invalid tool, malformed JSON, resources/list, prompts/list
Memory CRUD (13 tests): remember, duplicate detection, empty/long content, importance clamping, recall with filters, forget by id/query, access count bumping
Secrets (11 tests): GitHub classic + fine-grained tokens, OpenAI, Anthropic, AWS, JWT, Stripe, connection strings, password assignments, private keys, on-disk verification
Session & Export (10 tests): summarize_session extraction + capping, get_stats, export/import round-trip, invalid input handling, list ordering, tag filters
πΊοΈ Roadmap
Optional vector embeddings (with
OPENAI_API_KEYor local sentence-transformers) for true semantic search beyond FTS5Multi-agent memory sharing (memory namespaces)
Web UI for browsing / searching / editing memories
Backup to S3 / Dropbox / gists
MCP resources endpoint (expose memories as browsable resources)
Auto-tagging (extract dates, URLs, file paths from content)
CLI tool (
recall search "query",recall add "text")Plugin SDK for custom extractors in
summarize_session
π€ Why I built this
I ship MCP servers for a living (see also: context-pruner-mcp). After using agents for months, the single biggest quality boost came not from better models or bigger context windows β it came from giving the agent a way to not forget. Context pruning squeezes more juice out of the current session; long-term memory means the next session starts ahead instead of from zero.
If this saves you 10 minutes of re-explaining per session, that's roughly 40 hours a year for a daily user. Open source it so everyone gets those hours back.
π License
MIT β see LICENSE.
β Star History
If this saved you time, please β the repo β it helps others discover it.
Author: Eddy Flores (eddyflores100-lang)
Issues / feature requests: GitHub Issues
Available Tools
8 toolsexport_memoriesA
Export all memories (or one project) as a JSON dict.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
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 does state the output type and the all-versus-one-project scoping, which is useful. However, it does not mention side effects, read-only nature, error behavior, or what happens when an invalid project is specified.
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 adds meaning: the action, the scope alternatives, and the output format are all present.
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 export tool with one optional parameter and no output schema, the description covers the main behavior and output format. It remains incomplete regarding return value details, error conditions, and any limitations (e.g., large exports), which an agent would benefit from knowing.
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%, so the description must clarify the 'project' parameter. It does: 'or one project' indicates that the parameter is optional and scopes the export to a single project. It does not explain what format the project value should take (name, id), but it adds meaning beyond the bare 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 clearly states a specific action ('Export') applied to a specific resource ('memories') and specifies the output format ('JSON dict'). It also clarifies the optional project scoping, distinguishing it from related tools like import_memories or list_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 gives no guidance on when to choose this tool over siblings such as recall, list_memories, or import_memories. There is no mention of use cases, prerequisites, or scenarios where export is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetA
Delete a memory by id or by content match (FTS query).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| query | No | FTS query; deletes all matches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It does disclose that the tool deletes and that a query deletes all matches (via schema description). However, it omits important traits like irreversibility, permission requirements, or potential side effects on related data. For a destructive operation, this is adequate but not rich.
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, focused sentence that leads with the core action. There is no redundant information, and it efficiently conveys the two invocation modes.
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 is simple (2 optional params, no output schema), but the description does not clarify interaction between id and query (e.g., exclusive or additive), nor does it mention return behavior. While not critical for a basic delete, the lack of such details leaves some ambiguity for an agent.
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% (query has a description, id does not). The description partially compensates by clarifying that id is an identifier and query is an FTS match, but it does not specify id format or FTS syntax. It adds meaning beyond the schema but not enough to fully bridge 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 description states a specific verb ('Delete'), a resource ('memory'), and two distinct methods (by id or by FTS content match). This clearly differentiates it from siblings like remember, recall, and list_memories, leaving no ambiguity about the tool's role.
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. While the destructive nature is implied by 'Delete', it does not explicitly state conditions like 'use when you want to permanently remove a memory' or warn against using it for reversible operations. Sibling tools exist for creation and retrieval, but no routing logic is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsB
Return aggregate stats: total, per-project, per-tag, oldest/newest, most-accessed.
| 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 behavioral transparency burden. The verb 'Return' weakly signals a read-only operation overshadowed by no param dependencies, but it does not disclose whether stats are scoped to all data, whether results are deterministic, or whether any side effects occur. Basic behavior is clear, but deeper transparency is limited.
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: the verb and resource appear first, followed by a compact list of concrete stats. Every word adds value and there is no filler or repetition.
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 no params and no output schema, so the description must clarify what the caller receives. It lists stat categories but not their exact structure, ordering, or labeling, leaving some ambiguity about the response shape and the overall scope of the stats.
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 is empty and parameter count is zero, so the schema coverage is vacuously 100%. Per the baseline for a zero-parameter tool, no additional parameter semantics are needed; the description's aggregate dimensions are not tied to any args.
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 clear verb and resource ('Return aggregate stats') and enumerates meaningful dimensions (total, per-project, per-tag, oldest/newest, most-accessed). It is distinguishable from sibling tools like list_memories, though it never explicitly names the memory domain, which is only implied by the sibling context.
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 choose get_stats over list_memories, summarize_session, or other siblings. The aggregation purpose is implicit, but there is no explicit scenario or exclusion to help an agent decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_memoriesA
Import memories from JSON. on_duplicate: skip | bump | replace.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Either a JSON object {version, memories:[...]} or a JSON string. | |
| on_duplicate | No | skip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden, and it does add the duplicate-handling behavior (skip/bump/replace), which is relevant context. It does not define what "bump" means, whether the import merges with existing memories or replaces the whole store, or what happens on invalid JSON.
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 verb, resource, and source format are front-loaded, and the on_duplicate line is compact. Every phrase earns its place.
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 only two parameters and a reasonable schema, this is close to adequate, but the lack of annotations and output schema makes the missing details more costly. An agent still doesn't know whether the import is additive or destructive, what counts as a duplicate, or what the tool returns.
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 the data parameter's shape, and the description only restates on_duplicate's allowed values without explaining their semantics, especially "bump." With 50% schema coverage, the description adds modest value but doesn't fully compensate for the missing parameter-level explanation.
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), resource (memories), and source format (JSON), and mentions the on_duplicate policy, which gives useful differentiation from related tools. It doesn't explicitly contrast with sibling tools like remember or export_memories, but the import-from-JSON framing makes the core purpose clear.
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 phrase "Import memories from JSON" implies this is the tool to use when you have memory data in JSON format to load, and the on_duplicate options give situational choices. However, there is no explicit statement of when to prefer this over remember or export_memories, nor any exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memoriesC
List memories with optional filters and ordering.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| order | No | recent | |
| project | 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, but it only restates that listing is possible. It does not mention read-only behavior, response format, filtering semantics, pagination, or ordering behavior beyond what the schema already shows.
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?
One tight sentence with the main action and capabilities front-loaded, and no filler. It is concise, though it could include more useful detail without becoming bloated.
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 four parameters, no output schema, no annotations, and no schema coverage, a one-sentence description is inadequate. An agent cannot determine how filters interact, what each ordering mode means, or how this tool relates to recall.
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, but it only vaguely mentions 'filters and ordering' without identifying tag or project filters or clarifying the order enum values. It adds little meaning beyond the property names in the 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?
States a specific verb ('list') and resource ('memories'), and signals optional filters and ordering. It is clear enough to be distinguished from siblings like remember and forget, though it does not explicitly contrast with 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?
No guidance on when to use list_memories versus alternatives like recall or get_stats. The description implies a batch read operation but provides no exclusions, use cases, or conditions for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Semantic search across all stored memories. Use this at the start of a session to recover context from prior sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags (any-match). | |
| limit | No | ||
| query | Yes | Natural language query. | |
| project | No | Restrict to a project. | |
| min_importance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries a higher disclosure burden. It conveys that recall is a non-mutating semantic search across all memories, which is useful. However, it does not describe the result format, ordering, or the approximate nature of semantic matching.
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 two sentences with no filler. The primary action and the suggested usage context are both front-loaded and every sentence earns its place.
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 main call path is clear for a search tool, but the lack of an output schema and any behavioral annotations means the agent must infer return shape and filtering semantics. It is adequate but not fully complete for confident invocation.
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 no parameter-level meaning. It does not clarify how query, tags, project, limit, or min_importance interact, and schema coverage is only 60%, leaving limit and min_importance without descriptive text. The description needed to compensate for this gap but did not.
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: 'Semantic search across all stored memories.' This clearly identifies the operation and differentiates it from sibling tools like remember or forget, though it does not name an alternative 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 description gives an actionable use case: 'Use this at the start of a session to recover context from prior sessions.' It provides clear context but does not explicitly state when not to use it or point to alternatives like list_memories or get_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberA
Store a long-term memory. Use this whenever the user states a preference, decision, fact, or piece of context worth recalling in future sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags for categorization. | |
| source | No | Who created the memory. Default: user. | |
| content | Yes | The memory text to store. | |
| project | No | Optional project name to scope this memory. | |
| importance | No | 0..1 importance score. Default: 0.5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does establish the key trait β durable, long-term persistence across sessions β which separates this from ephemeral context. However, it does not disclose side behaviors an agent would benefit from knowing before storing overlapping or repeated memories, such as deduplication policy, overwrite behavior for identical content, or any storage limits.
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 with zero filler. The core action is front-loaded ('Store a long-term memory') and the usage guidance follows immediately. Every word earns its place, giving the agent maximum signal per token.
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 store operation with a fully-documented 5-parameter schema and no output schema, the description plus schema gives an agent everything needed to call it correctly: what to store, when, and how to configure optional fields. The only gap is the absence of any note about what the operation returns or whether duplicates are handled, which is a minor omission given the simplicity of the 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 100%, so all five parameters (content, tags, source, project, importance) are already fully documented with defaults, ranges, and enums in the input schema. The description adds no param-level detail beyond the schema, but at full coverage the baseline 3 applies β 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 opens with a specific verb+resource pair ('Store a long-term memory') and immediately distinguishes this write operation from its sibling retrieval and management tools (recall, forget, list_memories) by stating the persistence goal β 'worth recalling in future sessions.' An agent can tell exactly what this tool does and what content belongs in it.
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 provides explicit triggering conditions β use it when the user states a preference, decision, fact, or piece of context worth recalling. This is clear, concrete context for when to invoke. However, it never names alternatives or states when not to use it (e.g., transient details that belong in session context rather than long-term memory), so it stops short of the explicit exclusions that would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_sessionA
Auto-extract memorable facts/preferences/decisions from a list of conversation messages and store them as memories.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| messages | Yes | List of {role, content} messages, or a JSON string. | |
| max_memories | No |
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 core mutation (storing memories) but does not mention side effects like duplication, overwriting, or the impact on existing memories. It also omits details about the max_memories limit and whether the operation is deterministic. The description is honest about the main action but lacks depth.
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, efficient sentence that front-loads the purpose with no unnecessary words. It is highly concise 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?
For a tool that extracts and stores memories from a message list, the description is too sparse. It does not explain the 'project' parameter, the 'max_memories' limit, or what the tool returns (e.g., whether it returns the created memories). An agent would need to inspect the schema further and make assumptions about side effects. The description is incomplete for reliable invocation.
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 33% (only 'messages' has a description). The tool description adds nothing about 'project' or 'max_memories', leaving the agent without any guidance on how to set these parameters or what they control. The description fails to compensate for the low schema coverage.
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 action ('extract'), a specific resource ('conversation messages'), and a clear outcome ('store them as memories'). This clearly differentiates it from sibling tools like remember (direct storage) and recall (retrieval), making the purpose 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 provides clear context: use this tool when you have a list of conversation messages and want to extract memories from them. However, it does not explicitly contrast with alternatives like remember or state when not to use it, though the context is clear enough for most agents.
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
v1.0.0- First observed
export_memories - First observed
forget - First observed
get_stats - First observed
import_memories - First observed
list_memories - First observed
recall - First observed
remember - First observed
summarize_session
TDQS
Scored across 8 tools
Each tool has a distinct purpose: remember stores, recall searches, forget deletes, list_memories enumerates, summarize_session derives memories from conversation, get_stats aggregates statistics, and export/import handle data transfer. No two tools overlap in their core function, making misselection unlikely.
Tool names follow a consistent imperative verb pattern: either bare verbs (remember, recall, forget) or verb_noun pairs (list_memories, summarize_session, get_stats, export_memories, import_memories). The convention is uniform and predictable, with no mixed casing or inconsistent verb styles.
Eight tools is a well-scoped set for a memory management server. Each tool addresses a core need (store, search, delete, list, auto-summarize, stats, export, import) without redundancy or bloat, fitting comfortably in the ideal 3β15 range.
The tool surface covers the full memory lifecycle: creating (remember, summarize_session, import_memories), reading (recall, list_memories, get_stats, export_memories), updating (import_memories with replace/bump), and deleting (forget). No critical operations are missing for managing persisted memories.
Maintenance
Related MCP Connectors
Persistent memory for AI agents. Search, store, and recall across sessions.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
- mem0OAuthio.github.mem0ai
Persistent memory for AI agents: add, search, update, and delete long-term memories.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides AI agents with persistent long-term memory capabilities using semantic search. Enables storing, retrieving, and searching memories through three core tools integrated with Mem0 and vector storage.MIT
- AlicenseAqualityDmaintenancePersistent memory for AI agents. Store, recall, and share knowledge across sessions with five MCP tools: remember, recall, context, forget, and share. Includes semantic search and agent/user/org scoping.53Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI agents to store and recall persistent long-term memories across sessions using LanceDB, with semantic search, automatic linking, conflict detection, and maintenance tools.713 npmMIT
- AlicenseNot gradedqualityAmaintenanceProvides persistent, shared memory for AI agents by capturing conversations verbatim, distilling facts and summaries, and enabling retrieval through search, timeline, details, and explicit remember tools.MIT