Skip to main content
Glama

¿Qué es esto?

MCP Light Memory es un sistema de memoria persistente ligero, local-first, para agentes de codificación y clientes MCP (Warp, OpenCode, JetBrains AI Assistant / PyCharm, Claude Code, Cursor). Actúa como una capa de checkpoint + recuperación — almacena el estado durable mínimo necesario para reanudar trabajo complejo entre sesiones, sin mantener la conversación completa en la ventana de contexto del modelo.

Cuando tu agente inicia una tarea, llama a context y recibe decisiones pasadas relevantes, trampas, restricciones e hipótesis — clasificadas, deduplicadas y limitadas por confianza. Cuando termina, guarda un checkpoint del estado de trabajo. En la siguiente sesión, incluso después de un reinicio, la memoria está ahí.

Related MCP server: mcp-chest-memory

¿Por qué usarlo?

Problema

Cómo lo resuelve MCP Light Memory

Los agentes olvidan todo entre sesiones

Los archivos Markdown persisten en disco; el agente los recupera mediante BM25 + embeddings opcionales

El historial completo de la sesión es demasiado grande para el contexto

Solo se recuperan las memorias relevantes (con presupuesto de tokens, diversificadas con MMR)

Dependencia de la nube / preocupaciones de privacidad

100% local, sin conexión, cero llamadas de red, sin demonio

Configuración pesada / dependencias

Cero dependencias de ejecución requeridas (stdlib puro de Python 3.8+); sentence-transformers opcional para mejor recuperación semántica

Inyección de prompts mediante memoria almacenada

Cada memoria recuperada es explícitamente evidencia trust: untrusted con una heurística de advertencia de inyección (ADR-015)

Aislamiento multi-proyecto

Router con lista de permitidos del registro, límite estricto write:false, aislamiento por subproceso por llamada

Deriva del protocolo MCP

Soporte de doble era: moderna 2026-07-28 + heredada 2024-11-05…2025-11-25

Cómo funciona (mecanismos)

  • Markdown es la fuente de verdad. Cada memoria es un archivo .md con frontmatter YAML (id, type, status, tags, sources, links, valid_from, valid_to, supersedes). Legible por humanos, diferenciable, durable.

  • SQLite es una caché reconstruible. Índice BM25/FTS5 + vectores de embeddings opcionales + seguimiento de uso. Bórralo y todo se reconstruye desde Markdown.

  • Recuperación: BM25 en Python puro + embeddings densos opcionales → fusión RRF → diversificación MMR → refuerzos de política (tipo/estado/temporal) → corte por presupuesto de tokens. Modo adaptativo: primero disperso, denso solo si es débil.

  • Ciclo de vida: remember → update → supersede (enlaza en ambas direcciones, nunca elimina historial) → forget (archiva, nunca elimina) → timeline (vista temporal). search --at YYYY-MM-DD para consultas históricas.

  • Límite de confianza: el contenido recuperado se envuelve en === BEGIN/END INTERNAL_RAG MEMORY === con un encabezado SECURITY NOTICE. El JSON/MCP estructurado lleva trust: untrusted + security_flags: ["instruction_like_content"] opcional.

  • Actualidad de la evidencia: cada resultado incluye evidence_state (present/missing/unverifiable) para evidencia local tipo ruta — derivado en el momento de la recuperación, nunca persistido.

  • Router multi-proyecto: un servidor MCP stdio frente a muchos proyectos mediante un registro JSON. write:false bloquea las herramientas de mutación antes de lanzar un subproceso hijo. Aislamiento por subproceso por llamada (sin estado compartido).

Configuración

Requisitos previos

  • Python 3.8+ (usa el lanzador py, python o python3 — el instalador detecta automáticamente el intérprete real y rechaza el stub de WindowsApps)

  • Git (el proyecto de destino debe ser un repositorio git)

  • Opcional: pip install sentence-transformers numpy para una mejor recuperación semántica

La versión actual está definida por el archivo VERSION — consúltalo (o ejecuta mlm.py --version) en lugar de codificar un número esperado.

Inicio rápido

Clona este repositorio una vez y luego instala en cualquier proyecto:

