ImprintMCP

Memoria Vectorial MCP de Autoactualización

Documentación

Imprint

Imprint

Memoria persistente para herramientas de codificación con IA. 100% local. Coste de API cero.

Dale a Claude Code, Cursor, Codex CLI, Copilot y Cline una memoria a largo plazo.
Deja de re-explicar tu base de código en cada sesión.

imprintmcp.alexandruleca.com →

CI Latest Release License Tokens −70.4% Cost −31.7%


Imprint UI

Por qué Imprint

  • Recuerda lo que tu IA olvida. Las decisiones, patrones, correcciones de errores y elecciones arquitectónicas persisten entre sesiones — se buscan semánticamente, no con grep.
  • −70.4% tokens, −31.7% coste. Medido en 150 ejecuciones en Claude Code (Sonnet). Tu IA busca en la memoria en lugar de releer archivos. Consulta BENCHMARK.md para los números brutos.
  • Se ejecuta 100% local por defecto. EmbeddingGemma-300M vía ONNX, base de datos vectorial Qdrant, chunking Chonkie — todo en tu máquina. No se consumen créditos de API salvo que lo actives.
  • Un comando, cualquier host. Se conecta a Claude Code, Cursor, Codex CLI, Copilot o Cline vía MCP. La misma memoria, compartida entre herramientas.

Se ejecuta 100% local. Cero créditos de API consumidos por defecto. Todo, desde embeddings, chunking, etiquetado, búsqueda vectorial y el grafo de conocimiento — se ejecuta en tu máquina:

  • Embeddings: EmbeddingGemma-300M vía ONNX Runtime (GPU o CPU), sin llamadas de red, sin coste por token.
  • Almacén vectorial: Qdrant se inicia automáticamente como daemon local en 127.0.0.1:6333. Tus datos nunca salen de la máquina salvo que los sincronices con otro dispositivo.
  • Chunking: Chonkie híbrido (tree-sitter CodeChunker + SemanticChunker), Python puro, local.
  • Etiquetado: reglas deterministas + similitud coseno zero-shot contra etiquetas pre-embedidas. Llamada LLM local por chunk si lo deseas.
  • Grafo Imprint: SQLite en disco para hechos temporales.

El flujo de ingesta: escanear directorio → detectar proyecto → dividir archivos en chunks → embeber chunks → etiquetar (lang/layer/kind/domain/topics) → upsert en Qdrant. Un hook Stop extrae automáticamente decisiones de las transcripciones de Claude; un hook PreCompact guarda el contexto antes de la compresión de la ventana. La búsqueda va directa a la base de datos vectorial local — sin ida y vuelta a ningún proveedor.

El etiquetado LLM en la nube opcional es solo opt-in (imprint config set tagger.llm true) si quieres temas más granulares y no te importa gastar créditos. Proveedores: Anthropic, OpenAI, Gemini, u Ollama / vLLM totalmente local. Déjalo desactivado y nada hablará jamás con una API de pago.

graph TB
    subgraph "Your Machine"
        CC[Claude Code] -->|MCP tools| MCP[Imprint MCP Server]
        MCP -->|HTTP localhost:6333| QDB[(Qdrant Server<br/>auto-spawned daemon)]
        MCP -->|facts| KG[(SQLite<br/>Imprint Graph)]
        CLI[imprint CLI] -->|HTTP| QDB
        CC -->|Stop hook| EXT[Auto-Extract<br/>Decisions]
        CC -->|PreCompact hook| SAVE[Save Before<br/>Compression]
        EXT -->|HTTP| QDB
        EMB[EmbeddingGemma ONNX<br/>GPU/CPU] -->|768-dim vectors| QDB
        TAG[Tagger<br/>lang/layer/kind/domain/topics] -->|payload| QDB
        CHK[Chonkie Hybrid<br/>CodeChunker + SemanticChunker] -->|chunks| EMB
    end

    subgraph "Sync Relay"
        RELAY[imprint relay<br/>WebSocket forwarder]
    end

    subgraph "Other Machine"
        CC2[Claude Code] -->|MCP| MCP2[Imprint MCP]
        MCP2 --> QDB2[(Qdrant Server)]
    end

    CLI -->|sync serve| RELAY
    RELAY -->|sync pull/push| QDB2

    style QDB fill:#1a1a3a,stroke:#60a5fa,color:#fff
    style KG fill:#1a1a3a,stroke:#4ecdc4,color:#fff
    style MCP fill:#0d1117,stroke:#a78bfa,color:#fff
    style RELAY fill:#0d1117,stroke:#ff6b6b,color:#fff
    style EMB fill:#0d1117,stroke:#fbbf24,color:#fff
    style TAG fill:#0d1117,stroke:#34d399,color:#fff
    style CHK fill:#0d1117,stroke:#f472b6,color:#fff

