Skip to main content
Glama

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.

npm version CI status Node.js 22.12 or newer MIT license

OverviewInstallHow it worksUseToolsBenchmarksRuntimeDevelopment


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.

NOTE

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

claude plugin marketplace add https://github.com/EremesNG/thoth-plugins.git --scope userclaude plugin install thoth-mem@thoth-plugins --scope userManaged: npx --yes thoth-mem@latest setup claude

Codex CLI

Marketplace plugin, native hooks, six-tool MCP registration, and memory skill

codex plugin marketplace add https://github.com/EremesNG/thoth-plugins.gitcodex plugin add thoth-mem@thoth-pluginsManaged: npx --yes thoth-mem@latest setup codex

OpenCode

Native npm plugin, lifecycle adapter, six-tool MCP surface, and memory skill

npx --yes thoth-mem@latest setup opencode

Pi

Native package extension, lifecycle adapter, and one package-relative six-tool MCP child

npx --yes thoth-mem@latest setup pi

IMPORTANT

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 & P
  1. Native adapters map each harness into the same project and root-session contract.

  2. Evidence is immutable; session events receive a database-ordered sequence.

  3. Observations stay outside durable memory until a verified review accepts them and an explicit promotion materializes the proposed memory.

  4. Recall combines project isolation, temporal truth, lexical ranking, and a strict character budget.

  5. Every harness receives the same bounded context without introducing another model into the loop.

IMPORTANT

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 IDs

Choose tools by intent

Intent

Tool

Save evidence or durable knowledge

mem_save

Find current or historical project memory

mem_recall

Recover a bounded project or session briefing

mem_context

Expand one selected record and its lineage

mem_get

Inspect timelines, summaries, observations, or project state

mem_project

Record verified root lifecycle events and supported summaries

mem_session

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_project with action=timeline when you need to understand how promoted knowledge changed, rather than which memories best match a query.

  • At checkpoint_pre_compact or finalize, mem_session can 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

all-prefix-v1

61/470 (13.0%)

9.8%

6.6%

0.1045

0.1287

1.1471 ms

Archived control

any-prefix-v1

388/470 (82.6%)

67.7%

54.0%

0.6965

0.7947

1.4437 ms

Bounded candidate

all-then-any-prefix-v1

446/470 (94.9%)

87.9%

78.7%

0.8538

0.8717

3.9512 ms

Broad quality reference

strict-selected-any-cap5-rrf-v1

419/470 (89.1%)

79.7%

68.3%

0.7700

0.8177

2.0552 ms

Archived E0 candidate

strict-selected-any-cap5-stable-v1

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-legacy

For a nonstandard source or explicit mapping:

thoth-mem import-legacy --source ./legacy.sqlite --map ./mapping.json --data-dir ./current-memory
thoth-mem import-legacy --json

The 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 tools
mem_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of observations to retrieve (default: 20)
scopeNoFilter by scope
projectNoFilter by project name
max_charsNoOutput character budget; 0 disables the context cap
session_idNoFilter to a specific session
recall_queryNoOptional query to append fused recall evidence without changing base context sections

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID to retrieve, interpreted according to kind
kindNoMemory kind to retrieve (defaults to observation)
afterNoTimeline observations after the focus item (default: 5)
beforeNoTimeline observations before the focus item (default: 5)
offsetNoCharacter offset for large content (default: 0)
max_lengthNoMax characters to return (default: 50000)
include_timelineNoInclude surrounding observations in the same session

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum items to return
actionYesProject view to return
projectNoProject name. Required except action=list and optional for action=topics or health
relationNoGraph relation filter for action=graph
max_charsNoResponse character budget; 0 is supported for action=summary only
topic_keyNoTopic key for action=topic or graph filtering
navigationNoGraph navigation mode for action=graph; defaults to ledger
continuationNoOpaque continuation token returned by graph navigation views
focus_node_idNoGraph focus node id for navigation=neighborhood, currently obs:<id>
observation_idNoObservation id for lineage or superseded graph navigation
include_supersededNoExplicit history opt-in; honored by navigation=superseded only

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hydeNoRequest HyDE query expansion when configured
modeNocompact returns evidence lines; context includes retrieved text
typeNoOptional observation type filter
debugNoInclude retrieval defaults and semantic input sources
limitNoMaximum evidence items (default: 5)
queryYesRecall/search query
scopeNoOptional scope filter
projectNoOptional project filter
time_toNoOptional inclusive created_at upper bound
time_fromNoOptional inclusive created_at lower bound
topic_keyNoOptional exact topic_key filter
session_idNoOptional session filter

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWrite mode. Defaults to observation
typeNoObservation category for kind=observation
scopeNoObservation scope
titleNoShort searchable title. Required for kind=observation
contentYesMemory content, prompt text, session summary, or text containing a Key Learnings section
projectNoProject name
topic_keyNoStable key for observation upserts
session_idNoSession ID (default: manual-save-{project})

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSession ID. Required for action=start; defaults to manual-save-{project} for summary/checkpoint
actionYesSession action
contentNoFull session summary for action=summary
projectYesProject name
summaryNoShort checkpoint summary for action=checkpoint
directoryNoWorking directory for action=start

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.4.13
    • Addedmem_context
    • Addedmem_get
    • Addedmem_project
    • Addedmem_save
    • Addedmem_session
  2. 5 tool updatesv0.4.1
    • Removedmem_context
    • Removedmem_get
    • Removedmem_project
    • Removedmem_save
    • Removedmem_session
  3. 6 tool updatesv0.3.7
    • First observedmem_context
    • First observedmem_get
    • First observedmem_project
    • First observedmem_recall
    • First observedmem_save
    • First observedmem_session

TDQS

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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.
    13
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Provides 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.
    8
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives 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.
    4
    MIT

Latest Blog Posts

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