# Windows (PowerShell)
git clone https://github.com/PeterPirog/mcp-light-memory.git ~/mcp-light-memory
python ~/mcp-light-memory/install.py . --client warp
# Linux/macOS
git clone https://github.com/PeterPirog/mcp-light-memory.git ~/mcp-light-memory
python3 ~/mcp-light-memory/install.py . --client warp

El instalador:

  • copia los archivos de habilidades + crea INTERNAL_RAG/ + AGENTS.md

  • ejecuta init + checkpoint + validate (para que guard esté OK inmediatamente)

  • registra automáticamente el servidor MCP en la configuración del cliente cuando puede hacerlo de forma segura (o informa MANUAL_REQUIRED / imprime instrucciones para JetBrains)

  • escribe la ruta absoluta al intérprete de Python verificado (sobrevive a problemas de PATH en Windows)

python .agents\skills\internal-rag\mlm.py --version   # reports the installed version
python .agents\skills\internal-rag\mlm.py status       # expect: INTERNAL_RAG ready
python .agents\skills\internal-rag\mlm.py guard        # expect: GUARD OK

Matriz de instalación

Un instalador, cuatro clientes, dos ámbitos de configuración. Guía completa: docs/INSTALLATION.md.

Cliente

Ámbito de proyecto

Ámbito global

Warp (escritura de configuración automática; la activación del proyecto puede requerir aprobación)

install.py . --client warp

install.py . --client warp --global

OpenCode stable (V1) (automático para escrituras seguras de configuración JSON)

install.py . --client opencode

install.py . --client opencode --global

OpenCode 2 (V2, beta) (automático para escrituras seguras de configuración JSON)

install.py . --client opencode2

install.py . --client opencode2 --global

JetBrains AI / PyCharm (manual en la interfaz del IDE)

install.py . --client jetbrains

install.py . --client jetbrains --global

  • --global cambia el ámbito de la CONFIGURACIÓN DEL CLIENTE (~/.warp/.mcp.json vs {repo}/.warp/.mcp.json, ~/.config/opencode/opencode.json vs opencode.json del proyecto). El servidor sigue apuntando al proyecto de destino en el que instalaste.

  • ¿Necesitas un endpoint MCP global para muchos repositorios? Usa el router multi-proyecto — docs/MCP-MULTI-PROJECT.md.

  • JetBrains/PyCharm es asistido, no totalmente automático: el instalador prepara el JSON + el Directorio de Trabajo; tú añades el servidor en Settings → Tools → AI Assistant → MCP y eliges Nivel de servidor = Proyecto o Global.

  • Configuración manual (sin instalador) por cliente: docs/INSTALLATION.md + páginas de clientes (Warp · OpenCode).

Zero-shot: prompts de copiar y pegar para Warp y OpenCode

Puedes pegar uno de estos directamente en el agente del cliente. Reemplaza C:\Projects\App con la ruta real del repositorio de destino.

Warp — instalar para un proyecto:

Install and configure MCP Light Memory (mcp-light-memory) as an MCP server for project C:\Projects\App in Warp, using project scope. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, update it with git pull --ff-only. Apply the canonical installation contract from the repository and run install.py with TARGET_PROJECT=C:\Projects\App and --client warp without --global. Do not force-overwrite an existing configuration. After installation, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the Warp configuration contains mcp-light-memory and the C:\Projects\App path. Report success only after MCP REGISTRATION: REGISTERED and successful verification. If Warp requires an additional project activation/toggle/approval, state the exact client-side step and do not claim the server is active before it is completed.

Warp — configuración global del cliente para un proyecto:

Install and configure MCP Light Memory (mcp-light-memory) in Warp globally for project C:\Projects\App. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Apply the canonical installation contract and run install.py with TARGET_PROJECT=C:\Projects\App, --client warp, and --global. Remember: --global means the global Warp client configuration, while the server must still be bound to C:\Projects\App; do not use the multi-project router. After installation, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the global Warp configuration contains mcp-light-memory and the C:\Projects\App path. Report success only after MCP REGISTRATION: REGISTERED and successful verification.

OpenCode — instalar para un proyecto (stable/V1):

