Thoth-Mem
Thoth-Mem is a persistent memory server for AI coding agents that stores durable knowledge across sessions using SQLite and FTS5. It provides the following capabilities:
Save memories (
mem_save): Persist observations (decisions, bug fixes, learnings), user prompts, session summaries, and passive learnings, with structured content and topic-key upserts for in-place updates.Recall memories (
mem_recall): Hybrid retrieval combining semantic vectors, full-text search (FTS), and knowledge graph enrichment. Supports HyDE expansion, filters by type/scope/project/time/session, and compact or context modes.Recent context (
mem_context): Retrieve recent sessions, prompts, and observations to restore continuity, with configurable limits and character budgets, plus optional fused recall evidence.Fetch specific records (
mem_get): Get an observation or prompt by ID, with pagination and optional surrounding timeline context.Project knowledge (
mem_project): List projects, view summaries, explore knowledge graph facts (ledger, neighborhood, lineage, community), inspect topic-key memories, and check operational health.Session management (
mem_session): Start sessions, create checkpoints, and write session summaries to maintain continuity.Integrations: Native support for OpenCode, Codex, and Claude Code, plus manual MCP connection for other tools (e.g., Gemini CLI).
Administration: CLI commands for setup, updates, graph community rebuilds, data sync, and access to a local dashboard and OpenAPI docs.
Embedding configuration: Customizable providers (LM Studio, Transformers.js), models, dimensions, devices (CPU, CUDA, etc.), and automatic profile detection.
Quality evaluation: Deterministic tests for retrieval accuracy, knowledge graph integrity, and embedding performance.
Data resilience: Local storage in SQLite and FTS5, preserving memory across sessions and resets, with configurable data directory.
Click on "Install 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., "@Thoth-Memrecall the auth pattern from last session"
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.
thoth-mem
Persistent memory your coding agents can share — and you can audit.
Local, SQLite-first memory for OpenCode, Codex, Claude Code, and Pi. Six focused MCP tools. Zero model calls required.
Overview • Install • How it works • Use • Tools • Benchmarks • Runtime • Development
91.9% | 6 | 4 | 0 |
LongMemEval-S RecallAny@5 | focused MCP tools | native harnesses | model calls required |
Why thoth-mem
Coding agents lose the decisions that matter between sessions: why an approach was chosen, which failure already occurred, what the next safe action is, and which evidence supports the current answer. Static instruction files help with rules, but they do not provide temporal history, scoped retrieval, or attributable provenance.
thoth-mem gives every supported harness one durable local memory without turning memory into an opaque second agent.
Design choice | What it gives you |
SQLite is the source of truth | One local, inspectable ledger with rebuildable FTS5 retrieval. |
Evidence before memory | Immutable supporting records remain separate from promoted conclusions. |
Temporal history | Corrections and supersession preserve how project knowledge changed. |
Progressive retrieval | Start compact, expand context only when useful, fetch full records last. |
Scoped identity | Projects and root sessions are explicit; memory does not guess ownership. |
A deliberately small API | Six workflow-level MCP tools instead of a sprawling CRUD surface. |
No embedding model, vector extension, graph engine, LLM, network service, HTTP server, or dashboard is required.
Related MCP server: LumenCore
Install
Requirements: Node.js >=22.12.0 and a supported harness. Pi setup has no version allowlist or upper version limit: it checks package-manager capabilities and verifies the installed extension and resources. New Pi releases do not require a version override. The reproducible SDK test baseline is @earendil-works/pi-coding-agent 0.84.4; passing setup is not certification of every runtime behavior on future releases.
thoth-mem installs memory tooling and lifecycle integration—not agents or subagents. Add --plan --json to any managed npx setup command to preview its changes without writing.
Harness | Native integration | Install |
Claude Code | Marketplace plugin, native hooks, six-tool MCP registration, and memory skill |
|
Codex CLI | Marketplace plugin, native hooks, six-tool MCP registration, and memory skill |
|
OpenCode | Native npm plugin, lifecycle adapter, six-tool MCP surface, and memory skill |
|
Pi | Native package extension, lifecycle adapter, and one package-relative six-tool MCP child |
|
Managed setup is global/user-native, idempotent when already current, and requests a host restart after a changed install. Project-scoped copied bundles, broad manager-cache edits, legacy fallback, and fragment migration are intentionally unsupported.
How it works
flowchart LR
subgraph Hosts[Native harnesses]
O[OpenCode]
C[Codex]
A[Claude Code]
P[Pi]
end
O & C & A & P --> H[Lifecycle adapters]
H --> S[MemoryService]
S --> L[(Immutable SQLite ledger)]
S --> F[(Rebuildable FTS5 index)]
L & F --> R[Bounded progressive context]
R --> O & C & A & PNative adapters map each harness into the same project and root-session contract.
Evidence is immutable; session events receive a database-ordered sequence.
Observations stay outside durable memory until a verified review accepts them and an explicit promotion materializes the proposed memory.
Recall combines project isolation, temporal truth, lexical ranking, and a strict character budget.
Every harness receives the same bounded context without introducing another model into the loop.
thoth-mem never silently promotes an observation into durable memory. Rejection is terminal, corrections append successors, and provenance remains available through stable IDs.
Use the memory
Retrieve progressively
mem_recall mode=compact
↓
mem_recall mode=context or mem_context
↓
mem_get only for selected stable IDsChoose tools by intent
Intent | Tool |
Save evidence or durable knowledge |
|
Find current or historical project memory |
|
Recover a bounded project or session briefing |
|
Expand one selected record and its lineage |
|
Inspect timelines, summaries, observations, or project state |
|
Record verified root lifecycle events and supported summaries |
|
The MCP server exposes exactly these six tools. OpenCode additionally exposes the read-only native thoth_mem_root_identity tool; it is session metadata, not a memory operation.
Use
mem_projectwithaction=timelinewhen you need to understand how promoted knowledge changed, rather than which memories best match a query.At
checkpoint_pre_compactorfinalize,mem_sessioncan validate and version an externally produced summary whose claims cite in-range evidence from the same project and root session. The core never generates that summary.Observation candidates remain outside memory and FTS until a verified root review accepts them and a separate explicit promotion materializes their exact proposed memory.
LongMemEval-S
The public results use the immutable cleaned LongMemEval-S corpus and its 470 eligible non-abstention questions. The runtime remains lexical and local: no embeddings, models, or evaluation-time network calls.
Lexical strategy | RecallAny@5 | Recall@5 | RecallAll@5 | NDCG@10 | MRR | Retrieval p95 | Role |
| 61/470 (13.0%) | 9.8% | 6.6% | 0.1045 | 0.1287 | 1.1471 ms | Archived control |
| 388/470 (82.6%) | 67.7% | 54.0% | 0.6965 | 0.7947 | 1.4437 ms | Bounded candidate |
| 446/470 (94.9%) | 87.9% | 78.7% | 0.8538 | 0.8717 | 3.9512 ms | Broad quality reference |
| 419/470 (89.1%) | 79.7% | 68.3% | 0.7700 | 0.8177 | 2.0552 ms | Archived E0 candidate |
| 432/470 (91.9%) | 84.8% | 75.5% | 0.8165 | 0.8538 | 9.3504 ms | Current default |
RecallAny@5: questions with at least one gold session in the first five results.
Recall@5: fractional coverage across all gold sessions.
RecallAll@5: questions whose every gold session appears in the first five.
NDCG@10 / MRR: ranking quality and first-gold position.
Retrieval p95: environment-sensitive; compare latency only within the same report.
The first four rows come from the immutable Top-5 lexical comparison. The current-default row comes from the passing stable optimization round, which preserved complete ordered output while reducing p95 by 28.3% from its stable baseline. Every listed run records zero errors and zero model, LLM, or evaluation-time network calls.
The dataset is pinned to revision 98d7416c24c778c2fee6e6f3006e7a073259d48f and SHA-256 d6f21ea9d60a0d56f34a05b609c79c88a451d2ae03597821ea3d5a9678c3a442. Evaluation runs offline through the real built MemoryService, with one isolated SQLite database per question. Gold IDs and oracle data never enter indexed text or ranking.
Protocol sources: LongMemEval repository, official cleaned dataset, and pinned dataset revision.
Runtime data and migration
All harnesses resolve one data directory in this order: an explicit command value, THOTH_MEM_DATA_DIR, strict provider configuration, then ~/.thoth-mem. The database is always memory.sqlite inside the selected directory.
The provider file lives below XDG_CONFIG_HOME/thoth-mem/config.json when XDG configuration is set, or below ~/.config/thoth-mem/config.json otherwise. Malformed, unreadable, schema-invalid, or missing-runtime configuration fails closed.
Opening a revision-9 database with the Pi-capable runtime performs the one-time revision-10 migration. It retains or creates memory.sqlite.pre-v10.bak, takes an immediate write-excluding lock, rechecks the live state against that backup, and rebuilds only the sessions harness constraint. Existing sessions, evidence, events, summaries, receipts, and FTS rows are preserved; a mismatched backup or source drift fails closed before mutation.
Stop every process that may hold the target database, then import the conventional ~/.thoth/thoth.db:
thoth-mem import-legacyFor a nonstandard source or explicit mapping:
thoth-mem import-legacy --source ./legacy.sqlite --map ./mapping.json --data-dir ./current-memory
thoth-mem import-legacy --jsonThe importer fingerprints its inputs, creates a verified backup and isolated candidate when needed, and publishes only after integrity checks pass. Keep the legacy database, verified backup, and recovery bundle until the migrated runtime has been independently validated.
Development
Clone, build, local host wiring, verification, benchmark reproduction, and repository layout live in the development guide.
Task-specific engineering, persistence, privacy, lifecycle, and testing guidance starts at the agent context index.
Available Tools
6 toolsmem_contextA
Get recent memory context from previous sessions. Shows recent sessions, user prompts, and observations to understand what was done before.
Use this at the start of a session to recover context, or when the user asks to recall past work.
Returns bounded Markdown with:
Recent sessions (last 5 with activity)
Recent user prompts (last 10)
Recent observations (configurable limit)
Memory stats (total counts)
Observation bodies are previewed by default; use mem_get(id=...) for full content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of observations to retrieve (default: 20) | |
| scope | No | Filter by scope | |
| project | No | Filter by project name | |
| max_chars | No | Output character budget; 0 disables the context cap | |
| session_id | No | Filter to a specific session | |
| recall_query | No | Optional query to append fused recall evidence without changing base context sections |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses output characteristics (bounded Markdown, previews by default, configurable limit) and points to mem_get for full content. It does not explicitly state read-only behavior, but the nature of context retrieval implies it; this is adequate but not exhaustive.
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 concise and well-structured, leading with purpose, then usage, then a bulleted list of return items. No redundant sentences; every sentence adds information. Front-loaded and scannable.
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 (read-only context retrieval with optional filters) and that all parameters are documented in the schema, the description covers purpose, usage, output structure, and a key behavioral nuance. It does not address error cases or detailed parameter interactions, but for a context tool this is sufficient. The lack of an output schema is mitigated by the explicit return list.
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% parameter coverage, so baseline is 3. The description adds value by explaining behavior tied to parameters: 'configurable limit' (limit), 'bounded Markdown' (max_chars), and previewing (related to observation bodies). This goes slightly beyond schema descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get recent memory context from previous sessions.' It specifies the resource (memory context) and the action (get), and enumerates what it returns (sessions, prompts, observations, stats), distinguishing it from siblings like mem_save and mem_get.
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?
Provides explicit when-to-use guidance: 'Use this at the start of a session to recover context, or when the user asks to recall past work.' Also names an alternative: 'use mem_get(id=...) for full content,' giving clear direction for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mem_getB
Fetch a saved observation or prompt by ID. Use include_timeline=true when the surrounding observation chronology matters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID to retrieve, interpreted according to kind | |
| kind | No | Memory kind to retrieve (defaults to observation) | |
| after | No | Timeline observations after the focus item (default: 5) | |
| before | No | Timeline observations before the focus item (default: 5) | |
| offset | No | Character offset for large content (default: 0) | |
| max_length | No | Max characters to return (default: 50000) | |
| include_timeline | No | Include surrounding observations in the same session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosing behavior. It only states the fetch action and one parameter hint.text It does not disclose that this is a read-only operation, any side effects, or what happens with edge cases like missing IDs. The description adds little beyond the schema itself, so transparency is low.
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, clearly front-loaded with the core purpose ('Fetch a saved observation or prompt by ID') and a single valuable hint about include_timeline. No fluff.
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 7 parameters and no output schema, the description is minimal but not deficient. The schema covers parameter details, and the timeline hint adds context. However, it does not describe the return format or overall behavior beyond 'fetch', so some gaps remain.
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 provides complete parameter descriptions (100% coverage), so the description adds little. The mention of include_timeline is a usage hint, not new semantics. Baseline 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 starts with a specific verb 'Fetch' and resource 'observation or prompt by ID,' clearly distinguishing it from other memory tools like mem_recall (search) or mem_context (context aggregation). It unambiguously states what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like mem_recall or mem_save. The only hint is 'Use include_timeline=true when the surrounding observation chronology matters,' which addresses parameter usage but not tool selection. This leaves the agent unclear on whether to prefer this over sibling tools for retrieval tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mem_projectB
Project-level memory navigation. Lists projects, summarizes one project, reads graph facts, or inspects topic-key memory.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum items to return | |
| action | Yes | Project view to return | |
| project | No | Project name. Required except action=list and optional for action=topics or health | |
| relation | No | Graph relation filter for action=graph | |
| max_chars | No | Response character budget; 0 is supported for action=summary only | |
| topic_key | No | Topic key for action=topic or graph filtering | |
| navigation | No | Graph navigation mode for action=graph; defaults to ledger | |
| continuation | No | Opaque continuation token returned by graph navigation views | |
| focus_node_id | No | Graph focus node id for navigation=neighborhood, currently obs:<id> | |
| observation_id | No | Observation id for lineage or superseded graph navigation | |
| include_superseded | No | Explicit history opt-in; honored by navigation=superseded only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'reads graph facts' and 'inspects topic-key memory', implying read-only behavior, but does not explicitly state that it does not modify data. It also does not disclose any side effects, permissions, or rate limits. The description is somewhat transparent about the read nature but lacks explicit behavioral details.
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 concise, one sentence, and front-loaded with the main purpose. It lists the key actions without unnecessary detail. It could be slightly more structured by separating the actions, but it is efficient and to the point.
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 11 parameters and no output schema, the description is somewhat minimal. It does not explain the return format or how the different actions affect the response. The schema covers parameter semantics, but the description does not provide guidance on how to use the tool effectively, such as which actions require which parameters or what the 'health' action does. For a complex tool with many parameters, 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 schema description coverage is 100%, meaning all parameters have descriptions in the schema. The tool description adds minimal value beyond the schema, only summarizing the actions. The schema already explains each parameter's purpose, so the description does not need to compensate. However, the description does not clarify the interplay between parameters (e.g., which combinations are valid), which could be helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Project-level memory navigation' and lists the specific actions it supports (lists projects, summarizes one project, reads graph facts, or inspects topic-key memory). This distinguishes it from sibling tools like mem_save and mem_recall, which are likely for saving and recalling memories. However, it could be more specific about the 'health' action, which is not mentioned in the description.
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 project-level memory navigation but does not explicitly state when to use this tool versus alternatives like mem_recall or mem_get. It does not provide exclusions or alternative tool names. The action enum provides some guidance on what each action does, but the description does not elaborate on when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mem_recallA
Primary retrieval tool. Runs fused hybrid recall across sentence vectors, chunk vectors, keyword FTS, and knowledge-graph enrichment.
| Name | Required | Description | Default |
|---|---|---|---|
| hyde | No | Request HyDE query expansion when configured | |
| mode | No | compact returns evidence lines; context includes retrieved text | |
| type | No | Optional observation type filter | |
| debug | No | Include retrieval defaults and semantic input sources | |
| limit | No | Maximum evidence items (default: 5) | |
| query | Yes | Recall/search query | |
| scope | No | Optional scope filter | |
| project | No | Optional project filter | |
| time_to | No | Optional inclusive created_at upper bound | |
| time_from | No | Optional inclusive created_at lower bound | |
| topic_key | No | Optional exact topic_key filter | |
| session_id | No | Optional session filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the hybrid recall method and mentions multiple vector and knowledge-graph sources, which is transparent. However, it lacks details on permissions, side effects, or return format.
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 waste. The first sentence immediately identifies the tool's purpose ('Primary retrieval tool'), and the second adds technical detail. Efficient and front-loaded.
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?
Despite 12 parameters and no output schema, the description does not explain the return format or how results are structured. This forces the agent to rely on inference or trial-and-error, reducing 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 coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond what is in the schema, such as explaining how parameters interact or providing default behaviors.
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 is the 'Primary retrieval tool' and explains it runs 'fused hybrid recall across sentence vectors, chunk vectors, keyword FTS, and knowledge-graph enrichment,' which defines its function and distinguishes it from siblings like mem_get or mem_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?
The description positions it as the primary retrieval tool, implying it should be used for general recalls. However, it does not explicitly state when not to use it or provide 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.
mem_saveA
Save memory. This single write tool handles observations, user prompts, session summaries, and passive learning capture.
For durable observations, use kind=observation and structured content: What: [concise description] Why: [reasoning or problem] Where: [files/paths affected] Learned: [gotchas, edge cases]
Use topic_key for evolving topics that should update in-place.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Write mode. Defaults to observation | |
| type | No | Observation category for kind=observation | |
| scope | No | Observation scope | |
| title | No | Short searchable title. Required for kind=observation | |
| content | Yes | Memory content, prompt text, session summary, or text containing a Key Learnings section | |
| project | No | Project name | |
| topic_key | No | Stable key for observation upserts | |
| session_id | No | Session ID (default: manual-save-{project}) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the upsert behavior for topic_key ('update in-place') and implies memory persistence. However, it doesn't mention potential side effects like overwriting existing memories, auth requirements, or rate limits. It's a write operation but doesn't explicitly state that it mutates state, though that's implied. 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?
Front-loaded with 'Save memory' and organized with a clear structure (bullet points for observation content, then topic_key guidance). Every sentence is informative and earns its place. Slightly longer than strictly necessary but efficient; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters, but no output schema (so no return value to explain). The description covers the main usage patterns (different kinds, structured observation template, topic_key upserting) and complements the schema. It doesn't explain every parameter (e.g., scope, type, title) but those are self-explanatory in the schema. For the complexity involved, it's sufficient and complete enough.
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% for parameters, so baseline is 3. The description adds value by explaining the structured content format (What/Why/Learned) for observations, clarifying the default for kind, and explaining topic_key's role in updates. This goes beyond the schema's basic descriptions of each parameter, particularly for content and topic_key.
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 'Save memory' and enumerates the four write modes (observation, prompt, session summary, passive learning), distinguishing it from sibling read tools like mem_recall, mem_get, and mem_context. It uses a specific verb (save) with a clear resource (memory) and outlines the different content types, making it 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?
Provides explicit guidance on when to use kind=observation with structured content and when to use topic_key for evolving topics. It implies that other kinds are for different contexts (prompts, session summaries, passive learning) but doesn't explicitly state when not to use the tool or contrast with read alternatives. Still, the context is clear enough for an agent to select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mem_sessionA
Manage the active memory session. Use action=start at session start and action=summary before ending.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Session ID. Required for action=start; defaults to manual-save-{project} for summary/checkpoint | |
| action | Yes | Session action | |
| content | No | Full session summary for action=summary | |
| project | Yes | Project name | |
| summary | No | Short checkpoint summary for action=checkpoint | |
| directory | No | Working directory for action=start |
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 for behavioral disclosure. It gives high-level instructions but does not communicate side effects, whether starting a session overwrites previous state, what summary/checkpoint persist, or any constraints on calling them. The phrase 'manage the active memory session' is too generic to expose meaningful behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no filler. It front-loads the core purpose and then gives direct actionable usage guidance.
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 only action=start and action=summary, completely ignoring the checkpoint action and without explaining session IDs, id fallback, or the relation to sibling tools. Given no annotations and no output schema, the agent is under-equipped to fully understand the session lifecycle.
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 provides 100% parameter coverage, so the baseline is 3. The description adds useful extra meaning by tying action=start and action=summary to session lifecycle moments, which is absent from the schema 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 identifies the resource as the active memory session and uses the verb 'manage', supported by specific action guidance ('start at session start', 'summary before ending'). It is reasonably distinct from sibling memory tools like mem_save and mem_recall, though 'manage' is slightly generic.
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 explicitly states when to call action=start and action=summary, giving clear lifecycle context. It does not explicitly mention when to avoid this tool or contrast it with sibling memory tools, but the provided usage timing is useful enough.
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. Dates show when Glama detected each change.
5 tool updates
v0.4.13- Added
mem_context - Added
mem_get - Added
mem_project - Added
mem_save - Added
mem_session
5 tool updates
v0.4.1- Removed
mem_context - Removed
mem_get - Removed
mem_project - Removed
mem_save - Removed
mem_session
6 tool updates
v0.3.7- First observed
mem_context - First observed
mem_get - First observed
mem_project - First observed
mem_recall - First observed
mem_save - First observed
mem_session
TDQS
Each tool has a clearly distinct role: mem_save writes, mem_recall searches semantically, mem_context provides recent session history, mem_get fetches by ID, mem_project handles project-level navigation, and mem_session manages session lifecycle. There is no notable overlap in purpose.
All tools share the 'mem_' prefix, but the pattern is inconsistent: some use verbs (save, recall, get) while others use nouns (context, project, session). This mix of verb/noun naming is readable but not as cleanly patterned as a consistent verb_noun convention.
With 6 tools, the server is well-scoped for a memory management system. Each tool covers a distinct aspect (write, recall, context, fetch, project, session), and the count is comfortably within the ideal range.
The tool surface covers the core memory lifecycle: save, recall, get by ID, session context, and project navigation. Minor gaps include the lack of an explicit delete operation, but the save tool's in-place topic updates partially mitigate this, and the domain is otherwise well-covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory for AI agents. Search, store, and recall across sessions.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides AI coding agents with persistent, long-term memory through local semantic search and SQLite storage. It enables agents to save and retrieve architectural decisions or project context across different conversation sessions without requiring cloud services.-
- AlicenseNot gradedqualityCmaintenanceProvides AI coding assistants with persistent project memory to retain architectural decisions, code patterns, and domain knowledge across sessions. It stores data locally in a SQLite database, allowing agents to remember, recall, and manage project-specific context using full-text search.13Apache 2.0
- AlicenseAqualityBmaintenanceProvides persistent cross-session memory and full-text search for AI coding assistants, storing project context, decisions, and preferences while enabling searchable access to conversation history via local SQLite.81MIT
- AlicenseNot gradedqualityCmaintenanceGives AI coding agents persistent memory by storing observations, decisions, and learnings in a local SQLite database with vector search, full-text search, and a rules engine.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EremesNG/thoth-mem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server