Instalación rápida

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/alexandruleca/imprint-memory-layer/main/install.sh | bash

Windows (PowerShell):

irm https://raw.githubusercontent.com/alexandruleca/imprint-memory-layer/main/install.ps1 | iex

Fija una versión específica, elige el canal dev, o usa imágenes Docker precompiladas — consulta docs/installation.md.

Actualización

Una vez instalado, usa el actualizador integrado — sin curl, sin sudo. data/ (workspaces, almacenamiento Qdrant, grafos SQLite, configuración, gpu_state.json) y .venv/ siempre se conservan; solo se reemplaza el árbol de código.

imprint update              # latest stable, asks for confirmation
imprint update --dev        # latest prerelease
imprint update --version v0.3.1
imprint update --check      # show current + latest release and exit
imprint update -y           # skip confirmation (CI / scripts)

Volver a ejecutar install.sh también funciona y ahora pregunta antes de sobrescribir una instalación existente. Para actualizaciones no interactivas pasa --yes o establece IMPRINT_ASSUME_YES=1.

Si la configuración de GPU falla una vez (p. ej. Blackwell + nvcc antiguo, o desajuste del runtime CUDA) el fallo se recuerda en data/gpu_state.json para que futuras ejecuciones de imprint setup omitan la ruta rota silenciosamente. Después de actualizar el toolchain, fuerza un reintento con:

imprint setup --retry-gpu

Hosts compatibles

imprint setup <target> conecta automáticamente el servidor MCP en cada herramienta de codificación con IA compatible. Ejecuta imprint setup all para configurar cada host instalado en tu máquina; las herramientas ausentes se omiten con una advertencia, no con un error.

DestinoConectado aArchivo de configuraciónAplicación
claude-codeClaude Code CLI (MCP + hooks + CLAUDE.md global)~/.claude/settings.json + MCP registrado vía claude mcp addEstricta (PreToolUse)
cursorCursor IDE (MCP + regla siempre activa)~/.cursor/mcp.json + ~/.cursor/rules/imprint.mdcSolo texto (regla)
codexOpenAI Codex CLI~/.codex/config.toml ([mcp_servers.imprint])Solo texto
copilotGitHub Copilot (modo agente VSCode), global de usuario<VSCode user>/mcp.json (servers.imprint)Solo texto
clineCline — extensión VSCode + CLI independiente<VSCode user>/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json y/o ~/.cline/data/settings/cline_mcp_settings.jsonSolo texto

imprint disable es simétrico — elimina la entrada MCP de cada archivo de configuración anterior que aún exista (el venv y los datos siempre se conservan para que reactivarlo sea rápido).

Comandos

imprint setup [target]     # install deps, register MCP, configure the chosen host tool
                           #   target: claude-code (default) | cursor | codex | copilot | cline | all
                           # add --retry-gpu to forget a sticky GPU failure and retry ORT / llama-cpp CUDA
imprint update [--version v0.3.1] [--dev] [-y] [--check]
                           # upgrade imprint in place; preserves data/ and .venv/
imprint uninstall [-y] [--keep-data]
                           # full removal: disable + strip CLAUDE.md + delete venv/data/install dir
imprint status             # is everything wired? show enabled/disabled, server pid, memory stats
imprint enable [target]    # re-wire MCP + hooks + start server
                           #   target: claude-code | cursor | codex | copilot | cline | all
imprint disable            # stop server, unregister MCP from every host, strip Claude hooks (data preserved)
imprint ingest <path>      # index project source files (directory or single file)
imprint learn              # index Claude Code conversations + memory files
imprint learn --desktop    # also ingest Claude Desktop / ChatGPT Desktop export zips from Downloads
imprint ingest-url <url>   # fetch URL(s), extract content, and index (html/pdf/etc)
imprint refresh <dir>      # re-index only changed files (mtime-based)
imprint refresh-urls       # re-check stored URLs via ETag/Last-Modified and re-index changed
imprint retag [--project] [--all]
                           # re-run the tagger on existing memories (--all re-tags already-tagged chunks)