Install and configure MCP Light Memory (mcp-light-memory) as an MCP server for project C:\Projects\App in OpenCode. By "OpenCode" I mean stable/V1, so use --client opencode, not opencode2. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Run install.py with TARGET_PROJECT=C:\Projects\App and --client opencode without --global. Do not force-overwrite an existing configuration. If the installer returns MCP REGISTRATION: MANUAL_REQUIRED (for example because opencode.jsonc exists), do not report success: safely edit the JSONC while preserving comments and unrelated settings if you have appropriate file-editing tools; otherwise report the exact manual action required. After real registration, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the OpenCode configuration contains mcp-light-memory and C:\Projects\App.

OpenCode — configuración global del cliente para un proyecto (stable/V1):

Install and configure MCP Light Memory (mcp-light-memory) globally in OpenCode for project C:\Projects\App. By "OpenCode" I mean stable/V1, so use --client opencode. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Run install.py with TARGET_PROJECT=C:\Projects\App, --client opencode, and --global. --global means the global OpenCode client configuration, while the server must still be bound only to C:\Projects\App; do not use the multi-project router. If the installer returns MCP REGISTRATION: MANUAL_REQUIRED, do not report success and follow the safe JSONC instructions. After real registration, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the global OpenCode configuration contains mcp-light-memory and the C:\Projects\App path.

Para OpenCode 2 / V2, usa los mismos prompts pero indica explícitamente OpenCode 2 / V2 y exige --client opencode2. Más variantes: docs/ZERO-SHOT-SETUP-PROMPTS.md.


Detalles de configuración

Warp

Warp lee las configuraciones del servidor MCP desde ~/.warp/.mcp.json (global, auto-inicio) o {repo}/.warp/.mcp.json (proyecto, requiere un interruptor manual según la documentación de Warp). Forma: mcpServers.<name> con command, args, working_directory (configúralo siempre — el almacén de memoria se resuelve a partir de él). Consulta examples/warp.example.json y docs/WARP-SETUP.md.

OpenCode stable (V1)

OpenCode lee opencode.json/.jsonc en la raíz del proyecto, o ~/.config/opencode/opencode.json globalmente. Los servidores V1 son planos bajo mcp.<name> (sin subclave servers) con enabled: true y command como array — consulta examples/opencode-legacy.example.json y docs/OPENCODE.md.

OpenCode 2 (V2, beta)

Mismos archivos de configuración, forma diferente: mcp.servers.<name>, command como array, y sin campo enabled (V2 desactiva mediante disabled: true) — consulta examples/opencode-v2.example.jsonc y docs/OPENCODE.md.

JetBrains AI Assistant / PyCharm

PyCharm NO lee automáticamente ningún archivo de configuración MCP. El instalador imprime el JSON listo para pegar + el Directorio de Trabajo; tú añades el servidor en Settings → Tools → AI Assistant → MCP (STDIO) y eliges Nivel de servidor = Proyecto o Global. Consulta examples/jetbrains.example.json.


Router multi-proyecto

Una conexión MCP frente a muchos proyectos — lista de permitidos del registro, límite estricto write:false, aislamiento por subproceso por llamada.

Archivo de registro (projects.json)

{
  "projects": {
    "backend": { "root": "/abs/path/backend", "write": true },
    "shared-lib": { "root": "/abs/path/shared-lib", "write": false }
  }
}

Configuración de Warp para el router

{
  "mcpServers": {
    "mcp-light-memory-router": {
      "command": "python3",
      "args": ["/abs/path/mcp-light-memory/.agents/skills/internal-rag/irag_mcp_router.py", "--registry", "/abs/path/projects.json"],
      "working_directory": "/abs/path/mcp-light-memory"
    }
  }
}

Consulta docs/MCP-MULTI-PROJECT.md para más detalles.


Flujo de trabajo

context --task "current task"
  ↓
recovery, if required (RECOVERY REQUIRED)
  ↓
checkpoint before first change
  ↓
implementation
  ↓
checkpoint after each milestone
  ↓
guard before finishing

Comandos principales (alias CLI: mlm.py o irag.py heredado):

mlm.py context --task "..."
mlm.py checkpoint --reason "..."
mlm.py search --query "..." --limit 8
mlm.py remember --type decision --title "..." --body "..."
mlm.py show <ref>
mlm.py update <ref> --status superseded
mlm.py status
mlm.py guard
mlm.py validate
mlm.py doctor

