Product Memory
Product Memory
Un servidor de memoria de qué/por qué para agentes de codificación, sobre MCP. Responde qué significa una parte de un sistema y por qué se construyó así — hasta el nivel de función — para que un agente (o tú) deje de re-deducir o re-romper una decisión que alguien ya tomó. El código actual sigue siendo la fuente de verdad del cómo; este almacén nunca intenta reemplazarlo.
Este repositorio incluye una tienda de demostración sintética (memory-store/) — dos servicios ficticios, orbitcart (checkout/pagos) y beacon (despacho de notificaciones) — para que pm eval, los tests y las herramientas MCP funcionen sin configuración adicional y sin apuntar al código real de nadie. Apunta projects.yaml a tus propios repositorios para usarlo de verdad.
Ponlo en marcha — sin necesidad de experiencia en programación
1. Descárgalo. Elige lo que te resulte más fácil:
Si tienes Git: abre Terminal y ejecuta
git clone <this repo's URL>Si no lo tienes: en la página de GitHub, haz clic en el botón verde Code → Download ZIP, y descomprímelo.
2. Abre una terminal dentro de la carpeta que acabas de descargar.
Mac: busca la carpeta en Finder, haz clic derecho sobre ella, elige New Terminal at Folder (o abre Terminal y escribe
cdseguido de arrastrar la carpeta dentro, y pulsa Enter).Windows: abre la carpeta en el Explorador de archivos, mantén pulsada la tecla Mayús y haz clic derecho dentro de ella, elige Open PowerShell window here.
Linux: haz clic derecho dentro de la carpeta en tu gestor de archivos, elige Open Terminal Here (varía según el escritorio).
3. Ejecuta el script de configuración.
Mac / Linux: escribe
bash setup.shy pulsa Enter.Windows: escribe
.\setup.ps1y pulsa Enter. Si dice que el script está bloqueado, ejecutaSet-ExecutionPolicy -Scope CurrentUser RemoteSigneduna vez primero, y luego inténtalo de nuevo.
Eso es todo: instala todo lo que este proyecto necesita (nada a nivel del sistema, sin contraseña de administrador), compila la demo incluida y ejecuta una búsqueda real para demostrar que funciona. Verás algo como:
✓ Python 3 found (3.13.5)
✓ uv found
✓ Dependencies installed
✓ Demo memory store indexed
Trying a real search against the demo store...
8.75 [adr/verified] adr-0004-idempotency-keys-generated-client-side
ADR-0004: idempotency keys are generated client-side, not server-sideSi Claude Code ya está en tu máquina, el script te ofrecerá conectar Product Memory a él: di que sí, reinicia Claude Code y estará activo para todos los proyectos. Si no, o si usas un agente de codificación diferente, consulta Herramientas MCP a continuación y apunta la configuración MCP de tu agente a uv run --directory <this folder> python -m product_memory.server.
Una vez que esté en funcionamiento, prueba:
uv run pm serve # a local web page to browse the memory
uv run pm search "your question here"Cuando estés listo para usarlo de verdad (no la demo), abre projects.yaml y apúntalo a tus propios repositorios en su lugar.
Las dos apuestas de diseño
Nada de lo que escribe un agente se considera fiable a su llegada. Cada hecho propuesto mediante propose_memory recibe status: proposed — nunca verified — hasta que un humano ejecuta pm review. Confiar en una memoria equivocada cuesta más que perder una correcta, así que el valor predeterminado es "escrito", no "verdadero".
El ranking se mide, no se asume. pm eval puntúa la búsqueda por palabras clave (BM25 sobre SQLite FTS5) frente a un índice de vectores semánticos sobre un conjunto fijo de preguntas reales con respuestas conocidas, y lo vuelve a comprobar en cada ejecución en lugar de decidirlo una sola vez. El que mejor puntúe en esta ejecución es el que se usa — en el corpus privado del autor (1.192 elementos) eso es palabras clave con 0,785 MRR frente a 0,436 solo con semántica — y el índice vectorial solo se añade por debajo como recuperación adicional, sin reordenar nunca el resultado de las palabras clave. En el pequeño conjunto de demostración de 12 preguntas de este repositorio, solo las palabras clave ya encuentran las 12 (pm eval → 0.819 MRR, 12/12); ejecuta pm embed primero si quieres que aparezcan también las filas semántica/fusión en la comparación. Consulta eval/queries.json y product_memory/evaluate.py.
Cómo se puebla la memoria
Nunca un backfill completo — quedaría obsoleto antes de terminar. Cuatro canales:
# | Canal | Cuándo | Qué se guarda |
1 | Importación de docs | una vez por repositorio | punteros/resúmenes de CLAUDE.md, CONVENTIONS.md, docs de planificación — nunca copias bifurcadas |
1b | Importación de árbol de docs | una vez por árbol de docs grande | importación masiva con filtrado estricto (descarta docs de terceros, stubs, duplicados, informes de sesión "✅ Fixed!") |
2 | Captura en el momento del cambio | cada tarea de agente finalizada | el agente llama a |
3 | Backfill al preguntar | siempre que preguntes "¿por qué X funciona así?" | el agente investiga una vez, te responde y propone la respuesta como memoria |
Estructura
memory-store/ canonical store — markdown files in git, one fact each
_inbox/ agent proposals awaiting human promotion (or auto-approved, see below)
<project>/<repo>/ verified + promoted items
demo-repos/ tiny stub repos the demo store's code_symbol entries point at
projects.yaml registry: project -> repos -> disk paths
product_memory/
models.py data contracts (MemoryItem, TaskContext, WhyCard, ...)
store.py parse/iterate/propose store files
index.py SQLite FTS5 build + ranked search (disposable index)
semantic.py chunking + vector index, used for recall only
evaluate.py `pm eval` — MRR per retrieval mode, the ranking gate
conventions.py derive a repo's house style (declared + observed)
retrieval.py packet assembly (deterministic, no LLM)
staleness.py flags memories whose source code/doc changed since
server.py FastMCP stdio server — the MCP tools
webapp.py FastAPI local server (`pm serve`), loopback only
dashboard.py the review queue UI
ingest/ importers + secret redaction
cli.py `pm` — the commands below
eval/queries.json retrieval cases with known answers
tests/Comandos
pm serve # live local server: real search, feedback, persisted marks
pm dashboard --open # generate the standalone review-queue file
pm search "query" # ranked search from the terminal
pm eval # score retrieval against eval/queries.json — run before ranking changes
pm conventions --project beacon --repo beacon # derive a repo's house style
pm review # the only path from proposed to verified
pm index && pm embed # rebuild the keyword index and the chunked vector index
pm stale # notes whose source moved onHerramientas MCP
get_task_context · search_product_memory · get_project_overview ·
get_domain_rules · get_related_decisions · why_code(file, symbol) ·
get_recent_work · propose_memory (escribe proposed, o auto-aprueba con redacción — consulta PM_REVIEW=1 para forzar cuarentena en su lugar)
Instalación
¿Nuevo en esto y solo quieres ponerlo en marcha? Usa bash setup.sh (.\setup.ps1 en Windows) en su lugar — consulta Ponlo en marcha más arriba. Los pasos manuales de abajo son lo mismo, pero detallados:
git clone <this repo>
cd product-memory
uv sync
uv run pytest
uv run python -m product_memory.cli eval # or: pm eval, once installed
# register for ALL repos (user scope):
claude mcp add --scope user product-memory -- \
uv run --directory "$PWD" python -m product_memory.serverLuego apunta projects.yaml a tus propios repositorios, elimina o conserva las entradas de la demo orbitcart/beacon, y empieza a capturar memorias reales con propose_memory mientras trabajas.
Secretos
Todo lo que se escribe en el almacén pasa por redact_secrets — una lista de literales conocidos (secret-literals.txt, ignorado por git, o PM_SECRET_LITERALS) más una heurística genérica de forma de credenciales (etiqueta + valor de alta entropía en proximidad). La tienda de demo no trae nada que redactar; la suite de tests de pm eval incluye una comprobación de CI (test_demo_store_is_clean) que verifica exactamente eso.
Licencia
MIT — consulta LICENSE.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sirajjunior540/product-memory-oss'
If you have feedback or need assistance with the MCP directory API, please join our Discord server