# Heavy jobs (ingest/refresh/retag/ingest-url/refresh-urls) serialize via a
# shared queue lock. If another job is already running the CLI exits with an
# error — cancel it from /queue in the UI or kill the PID it reports.
imprint migrate --from WS1 --to WS2 --project NAME | --topic TAG [--dry-run]
                           # move memories between workspaces (preserves vectors)
imprint config             # show all settings with current values
imprint config set <k> <v> # persist a setting (e.g. model.name, qdrant.port)
imprint config get <key>   # show one setting with source + default
imprint config reset <key> # remove override, revert to default
imprint server <cmd>       # manage the local Qdrant daemon: start | stop | status | log
imprint workspace          # list workspaces and show active
imprint workspace switch <name>  # switch to workspace (creates if new)
imprint workspace delete <name>  # delete a workspace and its data
imprint wipe [--force]     # wipe active workspace
imprint wipe --all         # wipe everything (all workspaces)
imprint sync serve [--relay <host>]      # expose KB for peer syncing (default: imprint.alexandruleca.com)
imprint sync <id> --pin <pin>            # sync via default relay (or <host>/<id> / wss://<host>/<id>)
imprint sync export | import <dir>       # snapshot bundle, no re-embed on import
imprint relay              # run the sync relay server
imprint ui [start|stop|status|open|restart|log] [--port N]
                           # dashboard (FastAPI + Next.js); bare `imprint ui` runs foreground
imprint version            # print version

Documentación

TemaArchivo
Instalación, versionado, canales, Dockerdocs/installation.md
Componentes, flujo de datos, daemon Qdrant, ciclo de vidadocs/architecture.md
Pipeline de embeddings + aceleración GPUdocs/embeddings.md
Estrategia de chunking + parámetros ajustablesdocs/chunking.md
Etiquetas de metadatos, proveedores LLM, filtros de búsquedadocs/tagging.md
Workspaces + detección de proyectosdocs/workspaces.md
Herramientas MCP + actualizaciones automáticasdocs/mcp.md
Sincronización entre pares, servidor relay, dashboarddocs/sync.md
Cola de comandos + cancelacióndocs/queue.md
Todos los ajustes (imprint config)docs/configuration.md
Compilación desde el código fuente + flujo CI/releasedocs/building.md
Benchmarks y ahorro de tokensBENCHMARK.md

Glosario

Términos usados en la documentación.

TérminoDefinición
ChunkUna unidad de texto dentro de un archivo (una función, clase, sección markdown, turno de conversación) que recibe su propio vector de embedding. Producido por el chunker.
EmbeddingVector numérico denso (768-dim por defecto) que representa el significado semántico de un chunk. Significados similares → vectores cercanos.
QdrantLa base de datos vectorial que almacena embeddings + payloads. Se ejecuta como daemon local auto-iniciado en 127.0.0.1:6333.
CollectionEl término de Qdrant para un conjunto nombrado de vectores. Cada workspace tiene su propia collection (p. ej. memories, memories_research).
WorkspaceEntorno de memoria aislado — collection Qdrant dedicada + base de datos SQLite + WAL. Te permite separar memorias de investigación/staging/producción.
Imprint GraphAlmacén de hechos temporales (SQLite) para hechos estructurados subject → predicate → object con marcas de tiempo valid_from / ended.
MCPModel Context Protocol — el protocolo abierto que Claude Code usa para llamar herramientas externas. Imprint incluye un servidor MCP con 12 herramientas — consulta docs/mcp.md.
ProjectUna base de código identificada por un nombre canónico de su manifest (package.json, go.mod, etc.). Los proyectos obtienen la misma identidad entre máquinas incluso si las rutas difieren.
LayerEtiqueta derivada de la ruta: api, ui, tests, infra, config, migrations, docs, scripts, cli.
KindEtiqueta derivada del nombre de archivo: source, test, migration, readme, types, module, qa, auto-extract.
DomainEtiqueta derivada del contenido mediante regex de palabras clave: auth, db, api, math, rendering, ui, testing, infra, ml, perf, security, build, payments.
TopicsEtiquetas de formato libre a partir de similitud coseno zero-shot o clasificación LLM (opt-in) — más granulares que domain.
IngestionEscanear un directorio, detectar proyectos, dividir archivos en chunks, embeber chunks, etiquetar y hacer upsert en Qdrant.
RefreshRe-ingesta incremental — solo re-divide y re-embebe los archivos cuyo mtime cambió desde la última ejecución.
QueueFIFO de un solo slot (data/queue.sqlite3 + data/queue.lock) que serializa ingest/refresh/retag/ingest-url para que las ejecuciones paralelas no agoten la memoria de la máquina. La UI en /queue lista activos + en cola + historial; cancelar propaga SIGTERM→SIGKILL al grupo de procesos del subproceso, así que las llamadas LLM de etiquetado en curso mueren con él. Consulta docs/queue.md.
Auto-extractHook Stop que analiza las transcripciones de conversación tras cada respuesta de Claude y almacena intercambios de preguntas y respuestas + declaraciones tipo decisión.
PreCompact hookHook síncrono que se dispara antes de que se comprima la ventana de contexto de Claude — instruye a Claude para que guarde primero el contexto importante mediante las herramientas MCP.
Relay serverReenviador WebSocket sin estado (imprint relay) que media la sincronización entre pares entre dos máquinas. Ningún vector cruza la red — solo contenido bruto, re-embedido localmente en el receptor.
WALWrite-ahead log — wal.jsonl de solo añadido por workspace, usado para reproducción / recuperación de operaciones de memoria.
Zero-shot taggingClasificar chunks por similitud coseno contra prototipos de etiquetas pre-embedidos — sin llamada LLM por chunk.
Dev / stable channelDos canales de release. Dev = prerelease en cada push de dev (vX.Y.Z-dev.N). Stable = release conventional-commit en merges de main (vX.Y.Z).