Mapeo de rutas (rebranding: internal-rag → MCP Light Memory)

Nuevo nombre

Ruta heredada (conservada por compatibilidad)

MCP Light Memory (producto)

internal-rag (nombre de producto obsoleto)

mlm / mlm.py (CLI principal)

irag.py (alias heredado, sigue funcionando)

mcp-light-memory (nombre del servidor MCP)

internal-rag (heredado, sigue funcionando en configuraciones)

mcp-light-memory-router (nombre del router)

internal-rag-router (heredado)

INTERNAL_RAG/ (carpeta de almacenamiento — sin cambios)

—

.agents/skills/internal-rag/ (directorio de habilidades — sin cambios)

—

La carpeta en disco INTERNAL_RAG/ y el directorio de habilidades .agents/skills/internal-rag/ se mantienen intencionalmente con sus nombres heredados para compatibilidad hacia atrás de migración cero. Consulta docs/MIGRATION-TO-MCP-LIGHT-MEMORY.md.

Memoria durable (CRUD)

remember --type decision --title "..." --body "..." --tags "a,b" --evidence "src/x.py:42" --links "decisions/other.md"
show <path-or-id>
show <ref> --section Knowledge
update <ref> --add-tags "new" --append "New evidence: ..."
supersede <ref> --by <new> --reason "..."
forget <ref>              # archives, does not delete
link --from <ref> --to <ref>
timeline --limit 20
status
history

Tipos: decision, knowledge, constraint, gotcha, failure, hypothesis, session.

Pila de tareas (interrupciones)

mlm.py push --task "interrupted work" --reason "user-priority"
mlm.py tasks
mlm.py resume
mlm.py forget-task <id>   # drop a specific task
mlm.py forget-task         # clear the whole stack

Configuración (.irag.yml, opcional)

retrieval:
  limit: 10
  mmr_lambda: 0.4
  min_score: 0.3
  embeddings: auto        # auto | on | off
  profile: english-fast   # english-fast (default) | multilingual (PL/EN projects)
  embeddings_model: null  # explicit model overrides the profile
tokens:
  context_budget: 5000
checkpoints:
  auto_archive_sessions: true
  max_task_stack: 24

mlm.py config muestra la configuración efectiva. mlm.py config --init escribe una plantilla.

Embeddings opcionales (mejor recuperación)

pip install -r requirements-optional.txt

Cuando el paquete está disponible y .irag.yml tiene embeddings: auto (predeterminado), la recuperación usa embeddings con respaldo a BM25. Anula en tiempo de ejecución con --embeddings on|off|auto.

Dos perfiles de recuperación (consulta docs/EMBEDDINGS.md):

  • english-fast (predeterminado, all-MiniLM-L6-v2)

  • multilingual (intfloat/multilingual-e5-small) — para proyectos polaco-inglés

Sin conexión / aislado de red

python pack.py --with-embeddings --profile english-fast
# -> internal-rag-offline-1.8.1.zip   (name from pack.py; 1.8.1 = VERSION file)
# On the air-gapped machine:
unzip internal-rag-offline-*.zip -d internal-rag-offline
pip install --no-index --find-links wheels/ -r requirements-optional.txt
python install.py "/path/to/project" --client <warp|opencode|opencode2|jetbrains>

Consulta docs/OFFLINE.md para más detalles.

Privacidad y Git

El modo de instalación predeterminado es solo local. El instalador usa .git/info/exclude, no el .gitignore del proyecto, para que la memoria local y los archivos de integración no se confirmen accidentalmente.

Antes de publicar un proyecto:

python .\privacy_check.py "D:\path\to\project"

Esperado: RESULT: PASS

Eliminación completa de un proyecto

python .\uninstall.py "D:\path\to\project"

El desinstalador crea una copia de seguridad fuera del repositorio y luego elimina INTERNAL_RAG y sus integraciones. Usa --keep-memory para conservar los datos de memoria.

Documentación

Estructura en un proyecto de destino

