engram-mcp
engram-mcp provides persistent semantic memory for AI agents, storing and retrieving memories across sessions using SQLite and local Ollama embeddings (nomic-embed-text) — no API keys or cloud services required.
Store memories
remember: Save session memory entries with automatic embedding and graph extractionremember_user: Store user-scoped memories (facts, preferences) that persist across all sessions
Retrieve memories
recall: Semantic search across session memories (falls back to keyword search); can blend in cross-session user facts viauserIdrecall_user: Search or retrieve all user-scoped memories from any session contexthistory: Get recent conversation history for a session in chronological ordergraph: Query extracted entity relationships and source memories (requiresENGRAM_GRAPH=1)
Manage memories
forget: Delete session memories — all, by ID, or before a dateforget_user: Delete user-scoped memories by ID, date, or all at onceconsolidate: Compress old working session memories into dense long-term summaries via LLM, archiving originals (supports dry-run preview)consolidate_user: Consolidate user-scoped working memories into long-term summaries
Monitor memories
stats: Session memory counts broken down by role, tier (working/long_term/archived), and graph datauser_stats: Memory statistics for a specific user across all sessions
@cartisien/engram-mcp
Persistent semantic memory for AI agents — MCP server powered by @cartisien/engram
Give any MCP-compatible AI client (Claude Desktop, Cursor, Windsurf) persistent memory that survives across sessions.
npx -y @cartisien/engram-mcpWhat it does
Exposes 5 tools to any MCP client:
Tool | Description |
| Store a memory with automatic embedding |
| Semantic search across stored memories |
| Recent conversation history |
| Delete one memory, a session, or entries before a date |
| Memory statistics for a session |
Memories are stored in SQLite. Semantic search uses local Ollama embeddings (nomic-embed-text) — no API key, no cloud. Falls back to keyword search if Ollama isn't available.
Related MCP server: Mnemo Cortex
Quick Start
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"engram": {
"command": "npx",
"args": ["-y", "@cartisien/engram-mcp"],
"env": {
"ENGRAM_DB": "~/.engram/memory.db"
}
}
}
}Restart Claude Desktop. You'll see remember, recall, history, forget, and stats available as tools.
Cursor / Windsurf
Add to your MCP config:
{
"mcpServers": {
"engram": {
"command": "npx",
"args": ["-y", "@cartisien/engram-mcp"]
}
}
}Configuration
Env Var | Default | Description |
|
| SQLite database path |
|
| Ollama base URL for embeddings |
Local Embeddings (Recommended)
Install Ollama and pull the embedding model:
ollama pull nomic-embed-textSemantic search activates automatically. Without Ollama, keyword search is used.
Example Usage
Once connected, your agent can:
remember(sessionId="myagent", content="User prefers TypeScript over JavaScript", role="user")
recall(sessionId="myagent", query="what are the user's coding preferences?", limit=5)
# Returns: [{ content: "User prefers TypeScript...", similarity: 0.82 }, ...]
history(sessionId="myagent", limit=10)
stats(sessionId="myagent")
# { total: 42, byRole: { user: 20, assistant: 22 }, withEmbeddings: 42 }Part of the Cartisien Memory Suite
@cartisien/engram— core memory SDK@cartisien/engram-mcp— this package, MCP server@cartisien/extensa— vector infrastructure (coming soon)@cartisien/cogito— agent identity & lifecycle (coming soon)
MIT © Cartisien Interactive
Available Tools
17 toolsconsolidateB
Consolidate old working memories into dense long-term summaries via LLM. Archives originals.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| batch | No | Number of memories to consolidate (default 50) | |
| keep | No | Most recent N to leave untouched (default 20) | |
| dryRun | No | Preview summaries without writing (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It mentions 'via LLM' and 'Archives originals', but does not disclose whether originals are deleted or retained, what permissions are required, or any side effects like rate limits or data destruction.
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 extremely concise at two sentences, front-loading the core action and output. Every sentence adds value without redundancy.
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 no output schema and moderate complexity (4 params), the description explains the core transformation but lacks usage guidance, behavioral traits, and expected return values, making it only partially complete for an agent to use correctly.
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 itself documents all 4 parameters. The description adds no additional meaning beyond what the schema provides; it does not clarify the parameter semantics or relationships.
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 explicitly states the verb 'Consolidate', the resource 'old working memories', the output 'dense long-term summaries', and the method 'via LLM'. It also mentions 'Archives originals', clearly distinguishing it from siblings like 'consolidate_user'.
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 such as 'recall', 'forget', or 'daily_summary'. There is no mention of prerequisites, exclusions, or contextual triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consolidate_userB
Consolidate user-scoped working memories into long-term summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User identifier | |
| batch | No | Number of memories to consolidate (default 50) | |
| keep | No | Most recent N to leave untouched (default 20) | |
| dryRun | No | Preview without writing (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description indicates a write operation that transforms memories, but it does not clarify whether original memories are deleted or preserved, what permissions are needed, or the effect of the 'dryRun' parameter on actual execution.
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 with no waste. It could be slightly more informative without sacrificing conciseness.
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 covers the basic purpose but lacks details on behavioral implications, default actions, and outcomes. For a tool with no output schema and no annotations, more context would be beneficial.
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 100% description coverage, meaning the schema already explains all parameters adequately. The description adds no additional information beyond 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?
The description clearly states the action (consolidate) and resource (user-scoped working memories) and specifies the outcome (long-term summaries). It effectively distinguishes from sibling tools like 'consolidate' which may not be user-scoped.
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 such as 'forget_user' or 'recall'. There is no mention of prerequisites, exclusions, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_summaryA
Returns a summary of memories for a given date (YYYY-MM-DD), or today if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| date | No | ISO date string YYYY-MM-DD (optional, defaults to today) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It mentions 'returns a summary' but does not disclose any behavioral traits such as read-only nature, potential side effects, or what the summary includes. Minimal transparency.
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?
Single sentence of 15 words, front-loaded with purpose. No wasted information. Perfectly concise for the tool's simplicity.
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 (2 params, no output schema) and the range of sibling tools, the description covers the basic functionality. However, it lacks detail on what the summary contains (e.g., count, types) and doesn't differentiate from similar tools.
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% with descriptions for both parameters. Description adds no extra meaning beyond the schema (e.g., the date format and default are already in schema). Baseline 3 applies.
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?
Clearly states verb 'Returns', resource 'summary of memories', and specifies date handling (YYYY-MM-DD or today). Distinguishes from sibling tools like recall or history by focusing on a daily summary.
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?
Implies use for obtaining a daily memory summary, but lacks explicit guidance on when not to use it or mention of alternatives like recall_by_time. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_memoriesB
Export all session memories as markdown or JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| format | No | Export format (default "markdown") | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose behavioral traits like authorization needs, data permanence, or whether export modifies state.
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?
Single sentence, front-loaded with action and resource, no wasted words.
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?
Simple tool (2 params, no output schema). Description is adequate but lacks details on error handling or output structure.
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%, baseline 3. Description adds no extra meaning beyond schema (only lists formats).
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?
Clearly states action (export), resource (session memories), and output formats (markdown or JSON). Distinguishes from sibling tools like recall/remember.
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 vs alternatives (e.g., recall tools). Implies usage but lacks when-not-to-use or context about filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetA
Delete session memories. Delete all, one by ID, or entries before a date.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| id | No | Specific memory ID to delete (optional) | |
| before | No | ISO date — delete entries before this date (optional) |
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 indicates a destructive operation but lacks details on reversibility, authorization needs, rate limits, or side effects. The phrase 'Delete all' is alarmingly vague.
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 extremely concise, consisting of two sentences with no redundant words. It is front-loaded with the core action and immediately outlines the three deletion 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?
For a deletion tool with three optional modes, the description covers the main use cases. However, it omits return value (e.g., success/failure indication) and does not explain the required sessionId context. Given no output schema, more detail on results 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?
Schema coverage is 100% with each parameter described. The description adds semantic value by grouping modes (all, by ID, before date) that map to parameters, providing context beyond individual parameter descriptions.
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 'Delete session memories' and specifies three distinct modes: delete all, one by ID, or entries before a date. This distinguishes it from sibling tools like 'remember' (add) or 'recall' (retrieve).
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 implies usage for deletion but does not explicitly state when to use this tool versus alternatives like 'forget_user'. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_userB
Delete user-scoped memories.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User identifier | |
| id | No | Specific memory ID (optional) | |
| before | No | ISO date — delete entries before this date (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only says 'delete' without details on scope, reversibility, 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?
Single sentence, front-loaded. Could include more context but remains efficient.
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?
Missing details on return behavior, error handling, and optional parameter interactions. Minimal for a deletion 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 covers all parameters with descriptions; description adds no extra meaning. Baseline 3.
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 it deletes user-scoped memories, distinguishing it from siblings like 'forget' (likely global) and 'consolidate_user'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs alternatives; no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graphA
Query the knowledge graph for an entity — returns relationships and source memories. Requires ENGRAM_GRAPH=1.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| entity | Yes | Entity name to look up (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only says what it returns but does not disclose side effects, auth needs, or other behavioral traits. For a tool with no annotations, this is insufficient.
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, no wasted words. Front-loaded with verb 'Query' and resource 'knowledge graph'. Excellent conciseness.
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?
Simple tool with 2 required params and no output schema. Description explains purpose and a requirement flag, but lacks details on return format, error states, or pagination. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully describes the two parameters. Description adds no extra meaning beyond the schema, so baseline of 3 is appropriate.
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?
Description clearly states the tool queries a knowledge graph for an entity and returns relationships and source memories. This distinguishes it from sibling tools like recall and history.
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?
Description mentions requirement ENGRAM_GRAPH=1 but does not explicitly state when to use this tool versus siblings. Usage context is implied but not formal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
historyA
Get recent conversation history for a session in chronological order.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| limit | No | Max entries (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description alone must disclose behavior. It indicates a read operation but does not mention side effects, authentication needs, rate limits, or output format. The description is straightforward but minimally transparent.
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 sentence of 10 words, highly concise and front-loaded with the core action. No wasted verbiage; every word 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?
For a simple list retrieval tool with two parameters and no output schema, the description covers the basic purpose. However, it lacks details like pagination, ordering direction (ascending/descending), or whether it returns full messages, which would improve completeness.
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%, meaning the schema already documents both parameters. The description adds no extra meaning beyond 'session identifier' and 'max entries (default 20)', so it provides little additional 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 verb 'Get', the resource 'conversation history', and the scope 'for a session', and specifies the order as chronological. It effectively distinguishes from sibling tools like 'recall' or 'recall_recent', which are not session-specific.
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 implies use for session-based history retrieval but provides no explicit guidance on when to use this versus sibling tools (e.g., recall, recall_by_time). No exclusions or alternatives are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Retrieve relevant memories via semantic search (falls back to keyword). Searches working + long_term tiers. Pass userId to blend in cross-session user facts.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| query | Yes | Search query | |
| limit | No | Max results (default 10) | |
| userId | No | Optional: also blend in this user's cross-session memories | |
| tiers | No | Comma-separated tiers to search: working,long_term,archived (default: working,long_term) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides good behavioral context: semantic search with keyword fallback, default tiers (working+long_term), and the effect of userId. It doesn't disclose side effects or rate limits, but that is acceptable for a read 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?
Two concise sentences that front-load the core action and key details. Every sentence is meaningful, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and no output schema, the description covers the key behavioral aspects: search type, tiers, and user blending. It omits return format, but that is reasonable without an output schema.
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%, baseline 3. The description adds value by explaining the search mechanism and the purpose of userId beyond the schema. It compensates for the schema's minimal descriptions.
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 retrieves memories via semantic search with keyword fallback, specifying tiers and optional user blending. It distinguishes its general-purpose nature from sibling tools like recall_by_time or recall_recent, though it doesn't explicitly name them.
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 implies when to use (general memory retrieval with semantic search) and hints at optional userId for cross-session facts, but it lacks explicit guidance on when not to use or alternatives, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_by_timeA
Query memories using natural language time expressions like "yesterday", "last week", "this morning", "before 3pm".
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| expression | Yes | Natural language time expression like "yesterday", "last week", "before Monday" | |
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only mentions querying; it does not disclose whether it is read-only, side effects, or behavior on invalid expressions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action and concise, containing no redundant 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?
No output schema exists and the description does not explain return format, handling of limit, or role of sessionId, leaving gaps for a moderately complex tool with many 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 description adds value beyond the input schema by explaining the nature of the 'expression' parameter and giving examples, though schema already covers all parameters.
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 it queries memories using natural language time expressions, distinguishing it from siblings like recall, recall_recent, and recall_user.
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 implies use for time-based queries but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_recentA
Get the N most recent memories for a session — no query needed.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| limit | No | Number of recent memories to return (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states the basic retrieval without disclosing behavioral traits like idempotency, authentication needs, or error cases.
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?
Single sentence, 10 words, no filler, front-loaded with key 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 retrieval tool, it is mostly complete but lacks behavioral context; missing details about what constitutes a session and that it is read-only.
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 has 100% coverage, so baseline is 3; description does not add additional semantics beyond the schema definitions.
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?
Description clearly states the action (Get) and resource (recent memories) for a session, and distinguishes from siblings like recall and recall_by_time by emphasizing 'no query needed'.
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?
Implies usage for simple retrieval without queries, but does not explicitly compare to siblings or mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_userB
Recall user-scoped memories — works from any session context.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User identifier | |
| query | No | Search query (optional — returns all if omitted) | |
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the functional scope and session context, omitting read-only nature, side effects, permissions, or error behavior. This is insufficient for a read 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, efficient sentence covering the core purpose and context. It is front-loaded and contains no unnecessary words, though it could incorporate more detail without being verbose.
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 no output schema and no annotations, the description is too brief. It does not explain return format, pagination, or error handling, and lacks contrast with siblings like 'recall' or 'recall_recent' beyond the user-scoped hint.
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?
All parameters have descriptions in the schema (100% coverage), so baseline is 3. The description does not add meaning beyond the schema; it reinforces 'user-scoped' which aligns with userId but adds no extra semantic 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 verb 'recall' and resource 'user-scoped memories', distinguishing it from siblings like 'recall' and 'recall_by_time'. The phrase 'works from any session context' adds clarity about availability.
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 mention of 'user-scoped' and 'any session context' gives implied usage guidance but does not explicitly state when to use this tool versus alternatives like 'recall' or 'recall_recent'. No when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberB
Store a memory entry for a session. Embeddings and graph extraction happen automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier | |
| content | Yes | Memory content to store | |
| role | No | user | |
| metadata | No | Optional key-value metadata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must convey behavioral traits. It does disclose that embeddings and graph extraction happen automatically, which is useful. However, it omits other important traits such as whether the operation is idempotent, destructive, or requires specific permissions, which is a moderate 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?
The description is a single concise sentence that gets immediately to the point. It is front-loaded with the action and key detail about automation, without any fluff. It could benefit from a slight structural break, but overall it is well-sized.
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 four parameters, lack of annotations, and no output schema, the description is insufficient. It does not explain the return value, error cases, or behavior on duplicate content (overwrite vs. append). Critical context for a store operation is missing, making it 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 75% (three of four parameters have descriptions). The tool description does not add any additional meaning beyond the schema's descriptions, so it neither improves nor detracts from the baseline score of 3 for high 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 uses a specific verb 'Store' and identifies the resource as 'a memory entry for a session', making the primary action clear. It also distinguishes from siblings like 'remember_user' by specifying session-based storage, and adds extra context about automatic embeddings and graph extraction.
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 its many siblings (e.g., 'remember_user', 'recall', 'forget'). It does not state prerequisites, limitations, or alternative tools, leaving the agent without decision support for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remember_userA
Store a user-scoped memory that persists across all sessions. Use for preferences, identity, long-term facts.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User identifier | |
| content | Yes | Memory content to store | |
| role | No | user | |
| metadata | No | Optional key-value metadata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the memory persists across sessions, which is a key behavioral trait. However, with no annotations provided, it fails to mention whether writes are idempotent, permissions required, or any side effects (e.g., overwriting existing memories). For a write tool, more transparency would be beneficial.
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 extremely concise with two sentences, no redundancy, and the most important information ('store', 'user-scoped', 'persists across sessions') is front-loaded. Every word 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 the tool has 4 parameters (including a nested object) and no output schema, the description does not explain return values or error conditions. It covers purpose and persistence, but for a memory store tool, additional context on idempotency or update semantics would improve completeness.
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 already covers 75% of parameters with descriptions. The description adds the concept of persistence and usage context but does not enhance parameter meaning beyond the schema. The 'role' parameter lacks a description in the schema, and the description does not compensate for this 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 ('Store') and resource ('user-scoped memory'), and provides concrete use cases ('preferences, identity, long-term facts'). It clearly differentiates from sibling tools by emphasizing the user-scoped nature, which contrasts with a generic 'remember' tool.
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 indicates the tool is for storing user-specific persistent memories, implying it should be used over the non-user-scoped sibling 'remember' for user-scoped data. However, it does not explicitly mention when not to use it or specify alternatives for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsB
Memory statistics for a session — total, by role, by tier (working/long_term/archived), graph counts.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavioral traits. It only lists output categories but does not confirm the operation is read-only or non-destructive. For a stats tool, the lack of explicit safety information is a 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?
The description is a single sentence, front-loaded with the main purpose, and every word contributes meaning. No filler or redundancy.
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 lists output categories but omits any detail on return format, pagination, or behavior. While adequate for a simple tool, it lacks completeness given the lack of output schema and 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?
Schema coverage is 100% with a basic description for sessionId ('Session identifier'). The tool description adds no further context about the parameter, so the agent gains no extra understanding beyond 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?
The description explicitly states 'Memory statistics for a session' and lists specific breakdowns (total, by role, by tier, graph counts). It clearly distinguishes from sibling stats tools like temporal_stats and user_stats by focusing on a single session.
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 such as temporal_stats or recall. There are no when-to-use or when-not-to-use instructions, leaving the agent without decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
temporal_statsB
Returns temporal statistics about when memories were created — frequency over time, most active periods.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should disclose behavioral traits. It only states what the tool returns, but does not mention side effects (likely none), required permissions, rate limits, or any guarantees about ordering or accuracy. This is insufficient for full transparency.
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 with no wasted words. It conveys the core purpose without redundancy.
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 (one parameter, no output schema), the description is adequate but incomplete. It does not describe the format of the returned statistics (e.g., array, object) or provide examples, leaving the agent to infer. It also omits prerequisites or permissions. Scores 3 as a minimum viable description.
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 description coverage is 100% for the single parameter 'sessionId', so the schema already provides meaning. The description adds no additional context about the parameter, such as clarifying that sessionId represents a user or session for which to retrieve memory statistics. Baseline 3 is appropriate given full 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 clearly states the verb 'Returns' and the specific resource 'temporal statistics about when memories were created', including concrete examples like 'frequency over time, most active periods'. This distinguishes it from sibling tools like 'stats' (likely more general) and 'user_stats'.
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 does not mention when to use or avoid it, nor does it reference sibling tools like 'stats' or 'recall_by_time' that might offer similar functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_statsB
Memory statistics for a user — total, by role, by tier.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond the obvious read-only nature of 'statistics.' Since no annotations are provided, the description carries the burden, but it fails to mention permissions, rate limits, or side effects. The term 'statistics' implies no mutation, so this is minimally acceptable.
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 phrase with no unnecessary words. It is well-structured, though it could benefit from a bit more detail to improve completeness without losing conciseness.
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 complexity (1 parameter, no output schema, no annotations), the description is insufficient. It does not explain the structure of the returned statistics (e.g., format or fields) nor provide guidance on when to use this tool versus siblings. A more complete description is 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?
The input schema has 100% coverage with a description for userId. The tool description adds no additional meaning beyond what the schema provides. The baseline score of 3 is appropriate.
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 indicates it provides memory statistics for a user, broken down by total, role, and tier. However, it does not explicitly state the verb (e.g., 'get' or 'list'), and it lacks differentiation from the sibling 'stats' tool which might provide global statistics. Still, the purpose is reasonably 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?
No guidance is provided on when to use this tool versus alternatives like 'stats' (global stats) or other user-specific tools. There is no mention of context, prerequisites, or scenarios where this tool is preferred.
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.
5 tool updates
- Added
daily_summary - Added
export_memories - Added
recall_by_time - Added
recall_recent - Added
temporal_stats
12 tool updates
v0.2.0- First observed
consolidate - First observed
consolidate_user - First observed
forget - First observed
forget_user - First observed
graph - First observed
history - First observed
recall - First observed
recall_user - First observed
remember - First observed
remember_user - First observed
stats - First observed
user_stats
TDQS
Scored across 17 tools
Each tool has a clear, distinct purpose. Tools are separated by scope (session vs. user), operation (remember, recall, forget, consolidate, stats, export, graph, history), and retrieval method (semantic, time-based, recent). No overlapping functionality.
All tools follow a consistent verb_noun pattern (e.g., recall_user, forget, stats). Variations like recall_by_time, recall_recent use predictable suffixes. No mixing of naming conventions.
17 tools is appropriate for a memory management system. The number covers all necessary operations (CRUD, search, statistics, export, graph, user-scoped variants) without being excessive.
The tool set covers core memory operations: store, retrieve (multiple methods), delete, consolidate, export, and statistics. An explicit update tool is missing, but consolidation serves as an update mechanism. Minor gap, but overall comprehensive.
Maintenance
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Persistent memory for AI agents. Search, store, and recall across sessions.
Memory system for AI agents with semantic search. Store and recall memories with ease.
Related MCP Servers
- AlicenseAqualityAmaintenancePersistent AI memory with SQLite hybrid search (FTS5 + semantic), built-in Qwen3 embedding, and rclone sync across machines.1511Apache 2.0
- AlicenseNot gradedqualityAmaintenancePersistent semantic memory for AI agents — hybrid SQLite + FTS5 with DAG-based summaries, context compaction, and 7 MCP tools. Open source, self-hosted, zero API cost.154MIT
- AlicenseAqualityAmaintenancePersistent memory for AI agents with sectioned entries (project/user/context/etc), semantic search, CLI, and per-project scope. Local JSON, zero config, no server required.1273 PyPI4MIT
- AlicenseNot gradedqualityDmaintenancePersistent semantic memory for AI agents, enabling storage, semantic search, knowledge graph connections, and inter-instance messaging across conversations using local models via Ollama.47MIT