Benchmarks

Imprint reduce el consumo de tokens de Claude Code al ofrecer resultados de búsqueda semántica enfocados en lugar de requerir lecturas completas de archivos. Medido en 15 prompts en 6 categorías, 5 ejecuciones por prompt por modo, modelo principal Sonnet.

CategoríaPromptsΔ TokensΔ CosteNotas
Debugging2−94.2%−68.3%Imprint responde desde patrones indexados de modos de fallo en lugar de leer la base de código
Cross-project recall2−90.6%−46.9%Patrones que abarcan múltiples proyectos indexados — imposible sin memoria
Architecture Q&A5−87.2%−42.6%Preguntas como «¿cómo funciona el chunking?» respondidas desde la búsqueda semántica
Decision recall2−78.8%−46.1%Preguntas de por-qué-hicimos-X respondidas desde decisiones almacenadas
Tareas de creación3+9.9%+15.1%Casi paridad — la generación de código aún necesita contexto de la base de código
Resumen de sesión1+179.6%+204.1%Valor atípico: prompt único, ON se lanzó a explorar el grafo
General15−70.4% (10.28M → 3.05M)−31.7% ($2.84 → $1.94)

Los números son la mediana por prompt, sumados entre categorías. Consulta BENCHMARK.md para tablas por prompt, desglose por modelo, análisis de calidad de respuesta y las flags exactas usadas.

Reproduce: bash benchmark/run.sh (suite completa, ~$15–25) o bash benchmark/run.sh --subset (un prompt por categoría, ~$6–10).

Roadmap

  • Copia de seguridad automática local
  • Instancia Qdrant externa en lugar de la base de datos local
  • Copia de seguridad/Sincronización con otro servidor de instancia remota Qdrant
  • Capacidad de ingesta de documentos (pdf, doc, odt, ...etc)
  • Capacidad de ingesta de video / audio
  • Capacidad de ingesta de URLs

Licencia

Imprint está licenciado bajo la Apache License 2.0.

Las dependencias de terceros conservan sus propias licencias — consulta THIRD_PARTY_LICENSES.md para la tabla completa. Modelo de incrustación predeterminado (EmbeddingGemma-300M) se rige por los Términos de uso de Gemma y la Política de uso prohibidono Apache 2.0. Imprint no incluye pesos; se descargan en tiempo de ejecución desde HuggingFace, donde aceptas los términos de Gemma. Cambia a un modelo con otra licencia (p. ej., BGE-M3, MIT) mediante imprint config set model.name <repo>.

Contacto

¿Preguntas, comentarios o informes de errores? Ponte en contacto:

X / Twitter GitHub Issues