project/
├── AGENTS.md
├── .irag.yml                    # optional config
├── INTERNAL_RAG/
│   ├── WORKING_STATE.md
│   ├── INDEX.md
│   ├── .checkpoint.json
│   ├── decisions/  knowledge/  gotchas/  failures/  hypotheses/  sessions/  archive/
│   └── exports/
├── .agents/skills/internal-rag/
│   ├── SKILL.md
│   ├── mlm.py                   # primary CLI (forwards to irag.py)
│   ├── irag.py                  # core (legacy alias, still the canonical module)
│   ├── irag_embeddings.py       # optional plugin
│   └── irag_hooks.py            # optional git hooks
└── .opencode/                   # OpenCode integration (optional)

Fuente de verdad

  1. instrucciones actuales del usuario, 2. código/pruebas/configuración actuales, 3. especificaciones/ADR, 4. memoria verificada, 5. notas de sesión, 6. hipótesis.

La memoria puede estar desactualizada. El código tiene prioridad.

Licencia

MIT.


Registro de cambios

1.8.0 — Configuración manual de JetBrains

  • --client jetbrains ya no escribe un archivo de configuración falso (PyCharm ignora los archivos de configuración de MCP). En su lugar, imprime JSON listo para pegar e instrucciones del menú del IDE.

  • --unregister --client jetbrains imprime un recordatorio para eliminar en la interfaz del IDE.

1.7.2 — JetBrains cwd + mensajes específicos del cliente

  • JetBrains: escribe working_directory como sugerencia e imprime WARNING con la ruta exacta para configurar en Settings → Tools → AI Assistant → MCP.

  • Mensajes de reinicio específicos del cliente (Restart PyCharm / Restart Warp / Restart OpenCode).

  • Memory store: <path> se imprime en la salida de instalación para verificación inmediata.

1.7.1 — Corrección del stub de Python en Windows

  • detect_python() rechaza el stub de 0 bytes de WindowsApps; prefiere py -0p; verifica cada candidato con --version.

  • Verificación posterior al registro: ejecuta --version inmediatamente después de escribir la configuración e informa PASS/FAIL.

  • --unregister elimina archivos de configuración vacíos y directorios principales (corrige el esqueleto muerto .warp/.mcp.json → GUARD STALE).

1.7.0 — Reforma a MCP Light Memory

  • Reforma total de internal-rag a MCP Light Memory (mcp-light-memory). Nuevo alias de CLI mlm (mlm.py). Recursos de logotipo/icono. Documento de migración. Lista de verificación de reforma de GitHub.

  • Compatible con versiones anteriores: irag.py, INTERNAL_RAG/, nombres antiguos del servidor MCP conservados como alias obsoletos.

  • 18 pruebas de consistencia de reforma.

1.6.1 — Endurecimiento posterior a v1.6

  • Benchmark de mutación/ciclo de vida (11 escenarios). Límite de confianza (ADR-015): trust: untrusted + security_flags. Frescura de evidencia (ADR-016): evidence_state. Benchmark de escala (100/1k/10k). Regresiones de seguridad del router (+12 pruebas). Prueba de consistencia de documentación. 249 pruebas superadas.

1.6.0 — Calidad de recuperación + MCP 2026-07-28

  • Benchmark de calidad de memoria (37 casos). MCP 2026-07-28 de doble era (server/discover, _meta, structuredContent, outputSchema). write estricto del registro. Fuentes en el prefijo del fragmento. Recuperación adaptativa. Contexto consciente de enlaces. consolidate --prepare. Benchmark de latencia del router. ADR-010…016.

1.5.0 — Puerta de abstención + router multiproyecto

  • Puerta de relevancia/abstención (--meta). Prefiltro de candidatos FTS5. Router MCP multiproyecto. Endurecimiento del protocolo MCP (stdout puro, verificado con SDK). 168 pruebas.

1.4.0 — Fragmentación + deduplicación + ciclo de vida temporal

  • Fragmentación consciente de secciones (esquema v3). Deduplicación SimHash. Perfil multilingüe PL/EN. Ciclo de vida temporal (valid_from/valid_to/supersedes/--at). consolidate --dry-run.

1.3.0 — Caché de embeddings persistente

  • BLOBs float32 a nivel de fragmento en SQLite. Múltiples modelos coexisten. index --vacuum/--embed-missing.

1.0.2 — Presupuesto de tokens + privacidad

  • Aplicación del presupuesto de tokens. Detección de memoria obsoleta. Detección de duplicados. Escaneo de privacidad al escribir. Temporizador de checkpoint automático. Paquete sin conexión/aislado.

