memorygraph
MemoryGraph
Tu agente encontró una memoria relevante. MemoryGraph le dice si esa memoria sigue siendo verdadera.
MemoryGraph es una capa de evidencia y revisión local-first para las creencias de los agentes de IA. Preserva las observaciones de origen, representa las afirmaciones como un grafo temporal y explica por qué una afirmación es actual, histórica o controvertida.
Estado del MVP
El MVP determinista está en funcionamiento. La arquitectura autoritativa comienza en 00-architecture-index.md; el núcleo implementado cubre:
Observaciones de origen inmutables.
Nodos de entidad tipados y aristas de afirmación atómicas con intervalos de evidencia exactos.
Consultas bi-temporales de creencias actuales e históricas.
Confirmación explícita, contradicción y supersesión atómica.
Comandos
recall,historyyexplain.Aislamiento estricto de bancos y un registro de eventos de mutación de solo anexión.
Un validador de propuestas de dream agnóstico al proveedor con compuertas de evidencia, marca de agua, versión de afirmación, idempotencia, confianza, impugnador y revisión.
Ejecuciones de dream duraderas, tareas, propuestas, elementos de revisión, arrendamientos, marcas de agua de eventos y confirmaciones atómicas de propuestas.
Un proveedor de metadatos determinista que ejercita el ciclo completo de dream sin enviar datos de origen a un modelo externo.
Fixtures de MemoryRotBench, líneas base, calificación de recuperación e integración con el motor.
Recuperación híbrida FTS/vectorial con una línea base local sin dependencias y un incrustador reemplazable.
Cuarentena en tiempo de recuperación para contenido no confiable similar a instrucciones.
Trabajadores de Dream recuperables ante fallos con arrendamientos, renovación de latidos, reintentos y reanudación segura ante reproducción.
Un proveedor de salida estructurada compatible con OpenAI que solo puede proponer candidatos.
Un servidor MCP STDIO de cinco herramientas:
recall,record,explain,correctyforget.Ingesta de JSONL de Codex aprobada por el usuario y un instalador de Codex con alcance de proyecto.
Una proyección de revisión en Markdown determinista y compatible con Obsidian.
Episodios procedimentales de primera clase para la reutilización acotada de intentos de codificación exitosos y fallidos.
Adaptadores de referencia reproducibles sin memoria, Markdown, BM25, contexto plano y externos/Graphify.
CI multiplataforma, verificación de paquetes y diagnósticos accionables de
doctor.
El motor real actualmente supera las 12 consultas públicas de MemoryRotBench y los siete contratos de caos de producción. La suite de pruebas del repositorio tiene 196 pruebas aprobadas en este punto de control. En la primera matriz pública con huella digital, las líneas base simples más fuertes aprueban 7/12 mientras que MemoryGraph aprueba 12/12.
Related MCP server: korely
Inicio rápido
uv sync
uv run memorygraph init --database /tmp/memorygraph.db
uv run memorygraph doctor --database /tmp/memorygraph.db
uv run memorygraph bank create personal:founder --database /tmp/memorygraph.db
uv run memorygraph dogfood bootstrap --database /tmp/memorygraph.db
uv run memorygraph predicate define works_at \
--bank personal:founder --cardinality one --volatility volatile \
--database /tmp/memorygraph.dbRegistra evidencia y luego conviértela en una afirmación:
OBSERVATION_ID=$(uv run memorygraph observe "Abrar works at Acme." \
--bank personal:founder --source-key event:acme \
--database /tmp/memorygraph.db)
CLAIM_ID=$(uv run memorygraph claim assert Abrar works_at Acme \
--bank personal:founder --observation "$OBSERVATION_ID" \
--database /tmp/memorygraph.db)La API de Python también expone confirm_claim, contradict_claim, supersede_claim, recall, history y explain para aplicaciones integradas.
Registra un intento de codificación para que los agentes futuros puedan reutilizar una estrategia exitosa—o evitar un fallo conocido—sin pretender que sea universalmente aplicable:
memorygraph record-attempt "Run migrations before starting the worker" \
--bank project:my-app --source-key attempt:migrate-worker \
--task "start durable worker" --outcome success \
--applicability-json '{"database":"sqlite"}'Ejecuta el ciclo de dream
El proveedor integrado lee candidatos tipados de metadata.memorygraph, propone cambios en el grafo, valida la evidencia y las precondiciones temporales, y luego confirma las propuestas elegibles en una sola transacción. Los proveedores de modelos implementan el mismo protocolo de solo candidatos y nunca obtienen una ruta directa de escritura en la base de datos.
PYTHONPATH=src:. uv run python examples/run_dream_cycle.py \
--database /tmp/memorygraph-dream.db
uv run memorygraph dream status RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream reviews \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream rollback RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.dbPara la ingesta por CLI, pasa el sobre de candidatos con observe --metadata-file FILE.json y luego ejecuta memorygraph dream run --bank BANK. --mode dry_run valida y persiste propuestas pero no consume la observación ni cambia afirmaciones.
Para la ejecución duradera, pon el trabajo en cola y ejecuta un trabajador por separado:
uv run memorygraph dream queue \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker \
--bank personal:founder --database /tmp/memorygraph-dream.dbPara usar un endpoint de Responses compatible con OpenAI, establece la variable de clave configurada y pasa un modelo tanto a la cola como al trabajador. La salida del proveedor se analiza como datos estructurados estrictos y aún pasa por las mismas compuertas deterministas de evidencia y confirmación.
export OPENAI_API_KEY=...
uv run memorygraph dream queue --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.dbConecta Codex
Instala el paquete, inicializa un banco de proyecto y agrega la configuración MCP con alcance de proyecto:
uv run memorygraph init
uv run memorygraph bank create project:my-app
uv run memorygraph install-codex --project .
uv run memorygraph probe-codex --project .El instalador crea o repara un bloque [mcp_servers.memorygraph] en .codex/config.toml, lo apunta al módulo STDIO memorygraph.mcp del entorno de Python actual y configura Codex para solicitar escrituras. No modifica la configuración global de Codex. Las cinco operaciones MCP requieren un alcance de banco explícito.
probe-codex valida la configuración del proyecto y ejercita un ciclo de vida real de subproceso MCP. Usa --project-database si quieres que la sonda acceda a la base de datos del proyecto configurada en lugar de bases de datos de sonda temporales desechables.
La importación de contenido de sesión es opcional. Cada registro JSONL debe llevar bank, session_id, turn_id, role, content y approved; los registros no aprobados se omiten por defecto:
memorygraph ingest-codex approved-session.jsonlDogfood Alpha
La matriz oficial de fixtures offline de seis brazos es:
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.pyPara un proyecto real, primero inicia el contrato operativo:
uv run memorygraph dogfood bootstrap \
--database .memorygraph/memory.db \
--bank project:my-app \
--workspace my-appLa matriz de fixtures ejecuta estos brazos:
no_memorymarkdownmemorygraph_graph_onlymemorygraph_gated_dreammemorygraph_always_dreamgraphify_compatible
Mide aprobación/fallo de tareas, precisión de recuperación útil, fuga de recuperación prohibida o desactualizada, errores repetidos, latencia, estimaciones de tokens, llamadas a herramientas, reintentos, campos de costo estimado y carga de revisión de Dream. Los resultados se escriben en benchmarks/reports/dogfood-offline-mvp.json y en el libro mayor de solo anexión benchmarks/reports/dogfood-offline-mvp.jsonl. La aprobación/fallo de tareas sigue las expectativas de la consulta; el backlog de revisión de Dream sigue siendo un costo separado y visible.
Resultado actual del fixture offline en 2026-08-22:
memorygraph_always_dream:3/3memorygraph_graph_only:1/3memorygraph_gated_dream:1/3graphify_compatible:1/3markdown:1/3, con fuga de fragmentos prohibidos
graphify_compatible es un adaptador de protocolo que permite que un recuperador externo compita contra el mismo manifiesto, límites de tiempo y contrato de calificación. No es una afirmación de que este repositorio ya haya completado una comparación en vivo con Graphify.
Revisión humana en Obsidian
Genera un vault de Markdown que contenga afirmaciones actuales, procedencia exacta, relaciones y la cola de revisión de Dream:
memorygraph project-obsidian --bank project:my-app \
--output .memorygraph/obsidianEl Markdown es desechable y gestionado por manifiesto. Las observaciones de SQLite y los eventos de solo anexión siguen siendo autoritativos; las ediciones en las notas generadas nunca mutan la memoria silenciosamente.
Dogfood Beta
Beta agrega un bucle de evidencia en vivo, propiedad del repositorio, sobre la matriz determinista de Alpha. Comienza iniciando el banco del proyecto, instalando la configuración MCP con alcance de proyecto y probando la base de datos del proyecto configurada:
memorygraph dogfood bootstrap --database .memorygraph/memory.db \
--bank project:memorygraph --workspace agent-memory-research
memorygraph install-codex --project .
memorygraph probe-codex --project . --project-database --configured-onlyLa instrumentación de sesiones reales es explícita y de solo anexión; MemoryGraph nunca extrae el historial privado de Codex. Registra eventos aprobados de recall, attempt y task con memorygraph dogfood capture y luego ejecuta make dogfood-live. El informe rastrea tareas exitosas, precisión de recuperación útil, recuperación prohibida, errores repetidos, latencia, tokens, llamadas a herramientas y reintentos. El contrato operativo completo y el esquema de eventos están en 13-dogfood-beta.md.
Ejecuta la compuerta Beta acelerada sin esperar cinco proyectos orgánicos:
make dogfood-betaEsto ejecuta cinco flujos de trabajo aislados y separados en el tiempo contra no-memoria, Markdown y MemoryGraph, y luego compone las suites públicas de recuperación y caos de producción existentes en un informe de aprobación/fallo con huella digital en benchmarks/reports/dogfood-beta.json. Es evidencia determinista acelerada, no una afirmación de cinco usuarios sostenidos.
¿Por qué un grafo?
El grafo da a los agentes una estructura componible: las entidades son nodos y afirmaciones como Abrar --works_at--> Stripe son aristas tipadas. MemoryGraph no trata una arista como una verdad atemporal. Cada versión de afirmación lleva tiempo válido, tiempo de sistema, ciclo de vida, procedencia y evidencia de origen exacta. Esa es la diferencia entre un grafo de memoria útil y un almacén de hechos obsoleto.
Desarrollo
uv sync --extra dev
uv run pytest
uv run ruff check .
PYTHONPATH=src:. python examples/run_memoryrotbench_memorygraph.py
PYTHONPATH=src:. python examples/run_memoryrotbench_chaos_memorygraph.py
python examples/run_memoryrotbench_baseline_matrix.py
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.pyResultados esperados: 12/12 casos públicos de recuperación y 7/7 casos de caos de producción. La matriz agrega registros inmutables con huella digital de corpus y evaluador a benchmarks/reports/public-baseline-matrix.jsonl. Proporciona --graphify-command para ejecutar un adaptador externo de Graphify contra exactamente el mismo corpus visible y contrato de calificación.
Siguiente capa de producto
La siguiente compuerta sigue siendo la prueba en el mundo real: sesiones de dogfood en vivo respaldadas por modelos, comparaciones reales cara a cara con Graphify y uso de socios de diseño sobre trabajo de codificación real. El residuo de eliminación de todo el pipeline se audita y se informa; cualquier residuo de identidad que no pueda borrarse de forma segura sin reescribir la historia se expone en lugar de ocultarse. El validador de dream sigue siendo el cinturón de seguridad por el que deben pasar todos los proveedores y trabajadores.
Licenciado bajo Apache-2.0.
Available Tools
5 toolscorrectCorrect claimBDestructive
Supersede or retract a current claim with auditable evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| object | No | ||
| excerpt | No | ||
| claim_id | Yes | ||
| known_at | No | ||
| valid_to | No | ||
| operation | Yes | ||
| rationale | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| valid_from | No | ||
| object_kind | No | ||
| object_type | No | ||
| effective_at | No | ||
| observation_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, which covers the mutation aspect. The description adds 'with auditable evidence,' implying that actions are logged or supported by evidence—information not present in annotations. However, it does not elaborate on the nature of the audit trail or what happens to the superseded/retracted claim, so the added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence conveys the core purpose without wasted words. The action and key qualifier are front-loaded, making it easy to scan. No redundant phrases or unnecessary detail 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?
For a destructive mutation tool with 14 parameters, a one-line description is severely insufficient. It omits operational context (e.g., what constitutes a 'current claim', how to specify the target, acceptable evidence types, return behavior, or error conditions). Combined with no output schema and low parameter coverage, the description leaves critical gaps that will impede correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 14% schema description coverage and 14 parameters, the description carries the burden of explaining key parameters. It does not elaborate on claim_id, operation, rationale, valid_from, valid_to, or other fields. The phrase 'auditable evidence' hints at rationale/excerpt but does not map to any parameter, leaving the agent without semantic guidance for required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Supersede or retract') and the resource ('a current claim'), and includes the qualifier 'with auditable evidence' that signals a specific audit-trail behavior. It implicitly distinguishes itself from siblings like record (creating new claims) and forget (possibly deletion) by focusing on correction of existing claims.
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 is given on when to use this tool versus alternatives. The description implies correction of existing claims but does not state conditions, prerequisites, or contrast with siblings. An agent must infer usage from the operation names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explainExplain claimBRead-onlyIdempotent
Show a claim's lifecycle, relations, and exact supporting evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| claim_id | Yes | ||
| workspace | No | Optional workspace label stored on observations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds context about the kind of information returned (lifecycle stages, relations, evidence granularity), which goes beyond bare annotations. However, it doesn't describe output format, pagination, or any side effects beyond what annotations imply, so it adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently conveys the core purpose without redundancy, making it easy for an agent to parse quickly.
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 there is no output schema, the description doesn't explain the return structure or how the 'explain' information is presented (e.g., nested JSON, human-readable text). It also doesn't mention any constraints like required permissions or workspace handling. For a tool that likely returns complex claim details, this is a notable gap, though the basic purpose is clear.
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 67%: 'bank' and 'workspace' have descriptions, but 'claim_id' does not. The tool description doesn't clarify any parameters further, especially the undocumented claim_id. It adds no meaning beyond what the schema already provides, leaving the unidentified parameter ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'show' and the resource 'claim' with specific aspects: lifecycle, relations, and exact supporting evidence. This distinguishes it from siblings like recall (retrieve), record (create), correct (modify), and forget (delete) by focusing on detailed visualization rather than simple retrieval or mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any conditions for exclusion. It doesn't mention whether it's preferred for debugging, auditing, or investigating claim states, leaving the agent to infer 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.
forgetForget observationADestructiveIdempotent
Privacy-delete one source observation and propagate direct retractions.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| workspace | No | Optional workspace label stored on observations. | |
| observation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds value by explaining the 'privacy-delete' nature (implying data sanitization) and the propagation of retractions. This goes beyond the bare annotation flags and gives a clearer picture of side effects, though it doesn't detail the propagation mechanism itself.
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, compact sentence that front-loads the core action ('Privacy-delete') and immediately follows with the key side-effect. There is zero fluff; every word carries functional meaning, making it an exemplary concise definition.
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 deletion tool with 3 parameters and no output schema, the description covers the essential action and side effects. It does not mention return values, error handling, or prerequisites, but given the low complexity and annotations covering idempotency and destructiveness, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, meaning two of three parameters have descriptions in the schema. The tool description does not add any semantic detail about parameters (e.g., what 'bank' or 'observation_id' specifically mean in this context). Since coverage is not high (>80%) but not low (<50%), the baseline 3 applies, and the description makes no attempt to compensate.
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 ('Privacy-delete') and resource ('one source observation') and adds a distinguishing side-effect ('propagate direct retractions'). This clearly sets it apart from siblings like 'record' or 'explain', making the tool's purpose instantly recognizable.
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 for when to use this tool versus alternatives. It does not mention conditions, exclusions, or scenarios where a different sibling (e.g., 'correct') would be more appropriate. The usage context is entirely left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall memoryCRead-onlyIdempotent
Retrieve bounded source observations relevant to the current task.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| as_of | No | ||
| limit | No | ||
| query | Yes | ||
| workspace | No | Optional workspace label stored on observations. | |
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description need not repeat that. It adds the concepts of 'bounded' and relevance to the current task, which are minor behavioral cues, but it does not disclose retrieval mechanism, result format, or error handling. The added value is modest.
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 with no wasted words and the primary action is front-loaded. It is efficient, though its brevity may contribute to the lack of parameter and usage clarity.
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 6 parameters (2 required), low schema coverage, and no output schema, the description is insufficient. It does not explain how to construct the query, what 'limit' or 'max_tokens' control, or what the response contains. An agent would need to consult other sources to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only bank and workspace have descriptions). The tool description neither explains the remaining parameters (query, as_of, limit, max_tokens) nor provides any parameter-level guidance. The phrase 'bounded source observations' hints at limits but does not map to specific parameters, failing 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 uses a clear verb ('Retrieve') and a resource ('bounded source observations'), which distinguishes it from sibling tools like 'record' and 'forget'. However, it does not explicitly mention the 'bank' parameter or clarify the meaning of 'bounded', leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'explain' or 'correct'. The only contextual hint is 'relevant to the current task', which is vague and does not explain prerequisites, exclusions, or when to prefer recall over other memory operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordRecord observationBIdempotent
Store one user-approved raw observation without inferring claims. Set kind to attempt to record procedural memory; content is the strategy and metadata must include task_key and outcome, with optional failure, applicability, and environment.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| kind | No | ||
| content | Yes | ||
| actor_id | No | ||
| metadata | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| actor_type | No | ||
| source_key | Yes | ||
| observed_at | No | ||
| sensitivity | No | ||
| trust_class | No | ||
| effective_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds context about user approval and non-inference of claims, which are beyond the annotations. But it doesn't disclose other behaviors like error handling, rate limits, or side effects beyond the basic write operation, so it adds some value but not a lot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. It front-loads the core purpose, then gives a focused, actionable instruction for the most complex parameter combination. Every word earns its place, and the layout makes it easy to scan.
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 12 parameters, nested objects, and no output schema, the description is insufficient. It only addresses the 'attempt' kind and does not cover other potential uses or explain most parameters. There is no mention of return values, error cases, or examples. While annotations cover idempotency and destruction, the description leaves too much to inference for a complex 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 17%, so the description carries considerable burden. It clarifies kind, content, and metadata specifically for the 'attempt' case, which is valuable. However, it leaves the majority of the 12 parameters (e.g., actor_id, actor_type, sensitivity, trust_class) unexplained, and provides no general semantics for other kinds. It partially compensates for the low coverage but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Store') and resource ('raw observation'), with a qualifier ('user-approved') and a constraint ('without inferring claims'). It is unambiguous, though it doesn't explicitly distinguish from sibling tools like 'explain' or 'recall', which prevents a perfect score.
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 guidance for a specific scenario (setting kind to 'attempt') and outlines required metadata fields. However, it lacks any guidance on when this tool should be used compared to siblings, no exclusions or alternatives are mentioned, so it's partially helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
correct - First observed
explain - First observed
forget - First observed
recall - First observed
record
TDQS
Scored across 5 tools
Each tool targets a distinct operation: explain (query graph), recall (retrieve observations), record (store), correct (update claims), forget (delete). No overlapping purposes, and descriptions clearly separate them.
All tool names are single lowercase verbs, creating a uniform and predictable pattern. This consistency makes it easy to infer the action each tool performs.
Five tools is well-scoped for a memory graph server, covering core operations without redundancy. Each tool addresses a necessary part of the memory lifecycle.
The set covers record, recall, correct, forget, and explain, which covers full CRUD-like operations on claims and observations. Minor gaps like explicit listing or bulk operations exist but are not critical for core usage.
Maintenance
Related MCP Connectors
Evidence-grounded, graph-connected, correctable memory for agents.
Long-term memory for AI agents: bitemporal fact ledger, contradiction detection, explainability.
Long-term memory for AI agents: learns what is true about each person and answers with sources.
Memory for AI agents that knows what is still true. Typed bi-temporal facts, EU-hosted.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to maintain long-term, cross-session memory by extracting facts, reconciling state conflicts, and retrieving relevant memories via vector search.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to store and retrieve typed facts with bi-temporal validity, supersede outdated information, and query what was true as of any past date.MIT
- AlicenseNot gradedqualityAmaintenanceProvides AI agents a shared long-term memory layer with evidence-backed, auditable claims, enabling persistent, explainable, and conflict-aware recall across sessions.212 PyPI7MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI agents with long-term memory that tracks temporal validity and corrections, enabling context-aware retrieval of past facts via MCP tools.MIT