memory-mcp
memory-mcp
Локальный MCP-сервер для управления долговременной памятью агента. Память трактуется не как «сохранить и віддать», а как жизненный цикл: рождение, вспамоминание, пересмотр, оце, осасание.
Ключевая идея
Память агента бывает двух родов. Для пам-ти, у которой есть эта (ground truth), — например, индексы кода — достаточно синхрони-тации по хеышу. Но утвердаемая память без еталона (словая пользователя, решеня, урок) требет состояния, версий, до-верes and decision games. memory-mcp Обединяет их в Дво-ную структуру:
Первоисточник — читаеме tricky и ведомый через чел markdown-файл (
<store>/memories/*.мо, frontmatter-метаданые). Здесь живет сост tool жижного цикла, результат-supersede, и довери.Дривходнное — индек SQLite (FTS·ранжированье·реест конфликтов). Его в люб момент видел и в of sources via the com-
memory_reindex.
Проект разн на Analyте трё и source: (ктстр — Трсировка обоснований — docs/design/architecture.md §12):
Источник | Что вз anть |
раздел смело/ходн, statгate→хes→частичн-in,distrist, Чест от покрвт, изоляция store=кат and | |
экономия ток-lов only, извлеч + с..." ; приложение доверия в произходн-свя, final path (path containment) | |
Таblа сплать + буферн-slayer, сел-versioned superser,, ranking trust×state×heat | |
AX workspace memory lifeц strategy | Гей-{verdict:запрет rewrite, идемPotентн pair-hash, latest-вins сигнал, compaction before дистиллли, doch title dictionary |
Related MCP server: AI-MemoryHub MCP Server
Принцип работы
remember ──► active ◄─────────── 본문 수정 시 자동 복귀
│ supersede 되면 자동
▼
archived ──forget(deprecate, reason 필수)──► deprecated
│ │
└────────── forget(purge, confirm 필수) ──────┘
(파일 삭제 — git 이력이 백스톱)Гейз идемPotентн конфликтов:
memory_rememberвиdit соседн выходн, and в копле отв етa materials materials (общие сущность, разница wвn,latest_wins_eligible). The vicinal is the et с агенть-вызвателем (и пол-zovтем) — без решени нет автоперезаписи. To ignore it at events, a pair to record в pair-hash, and the palace.Оседaние: стареюius and usт-требов... as they " выцvested predators on the орech — `score хеalty × trust × state × (1 + fresh).** канлидата на журналит...
Wait — I — Need to fix.
Let me just be careful and type final.# memory-mcp
Локальный MCP-сервер для управления долговременной памятью агента. Память трактуется не как «сохранить и выдать», а как жизненный цикл: рождение, воспоминание, пересмотр, оценка и осадание.
Ключевая идея
Память агента бывает двух видов. Для памяти, у которой есть эталон (ground truth) — например, индексы кода — достаточно синхронизации по хешу. Но утверждаемая память, у которой нет эталона (слова пользователя, решения, уроки), требует состояния, версий, доверия и шлюза принятия решений. memory-mcp объединяет её в двухслойную структуру:
Первоисточник — человекочитаемые и управляемые через git markdown-файлы (
<store>/memories/*.md, метаданные frontmatter). Здесь живут состояние жизненного цикла, цепочка supersede и доверие.Производное — индекс SQLite (FTS·ранжирование·реестр конфликтов). Его можно в любой момент отбросить и полностью пересобрать одним вызовом
memory_reindex.
Дизайн выведен из трёх источников (трассировка обоснований — docs/design/architecture.md §12):
| Источник | Что было взято | | ----------------------------------------------------------------------------------------------------------- | | Практический анализ codebase-memory-mcp | Разделение первоисточник/производное, stat-gate→ hеш→ частичный переиндекс, честность покрытия, изоляция store=каталог | | Статья Codebase-Memory (arXiv:2603.27277) | Экономия токенов (возврат только пути+выдержки), включение доверия в производные связи, вложение путей (контенмент) | | Статья MemOS (arXiv:2507.03724) | Конечный автомат + буферный слой archived, неразрушающая supersede-версионная цепочка, ранжирование trust×state×heat | | AX workspace memory lifecycle policy | Шлюзы полномочий (запрет автоперезаписи), идемпотентность pair-hash, сигналы latest-wins, приоритет дистилляции при сжатии, словарь сущностей |
Принцип работы
remember ──► active ◄─────────── 본문 수정 시 자동 복귀
│ supersede 되면 자동
▼
archived ──forget(deprecate, reason 필수)──► deprecated
│ │
└────────── forget(purge, confirm 필수) ──────┘
(파일 삭제 — git 이력이 백스톱)Шлюз конфликтов: когда
memory_rememberзадевает соседние воспоминания, в ответ включаются материалы для решения (общие сущности, разница во времени,latest_wins_eligible). Решение остаётся за вызывающим агентом (и пользователем) — принятие решения не отменяет автоперезапись. Найденные пары записываются через pair-hash и больше не будут повторно пододвигаться.Выветривание: старые и неиспользуемые воспоминания не удаляются, а оседают в ранжировании —
score = {text} × Trust × state × (1 + freshness + heat). Когдаmemory_statusпредлагает старые эпизоды как кандидаты на дистилляцию (compaction), агент суммирует их в воспоминаниеknowledgeи помечает supersede для оригиналов.reconcile: демона нет. В точке входа каждого вызова инструментов — stat-gate (mtime+size) → sha256 → реиндексация только изменённого. Даже если файлы были поправлены вручную, на следующем вызове происходит схождение. Если тело archived-воспоминания изменить напрямую, оно автоматически возвращается в active (свежая воля приоритетнее).
Русский поиск: без эмбеддингов — word FTS (префикс поглощает словоизменения переносов) + trigram FTS (фразы) + LIKE-фолбек для строк ≤2 символов; всё это собирается планировщиком запроса. "보안을 끄는" ↔ "보안을 끄고" матчится.
Честность: recall/status всегда сообщают о свежести индекса, невосканных файлах и нерешённых конфликтах. Отсутств донесения ≠ полноотреб.
Инструменты (7)
Инструмент | Роль |
| Создание воспоминаний (+supersedes). Дубликаты идемпотентны, конфликты возвращаются материалом для решения |
| Гибридный поисск — только путь + выдержка + составные score (без подмены из-за) |
| Полный текст по id/путьи + цепочка supersede + история конфликт |
| edit / supersede / set_state / link / resolve_conflict |
| archive / deprecate (reason обязателен) / sure (confirm обязателен) — автоматических не нет |
| агрегация · нерешённые конфли kl · сроком · кандидаты· unparseable · fresh way |
| Полная реконструкция производного (восстановление после сжатия) / verify — полная передаvшю щebb аудит |
Установка
Node.js ≥ 22.5 (node:sqlite встроен — нет внешних натов зависимости).
pnpm install && pnpm buildRegistration для Claude Code:
claude mcp add memory-mcp -- node /path/to/memory-mcp/dist/main.jsили через .mcp.json:
{
"mcpServers": {
"memory-mcp": {
"type": "stdio",
"command": "node",
"args": ["/path/to/memory-mcp/dist/main.js"],
"env": { "MEMORY_MCP_ROOT": "/path/to/your/store" }
}
}
}По умолчанию store — в ~/.memory-mcp/default (заменой через env MEMORY_MCP_ROOT; не вход звαкт in at at store parameter). Если хранить manage in git — предел для purge становится git history.
Формат файла воспоминаний
---
id: 01JD2K3A9FZQ4W8XVBH5T6N7RM
type: fact | preference | decision | episode | reference | knowledge
state: active | archived | deprecated
trust: user-stated | agent-inferred | imported
entities: [ads-genisys, pacing]
source: "2026-08-24 세션, 사용자 교정"
created: 2026-08-24T14:03:00Z
updated: 2026-08-24T14:03:00Z
review_after: 2026-11-01
---
# 제목 한 줄
본문. 첫 문단이 recall 발췌로 쓰인다.<store>/dictionary.md — нормализует формы сущностей (- стандарта: описание в (aka: синони, сокращения или)).
Разработка
pnpm typecheck # tsc --noEmit
pnpm test # node --test (29 tests)
pnpm lint # biome
pnpm build # dist/Документы
Архитектура: docs/design/architecture.md — принципы·рефема автомата·ная таблица от источника присл →
Анализ/ pисходит: Практ-skodebase-memory-mcp · [Памят-Code-пам] (docs/analyze/codebase-memory-paper-analyze.md) · Памяти MemOS
License
MIT
Available Tools
7 toolsmemory_forgetForget (state transition, never silent deletion)A
archive: sink from default recall (recoverable). deprecate: judged wrong — requires a reason, preserved for opt-in reads. purge: delete the file — only from archived/deprecated and only with confirm=true; if the store is a git repo, history is the backstop.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| mode | No | archive | |
| store | No | Absolute path of the memory store directory. Omit for the default store. | |
| reason | No | deprecate: why this memory is wrong (required) | |
| confirm | No | purge: must be true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that archive is recoverable, deprecate preserves the memory for opt-in reads, and purge is the only irreversible deletion (subject to git history as a backstop). It also emphasizes 'never silent deletion,' setting expectations that all state changes are explicit. It does not cover error handling or idempotency, but the key behaviors are disclosed well.
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, dense sentence organized by mode with colons and semicolons. Each mode's effect and prerequisites are front-loaded, with no filler. The nuclear phrase 'never silent deletion' in the title signals non-obviousness, and every clause earns its place. It is concise yet fully informative, ideal for quick agent parsing.
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, an enum, and no output schema, the description covers the mode semantics, prerequisites, and recovery guarantees. It does not detail the return format (irrelevant without an output schema) or mention error conditions, but it fully equips an agent to invoke the tool correctly per the described behavior. Minor gaps like id format or store path patterns are not critical to judging correctness of the call.
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 60% (store, reason, and confirm have descriptions, id and mode do not descriptively). The description adds substantial meaning: it explains what each mode means and the conditional requirements (reason required for deprecate, confirm must be true for purge). This goes beyond the schema, which merely provides enum values and defaults. The id parameter's meaning is left implicit, but since it's the only required field and the tool's purpose centers on existing memories, the omission is minor.
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 title 'Forget (state transition, never silent deletion)' prefaces the tool as a state transition rather than a deletion, and the description enumerates three distinct modes (archive, deprecate, purge) with clear effects. This precisely distinguishes it from siblings like memory_update (which would modify content) and memory_recall (which reads), so an agent can immediately understand what this tool does and how it differs from other memory operations.
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 explicit usage scenarios for each mode: archive for recoverable removal from default recall, deprecate for judged-wrong memories with a required reason, and purge as the only true deletion, restricted to archived/deprecated states with confirm=true. It does not explicitly name sibling tools as alternatives, but the mode-specific guidance makes the when-to-use decision clear. Missing an explicit 'do not use for simple edits' pointer, but the context is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_readRead memoryB
Full content plus provenance: frontmatter, supersede chain in both directions, conflicts, usage.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Memory id (ULID) | |
| path | No | Path of a memory file inside the store (instead of id) | |
| store | No | Absolute path of the memory store directory. Omit for the default store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for disclosing behavior. It does specify what is returned (full content and provenance), which is useful. However, it does not state that the operation is non-destructive or read-only, nor does it note any permission requirements or error conditions. The description adds some behavioral context but omits explicit safety or side-effect disclosures.
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 succinct: one clause listing key provenance elements. It is front-loaded with 'Full content plus provenance' and avoids redundancy. Though terse, it conveys the essential information efficiently and earns a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with three optional parameters and no output schema, the description adequately explains the return value (full content and provenance details). It does not include usage guidance or alternatives, but that is covered under usage guidelines. The tool's functionality is sufficiently described for an agent to call it 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 descriptions cover all three parameters (id, path, store) with clear meanings, so baseline is 3. The description does not add parameter-specific semantics beyond what the schema already provides, so it remains at baseline.
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 'Full content plus provenance: frontmatter, supersede chain in both directions, conflicts, usage' clearly indicates the tool returns the full content and metadata of a memory, implying a read operation. It distinguishes from memory_recall by emphasizing provenance details, though it lacks an explicit verb like 'read' or 'retrieve'. This is more than a tautology and conveys the core function.
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 siblings like memory_recall or memory_status. The description does not state 'use this to read a specific memory by id/path' or mention alternatives for searching. The agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recallRecallA
Hybrid lexical search (word/trigram FTS + CJK-aware fallbacks). Returns paths, excerpts, and score components — read the file (or memory_read) for full content; nothing is auto-injected. Ranking: text * trust * state * (1 + freshness + heat); old unused memories sink, never vanish.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Free-text query; Korean particles/endings matched by prefix+trigram | |
| store | No | Absolute path of the memory store directory. Omit for the default store. | |
| types | No | ||
| entities | No | Filter/boost by entity keys (any-of) | |
| include_archived | No | ||
| include_deprecated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the ranking formula (text * trust * state * (1 + freshness + heat)) and notes that old unused memories sink but never vanish, revealing decay behavior. It also states 'nothing is auto-injected,' implying no side effects on memory content, which adds transparency about its read-only nature.
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 front-loaded, opening with the core search functionality before explaining the ranking details. The two sentences are dense but purposeful, though the ranking formula might be clearer if separated, and no unnecessary words are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description is insufficient for an agent to fully understand how to use all parameters. It explains the return type and ranking but omits details on filters like types, include_archived, and include_deprecated, and does not describe output fields or pagination. This is a notable gap for a complex search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, leaving limit, types, include_archived, and include_deprecated undocumented in the schema. The tool description does not clarify these parameters, nor does it explain how the ranking formula maps to specific inputs like entities or types. It adds some context about ranking but fails to compensate for the low 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 tool performs a hybrid lexical search (word/trigram FTS + CJK-aware fallbacks) and explicitly mentions it returns paths, excerpts, and score components. It differentiates itself from memory_read by noting that full content must be read via that tool, and from other siblings by focusing on search rather than writing or management.
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?
It provides clear guidance to use memory_read for full content, implying this tool returns only excerpts and paths, and that nothing is auto-injected. It does not explicitly mention when not to use it versus other siblings like memory_reindex or memory_status, but the contrast with memory_read is a useful usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_reindexReindexA
rebuild (default): drop all derivatives and reconstruct them from the memory files — originals own the content, so this is disaster recovery (only usage heat is lost). verify: full re-hash audit that ignores the stat gate and reports drift (files whose content no longer matches the index).
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Absolute path of the memory store directory. Omit for the default store. | |
| verify | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It explicitly reveals that rebuild drops all derivatives (destructive) and reconstructs from originals, clarifying that only usage heat is lost. Verify is disclosed as a non-destructive full re-hash audit that ignores the stat gate and reports drift—clear about side effects and 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 compact and front-loaded: it opens with the default mode, then succinctly explains the alternative. Each clause earns its place with no filler, and the structure (rebuild vs. verify) aids quick parsing.
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 2-param tool with no output schema, the description covers all essential aspects: both modes, their side effects, the source of truth (originals), and what verify reports. It is sufficient for an agent to call the tool correctly without additional external knowledge.
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 50% (store is described, verify is not), but the description compensates by explaining the verify mode and its behavior. It adds meaning to the verify boolean beyond the schema, while store's description is already provided. The description effectively fills the schema 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 clearly specifies two distinct operations (rebuild and verify) with specific resources (memory files, index/derivatives) and explicit outcomes. It distinguishes itself from siblings by focusing on reindexing and auditing rather than memory operations like remember/recall, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides contextual usage guidance (rebuild for disaster recovery, verify for drift detection) but does not explicitly state when to avoid or prefer other tools. The 'disaster recovery' phrase implies appropriate timing, yet no explicit exclusions or alternative tool mentions exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_rememberRememberA
Create a memory (markdown original + derived index). Returns possible_conflicts with judgment material (shared entities, age gap, latest_wins_eligible) — the caller judges: supersede, keep both, or correct itself. Nothing is ever overwritten automatically. Identical content is idempotent (returns the existing id).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | fact | |
| store | No | Absolute path of the memory store directory. Omit for the default store. | |
| trust | No | user-stated > agent-inferred > imported; user corrections outrank inference | agent-inferred |
| source | No | Provenance: where this came from (session, doc, url) | |
| content | Yes | Markdown body. First heading (or line) becomes the title. | |
| entities | No | Entity keys; normalized via dictionary.md when present | |
| supersedes | No | Ids this memory replaces; they get superseded_by and sink to archived | |
| review_after | No | ISO date to resurface this memory for review (not a delete TTL) |
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 of behavioral disclosure — and it excels. It reveals three critical behaviors: no automatic overwriting, a conflict-return contract requiring caller judgment, and idempotent behavior for identical content. These are exactly the traits an agent needs to know before calling.
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 that is informative and front-loaded with the core purpose, but it packs several concepts (conflict material, judgment options, idempotency, no-overwrite guarantee) into em-dash clauses. A structured list would improve scanability without lengthening content.
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 8 parameters, 88% schema coverage, and no output schema, the description compensates well by explaining the return value (possible_conflicts with judgment material) and the caller-decision workflow. It also covers idempotency and the no-overwrite guarantee, leaving an agent fully equipped to call it 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 coverage is 88%, so parameters like type, trust, source, and supersedes are already well-documented in the schema. The description adds the 'first heading becomes the title' nuance for content and implies the conflict semantics for supersedes/superseded_by, but doesn't systematically enrich each parameter. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (create), resource (memory as markdown original + derived index), and the distinctive mechanism (returns possible_conflicts for judgment). Among siblings like memory_read, memory_update, and memory_forget, the creation purpose is unmistakable without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clarifies that nothing is overwritten automatically and that the caller must judge conflicts (supersede, keep both, or correct). Idempotency for identical content is also stated. It doesn't explicitly say when not to use it vs siblings, but the creation role plus the judgment-caller contract provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statusStatusB
The honesty surface: counts by state/type/trust, pending conflict judgments, review-due memories, distillation (compaction) candidates, unparseable files, index freshness, dictionary state.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Absolute path of the memory store directory. Omit for the default store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It lists the contents of the status, which implies it is a read-only operation, but does not explicitly state side effects, performance implications, or whether it affects any state. It adds useful information about what the tool reports, but omits details like whether it reads from cached data or performs live aggregation.
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 but dense sentence, using a colon to separate the metaphor from the list. It is concise, but the metaphor 'honesty surface' is not immediately intuitive and could mislead. The list is long and runs together, making parsing slightly harder. Overall it is compact but not optimally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a status tool with no output schema, the description provides a useful enumeration of the kinds of information returned. However, it does not clarify the format of the output (e.g., JSON, text) or any specific caveats (e.g., whether counts are live or cached). Given the complexity of the underlying memory system, more detail on how to interpret the status 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 single optional parameter 'store' is fully described in the schema (100% coverage), so the description does not need to add anything. It correctly does not repeat schema information. The baseline of 3 is appropriate because the schema already documents the parameter adequately.
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 this is a status/overview tool by listing the specific categories of information it exposes (counts by state/type/trust, pending conflict judgments, etc.). The metaphor 'honesty surface' is unusual but the enumerated list makes the purpose evident. It is distinguishable from sibling tools like memory_update or memory_forget, which are clearly mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of typical use cases (e.g., checking system health, troubleshooting) or when not to use it. The description simply states what it shows, leaving the agent to infer usage from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_updateUpdate memoryA
edit: revise wording/metadata in place (state preserved — meaning-changing revisions should use supersede instead). supersede: id wins over other_id (non-destructive version chain). set_state: explicit lifecycle transition. link: relate two memories. resolve_conflict: record a keep-both judgment for a surfaced pair.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Subject memory id | |
| type | No | edit: change type | |
| state | No | set_state: target state | |
| store | No | Absolute path of the memory store directory. Omit for the default store. | |
| action | Yes | ||
| reason | No | set_state->deprecated: why it is wrong (required) | |
| source | No | edit: replace provenance | |
| content | No | edit: new markdown body | |
| entities | No | edit: replace entity list | |
| other_id | No | supersede/link/resolve_conflict: the other memory | |
| link_kind | No | link: relation kind | relates |
| review_after | No | edit: change review date ('' clears) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal key traits: edit preserves state, supersede creates a non-destructive version chain with id winning over other_id, and resolve_conflict records a keep-both judgment. However, it omits any mention of side effects (e.g., whether old versions are hidden, permissions required), return formats, or error behaviors, leaving significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, using a compact list format to convey each action's semantics. It front-loads the key actions and their distinctions. However, it lacks a leading sentence summarizing the tool's overall purpose (e.g., 'Updates an existing memory using one of several actions'), which would improve readability. It is efficient but slightly abrupt.
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 complexity (12 parameters, 5 actions, no output schema), the description covers the action semantics well but does not describe the expected return value, error handling, or any prerequisites (e.g., store context, id existence). It also doesn't explain the overall update workflow or interaction with sibling tools. For a tool with this scope, more context is needed to call it correctly in varied scenarios.
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 92%, so the schema documents most parameters. The description adds value by clarifying the meaning of the 'action' parameter and how it relates to other parameters (e.g., 'supersede: id wins over other_id' explains the other_id parameter; 'edit: revise wording/metadata in place' explains content and source). This goes beyond the bare schema enumeration and helps an agent understand parameter usage in context.
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 specifies that this tool updates memories through five distinct actions (edit, supersede, set_state, link, resolve_conflict), each with a concise semantic definition. It explicitly differentiates edit (preserves state) from supersede (non-destructive version chain), which prevents ambiguity in intent. The purpose is unambiguous and tied to the tool's name and title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers internal guidance (e.g., 'meaning-changing revisions should use supersede instead') but does not state when to use this tool versus its siblings (memory_remember, memory_forget, etc.). It implies it is for modifying existing memories, but the boundary with creation and deletion tools is not explicit. An agent must infer that creating a new memory belongs to memory_remember and that this tool is for updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
memory_forget - First observed
memory_read - First observed
memory_recall - First observed
memory_reindex - First observed
memory_remember - First observed
memory_status - First observed
memory_update
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: reindex for maintenance, remember for creation, recall for search, read for retrieval, update for modifications, forget for deletion/lifecycle changes, and status for system overview. No two tools overlap in function; even update's multiple sub-actions are clearly delineated within a single tool.
All tools follow a consistent 'memory_' prefix with a descriptive verb (remember, recall, read, update, forget, status, reindex). The naming pattern is uniform and predictable, making it easy to infer tool behavior from names alone.
Seven tools is an ideal scope for a memory management server. It covers all core CRUD operations, search, maintenance, and status reporting without redundancy or bloat. Each tool occupies a necessary role in the lifecycle.
The tool set covers the full memory lifecycle: create (remember), retrieve (recall/read), update (update with edit/supersede/state changes), delete (forget with archive/deprecate/purge), plus maintenance (reindex) and oversight (status). Conflict resolution and linking are also supported, leaving no obvious gaps.
Maintenance
Related MCP Connectors
- mem0OAuthio.github.mem0ai
Persistent memory for AI agents: add, search, update, and delete long-term memories.
Hosted agent memory with provenance, contradiction surfacing, and snapshot rollback.
- sepiaceOAuthio.sepiace
Long-term memory for AI agents. Pass one sentence, and it remembers, recalls, or forgets.
Persistent memory for AI agents, for code, research and everyday life. Stale facts retire.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.1MIT
- AlicenseAqualityBmaintenanceProvides a hybrid memory architecture with a thin SQLite index and Markdown cold storage, enabling AI agents to write, query, link, and rebuild long-term memories via MCP tools, model-agnostic and zero third-party dependencies.74MIT
- AlicenseAqualityAmaintenanceProvides AI agents with persistent, long-term memory via OKF-formatted markdown and SQLite indexing, enabling stateful storage, retrieval, and search across sessions.6220MIT
- AlicenseAqualityBmaintenanceEnables AI agents to maintain a persistent, queryable memory stored as user-owned Markdown files, with dual-channel retrieval (FTS5 and optional semantic search) and an audited write pipeline.11MIT