1.0.0 — Lanzamiento inicial

  • Recuperación BM25 + MMR. CRUD completo de memoria. Pila de tareas. Servidor MCP (JSON-RPC stdio). Git hooks. Diagnósticos. Exportación/importación. Presupuesto de tokens.

Available Tools

8 tools
checkpointSave Task CheckpointA

Persist current operational task state so work can be resumed after interruption or context loss. Use at meaningful milestones and before ending a work session; use remember for reusable knowledge. This writes local checkpoint/task state, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault
nextNoRecommended next action when work resumes.
phaseNoCurrent task phase or milestone name.
reasonYesWhy this checkpoint is being created.
blockersNoKnown blockers or unresolved issues.
completedNoWork completed since the previous checkpoint.
in_progressNoWork currently underway.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false), and the description adds the local-write scope, confirms no durable-memory deletion, and states no network access. It does not clarify whether checkpoints overwrite prior state or how the non-idempotent behavior manifests, so it is strong but not fully 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?

Two sentences, front-loaded with the core action, then usage and behavioral caveats. Every clause earns its place with no redundancy.

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?

With no output schema, the description adequately covers when to call it, what state it writes, and what it does not touch, which is sufficient for a checkpoint write. It could be slightly more complete on resume interaction with the sibling 'resume' tool.

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 description coverage is 100%, so all six parameters (reason, next, phase, blockers, completed, in_progress) are already documented in the schema. The description adds no parameter-level detail beyond what the structured fields provide, making the baseline 3 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?

States a specific verb and resource ('Persist current operational task state') with the added purpose of resuming after interruption or context loss. It explicitly distinguishes itself from the sibling 'remember' by noting that tool is for reusable knowledge, so an agent can tell them apart without opening schemas.

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?

Gives explicit when-to-use guidance ('at meaningful milestones and before ending a work session') and names the alternative ('use remember for reusable knowledge') with the condition that selects it. Nothing is left to inference about timing or routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contextLoad Task ContextA

Start or resume a task by retrieving relevant durable project memories and current working state. Use before project changes or after a context reset; use search for a focused lookup. This call may update task or usage state, is non-idempotent, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault
taskYesShort description of the task being started or resumed; used to retrieve relevant project context.
limitNoMaximum number of relevant memories to include in the context packet.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=false, and destructiveHint=false, so part of the description ('non-idempotent', 'no network access') restates structured data. It does add value beyond them by disclosing what state is touched ('may update task or usage state') and a non-obvious negative guarantee ('does not delete durable memories').

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, no waste, with the core action front-loaded and usage/behavioral caveats packed into the second sentence. Every clause carries information.

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?

For a 2-parameter, non-destructive mutation with full annotation coverage and no output schema, the description covers trigger, alternative, state mutation, idempotency, and network behavior. It stops short of describing what the returned 'context packet' contains, a minor gap given no output schema is declared.

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 description coverage is 100%, so both 'task' and 'limit' are already documented in the schema. The description adds no syntax, format, or defaulting detail beyond that, so the baseline of 3 applies.

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?

States a specific verb ('Start or resume a task') and resource ('durable project memories and current working state'), and explicitly routes the focused-lookup case to the sibling 'search'. An agent can distinguish it from search, resume, and checkpoint without opening any schema.

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?

Gives concrete triggers ('before project changes or after a context reset') and names the alternative tool and the condition that selects it ('use search for a focused lookup'). Nothing about when-to-use is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

guardCheck Checkpoint FreshnessA
Read-onlyIdempotent

Check whether project state changed since the last checkpoint. Use before finishing a task to detect uncheckpointed work, then checkpoint if stale. This operation is read-only and idempotent, does not modify memory or task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesTrue when project state is consistent with the last checkpoint.
fingerprintNoFingerprint representing the current project state used by the guard check.
changed_filesNoProject files detected as changed since the checkpoint baseline.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, and the description largely restates these facts ('read-only and idempotent', 'no network access'). It adds only marginal new context via 'does not modify memory or task state', which is implied by readOnlyHint. With annotations carrying the safety profile, this is adequate but adds little.

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?

Three short sentences, with the core purpose and the usage trigger front-loaded before the safety caveat. The final sentence is largely redundant with the annotations, which slightly dilutes the otherwise tight structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only check with an output schema present, the description covers purpose, when to call it, what to do with the result, and the safety profile. Return-value semantics are left to the output schema, which is appropriate.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter-related claims are made or needed.

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?

States a specific verb (check) and resource (whether project state changed since the last checkpoint), which is a distinct operation from the sibling 'checkpoint'. The name 'guard' is opaque on its own, but the description resolves it immediately.

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?

Explicitly names the trigger ('Use before finishing a task to detect uncheckpointed work') and the conditional follow-up action ('then checkpoint if stale'), routing the agent to the sibling tool under a stated condition. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rememberStore Durable MemoryA

Store durable project knowledge that should survive across sessions. Use for stable decisions, constraints, gotchas, failures, hypotheses, or reusable knowledge; use checkpoint for temporary task progress. This writes local durable memory, does not delete existing memories, and performs no network access.

NameRequiredDescriptionDefault
bodyYesDurable content to preserve: a decision, fact, constraint, gotcha, failure, hypothesis, or reusable session knowledge.
tagsNoOptional comma-separated tags used to organize or retrieve the memory.
typeYesMemory category describing the kind of durable knowledge being stored.
scopeNoOptional scope describing where this memory applies.
titleYesShort, specific title for the memory.
statusNoMemory confidence state: active for established knowledge or tentative for information that still needs confirmation.
evidenceNoOptional source or project-relative evidence reference supporting the memory.
consequenceNoOptional impact or consequence of this memory for future work.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description's behavioral claims ('does not delete existing memories', 'performs no network access') largely restate destructiveHint=false and openWorldHint=false from the annotations, and it adds the useful locality framing of 'local durable memory'. It does not disclose what the annotations cannot: whether repeated calls with identical content create duplicates (idempotentHint=false implies they do) or what the write returns. With annotations already carrying the safety profile, this is adequate but adds limited new context.

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?

Three short sentences, front-loaded with purpose, then usage routing, then behavioral constraints. No filler or repetition; every clause carries information.

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?

For an 8-parameter write tool with full schema coverage, no output schema, and annotations present, the description covers purpose, usage routing, and side-effect profile. The only gap is duplicate/return behavior on a non-idempotent write, which is minor.

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 description coverage is 100% with per-field descriptions and enum values, so the schema does the heavy lifting. The description's list of knowledge kinds loosely maps to the type enum but adds no format, syntax, or selection guidance beyond it. 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?

Specific verb+resource (store durable project knowledge that survives across sessions) with the durable/temporary distinction made explicit against the checkpoint sibling. An agent can tell immediately what this tool produces and how it differs from checkpoint without opening either schema.

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?

States exactly when to use it (stable decisions, constraints, gotchas, failures, hypotheses, reusable knowledge) and names the alternative with its own condition (checkpoint for temporary task progress). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resumeResume Saved TaskA

Resume and remove the top saved task from the task stack. Use after tasks shows resumable work; use tasks when you only need to inspect the stack. This changes local task state, is non-idempotent, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, but the description adds genuinely new context: it removes an entry from a stack (pop semantics), leaves durable memories intact, and performs no network access. The non-destructive clarification is valuable since 'remove' could otherwise read as data loss, though it restates non-idempotency already in annotations.

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, both front-loaded: the operation first, then routing guidance and behavioral guarantees. No filler, and every clause carries information an agent needs.

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?

For a zero-param mutation with no output schema, the description covers the operation, the routing decision, state side effects, and network behavior. The only gap is what 'resume' returns (the resumed task content), which an agent might reasonably want to know, but annotations and description together are otherwise sufficient.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-related claims are needed or missing.

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?

States a precise verb pair and resource: 'Resume and remove the top saved task from the task stack.' This distinguishes it from sibling 'tasks' (inspect) and from 'checkpoint'/'remember' by naming the exact stack operation performed.

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?

Explicitly names the precondition ('Use after tasks shows resumable work') and the alternative ('use tasks when you only need to inspect the stack'). Both when-to-use and when-not-to-use are covered with the sibling named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusInspect Memory StatusA
Read-onlyIdempotent

Return memory, checkpoint, index, and recovery status for the current project. Use for diagnostics and health checks. This operation is read-only and idempotent, does not modify memory or task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
memoriesNoTotal number of durable memories in the current project.
checkpointsNoTotal number of checkpoints in the current project.
index_statusNoCurrent retrieval index health or synchronization status.
last_checkpointNoMost recent checkpoint recorded for the current project.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, and the description largely restates these (read-only, idempotent, no state modification, no network access). It adds no information beyond the structured hints, but it also contradicts nothing, so a 3 is appropriate.

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?

Three short sentences, front-loaded with the core action and scope, followed by usage and safety context. No filler and nothing repeated needlessly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is parameterless, an output schema exists to describe the return shape, and annotations cover the safety profile; nothing an agent needs in order to call this correctly is missing.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; per the rubric, a 0-parameter tool has a 4 baseline. The description correctly avoids inventing inputs.

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?

States a specific verb (Return) and enumerates the exact resources covered (memory, checkpoint, index, recovery status for the current project), which is well beyond a restatement of the name "status". It stops short of explicitly distinguishing itself from the operational siblings like resume or checkpoint, so it lands just under a 5.

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?

"Use for diagnostics and health checks" gives a clear context for invoking it, implicitly steering the agent away from action-oriented siblings such as remember or resume. There are no explicit when-not conditions or named alternatives, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasksList Pending TasksA
Read-onlyIdempotent

List the current task stack and resumable task state. Use before resume when you need to inspect pending work without changing the stack. This operation is read-only and idempotent, does not modify task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
tasksNoSaved or resumable tasks in the current task stack, in server-defined order.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'read-only and idempotent, does not modify task state' largely restates structured data rather than adding new behavior. 'Performs no network access' is a marginal addition but is already implied by openWorldHint=false.

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-loads the purpose in the first sentence and stays to three short sentences, though the safety restatement ('read-only and idempotent, does not modify task state') is somewhat redundant with annotations and could be trimmed.

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?

With an output schema present, the description need not explain return values, and it covers purpose, timing, and the safe-read nature adequately for a zero-parameter read tool.

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 tool takes zero parameters, so the baseline is 4; there is no parameter semantics to document, and the description correctly says nothing about inputs.

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?

States a specific verb+resource ('List the current task stack and resumable task state') that an agent can distinguish from sibling tools like resume or status without opening a schema.

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?

Gives clear timing guidance ('Use before resume when you need to inspect pending work') and implicitly contrasts with resume by noting it leaves the stack unchanged, but does not explicitly name alternatives or when-not-to-use conditions beyond that.

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.

  1. 8 tool updatesv0.1.0
    • First observedcheckpoint
    • First observedcontext
    • First observedguard
    • First observedremember
    • First observedresume
    • First observedsearch
    • First observedstatus
    • First observedtasks

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation4/5

Descriptions carefully cross-reference each other (checkpoint vs remember, context vs search, resume vs tasks) so boundaries are mostly clear. Minor potential overlap between checkpoint/remember and guard/status, but the descriptions resolve these distinctions well.

Naming Consistency4/5

All names are single lowercase words with no camelCase/snake_case mixing, giving a uniform visual style. However, it mixes verbs (checkpoint, resume, search, guard, remember) with nouns (context, status, tasks), so the convention is not fully predictable.

Tool Count5/5

Eight tools is well-scoped for a lightweight memory server, with each tool mapping to a distinct operation (write memory, write checkpoint, search, inspect, resume, diagnose). No tool feels redundant or bolted on.

Completeness4/5

Covers the core lifecycle: durable memory (remember/search), task state (checkpoint/context/resume/tasks), and diagnostics (status/guard). The one gap is the absence of an update/delete/forget operation for durable memories, which descriptions explicitly note they never remove, limiting correction of stale knowledge.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a persistent, local-first memory for coding agents over MCP, enabling automatic recall and recording of past work, failures, and decisions to reduce repetition and token usage.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent memory for AI coding agents via MCP, enabling agents to store and semantically recall facts, events, and lessons across sessions, all running locally without cloud dependencies.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to maintain a private, local-first persistent memory by automatically saving, searching, and retrieving structured project memories through MCP, with hybrid keyword and embedding search, feedback-driven ranking, and no cloud dependency.
    2
    MIT