ImprintMCP

Memória Vetorial MCP com Atualização Automática

Documentação

Imprint

Imprint

Memória persistente para ferramentas de codificação com IA. 100% local. Custo zero de API.

Dê ao Claude Code, Cursor, Codex CLI, Copilot e Cline uma memória de longo prazo.
Pare de reexplicar sua base de código a cada sessão.

imprintmcp.alexandruleca.com →

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


Imprint UI

Por que Imprint

  • Lembra o que sua IA esquece. Decisões, padrões, correções de bugs e escolhas arquiteturais persistem entre sessões — pesquisados semanticamente, não por grep.
  • −70,4% de tokens, −31,7% de custo. Medido em 150 execuções no Claude Code (Sonnet). Sua IA pesquisa a memória em vez de reler arquivos. Veja BENCHMARK.md para os números brutos.
  • Funciona 100% localmente por padrão. EmbeddingGemma-300M via ONNX, banco vetorial Qdrant, chunking Chonkie — tudo na sua máquina. Nenhum crédito de API é consumido, a menos que você opte por isso.
  • Um comando, qualquer host. Integra-se ao Claude Code, Cursor, Codex CLI, Copilot ou Cline via MCP. A mesma memória, compartilhada entre ferramentas.

Funciona 100% localmente. Zero créditos de API consumidos por padrão. Tudo, desde embeddings, chunking, marcação, busca vetorial e o grafo de conhecimento — roda na sua máquina:

  • Embeddings: EmbeddingGemma-300M via ONNX Runtime (GPU ou CPU), sem chamadas de rede, sem custo por token.
  • Armazenamento vetorial: Qdrant iniciado automaticamente como um daemon local em 127.0.0.1:6333. Seus dados nunca saem da máquina, a menos que você os sincronize com outro dispositivo.
  • Chunking: Chonkie híbrido (tree-sitter CodeChunker + SemanticChunker), Python puro, local.
  • Marcação: regras determinísticas + similaridade de cosseno zero-shot contra rótulos pré-incorporados. Chamada LLM local por chunk, se você quiser.
  • Grafo Imprint: SQLite em disco para fatos temporais.

O fluxo de ingestão: escanear diretório → detectar projeto → dividir arquivos em chunks → incorporar chunks → marcar (linguagem/camada/tipo/domínio/tópicos) → upsert no Qdrant. Um hook Stop extrai automaticamente decisões de transcrições do Claude; um hook PreCompact salva o contexto antes da compressão da janela. A busca vai direto ao banco vetorial local — sem ida e volta a nenhum provedor.

Marcação opcional com LLM em nuvem é somente opt-in (imprint config set tagger.llm true) se você quiser tópicos mais granulares e não se importar em gastar créditos. Provedores: Anthropic, OpenAI, Gemini ou Ollama/vLLM totalmente locais. Deixe desativado e nada nunca falará com uma API paga.

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

Instalação 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

Fixar uma versão específica, escolher o canal de desenvolvimento ou usar imagens Docker pré-construídas — veja docs/installation.md.

Atualização

Depois de instalado, use o atualizador integrado — sem curl, sem sudo. data/ (workspaces, armazenamento Qdrant, grafos SQLite, configuração, gpu_state.json) e .venv/ são sempre preservados; apenas a árvore de código é substituída.

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)

Reexecutar install.sh também funciona e agora pergunta antes de sobrescrever uma instalação existente. Para atualizações não interativas, passe --yes ou defina IMPRINT_ASSUME_YES=1.

Se a configuração de GPU falhar uma vez (por exemplo, Blackwell + nvcc antigo ou incompatibilidade de runtime CUDA), a falha é lembrada em data/gpu_state.json para que futuras execuções de imprint setup ignorem o caminho quebrado silenciosamente. Depois de atualizar o toolchain, force uma nova tentativa com:

imprint setup --retry-gpu

Hosts suportados

imprint setup <target> conecta automaticamente o servidor MCP a cada ferramenta de codificação com IA suportada. Execute imprint setup all para configurar todos os hosts instalados na sua máquina; ferramentas ausentes são ignoradas com um aviso, não um erro.

AlvoConectado emArquivo de configuraçãoAplicação
claude-codeClaude Code CLI (MCP + hooks + CLAUDE.md global)~/.claude/settings.json + MCP registrado via claude mcp addRígida (PreToolUse)
cursorCursor IDE (MCP + regra sempre ativa)~/.cursor/mcp.json + ~/.cursor/rules/imprint.mdcSomente texto (regra)
codexOpenAI Codex CLI~/.codex/config.toml ([mcp_servers.imprint])Somente texto
copilotGitHub Copilot (modo agente VSCode), global do usuário<VSCode user>/mcp.json (servers.imprint)Somente texto
clineCline — extensão VSCode + CLI independente<VSCode user>/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json e/ou ~/.cline/data/settings/cline_mcp_settings.jsonSomente texto

imprint disable é simétrico — ele remove a entrada MCP de cada arquivo de configuração acima que ainda existir (o venv e os dados são sempre preservados para que a reativação seja rápida).

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

Documentação

TópicoArquivo
Instalação, versionamento, canais, Dockerdocs/installation.md
Componentes, fluxo de dados, daemon Qdrant, ciclo de vidadocs/architecture.md
Pipeline de embeddings + aceleração de GPUdocs/embeddings.md
Estratégia de chunking + ajustesdocs/chunking.md
Tags de metadados, provedores LLM, filtros de buscadocs/tagging.md
Workspaces + detecção de projetosdocs/workspaces.md
Ferramentas MCP + atualizações automáticasdocs/mcp.md
Sincronização entre pares, servidor relay, paineldocs/sync.md
Fila de comandos + cancelamentodocs/queue.md
Todas as configurações (imprint config)docs/configuration.md
Compilação a partir do código-fonte + fluxo CI/releasedocs/building.md
Benchmarks e economia de tokensBENCHMARK.md

Glossário

Termos usados em toda a documentação.

TermoDefinição
ChunkUma unidade de texto sub-arquivo (uma função, classe, seção de markdown, turno de conversa) que recebe seu próprio vetor de embedding. Produzido pelo chunker.
EmbeddingVetor numérico denso (padrão 768-dimensões) que representa o significado semântico de um chunk. Significados semelhantes → vetores próximos.
QdrantO banco de dados vetorial que armazena embeddings + payloads. Executa como um daemon local iniciado automaticamente em 127.0.0.1:6333.
ColeçãoTermo do Qdrant para um conjunto nomeado de vetores. Cada workspace tem sua própria coleção (por exemplo, memories, memories_research).
WorkspaceAmbiente de memória isolado — coleção Qdrant dedicada + banco SQLite + WAL. Permite separar memórias de pesquisa/staging/produção.
Grafo ImprintArmazenamento de fatos temporais (SQLite) para fatos estruturados subject → predicate → object com carimbos de data/hora valid_from / ended.
MCPModel Context Protocol — o protocolo aberto que o Claude Code usa para chamar ferramentas externas. O Imprint inclui um servidor MCP com 12 ferramentas — veja docs/mcp.md.
ProjetoUma base de código identificada por um nome canônico a partir de seu manifesto (package.json, go.mod, etc.). Projetos recebem a mesma identidade entre máquinas, mesmo que os caminhos difiram.
CamadaTag derivada do caminho: api, ui, tests, infra, config, migrations, docs, scripts, cli.
TipoTag derivada do nome do arquivo: source, test, migration, readme, types, module, qa, auto-extract.
DomínioTag derivada do conteúdo por regex de palavras-chave: auth, db, api, math, rendering, ui, testing, infra, ml, perf, security, build, payments.
TópicosTags de forma livre de similaridade de cosseno zero-shot ou (opt-in) classificação por LLM — mais granulares que domain.
IngestãoEscanear um diretório, detectar projetos, dividir arquivos em chunks, incorporar chunks, marcar e fazer upsert no Qdrant.
AtualizaçãoRe-ingestão incremental — apenas redivide e reincorpora arquivos cujo mtime mudou desde a última execução.
FilaFIFO de slot único (data/queue.sqlite3 + data/queue.lock) que serializa ingest/refresh/retag/ingest-url para que execuções paralelas não estourem a memória da máquina. A interface em /queue lista ativos + enfileirados + histórico; o cancelamento propaga SIGTERM→SIGKILL ao grupo de processos do subprocesso, então chamadas de marcação LLM em andamento morrem junto. Veja docs/queue.md.
Auto-extraçãoHook Stop que analisa transcrições de conversa após cada resposta do Claude e armazena trocas de Q+A + declarações semelhantes a decisões.
Hook PreCompactHook síncrono que dispara antes da compressão da janela de contexto do Claude — instrui o Claude a salvar contexto importante via ferramentas MCP primeiro.
Servidor relayEncaminhador WebSocket sem estado (imprint relay) que intermedia a sincronização entre pares entre duas máquinas. Nenhum vetor cruza a rede — apenas conteúdo bruto, reincorporado localmente no receptor.
WALWrite-ahead log — wal.jsonl somente anexação por workspace, usado para replay/recuperação de operações de memória.
Marcação zero-shotClassificar chunks por similaridade de cosseno contra protótipos de rótulos pré-incorporados — sem chamada LLM por chunk.
Canal dev / estávelDuas trilhas de release. Dev = pré-lançamento a cada push dev (vX.Y.Z-dev.N). Estável = release de commit convencional em merges main (vX.Y.Z).

Benchmarks

O Imprint reduz o consumo de tokens do Claude Code ao fornecer resultados de busca semântica focados em vez de exigir leituras completas de arquivos. Medido em 15 prompts em 6 categorias, 5 execuções por prompt por modo, modelo principal Sonnet.

CategoriaPromptsΔ TokensΔ CustoNotas
Depuração2−94,2%−68,3%O Imprint responde a partir de padrões de modos de falha indexados em vez de ler a base de código
Recuperação entre projetos2−90,6%−46,9%Padrões que abrangem múltiplos projetos indexados — impossível sem memória
Perguntas e respostas de arquitetura5−87,2%−42,6%Perguntas como "como funciona o chunking?" respondidas a partir de busca semântica
Recuperação de decisões2−78,8%−46,1%Perguntas de por-que-fizemos-X respondidas a partir de decisões armazenadas
Tarefas de criação3+9,9%+15,1%Quase paridade — geração de código ainda precisa do contexto da base de código
Resumo de sessão1+179,6%+204,1%Valor atípico: prompt único, ON entrou em um surto de exploração de grafo
Geral15−70,4% (10,28M → 3,05M)−31,7% ($2,84 → $1,94)

Os números são medianas por prompt, somadas entre categorias. Veja BENCHMARK.md para tabelas por prompt, detalhamento por modelo, análise de qualidade de resposta e as flags exatas usadas.

Reproduzir: bash benchmark/run.sh (suíte completa, ~$15–25) ou bash benchmark/run.sh --subset (um prompt por categoria, ~$6–10).

Roadmap

  • Backup automático local
  • Instância Qdrant externa em vez de banco local
  • Backup/Sincronização para outro servidor remoto Qdrant
  • Capacidade de ingestão de documentos (pdf, doc, odt, ...etc)
  • Capacidade de ingestão de vídeo / áudio
  • Capacidade de ingestão de URL

Licença

O Imprint é licenciado sob a Apache License 2.0.

Dependências de terceiros mantêm suas próprias licenças — veja THIRD_PARTY_LICENSES.md para a tabela completa. Modelo de incorporação padrão (EmbeddingGemma-300M) é regido pelos Termos de Uso do Gemma e pela Política de Uso Proibido — não Apache 2.0. O Imprint não inclui pesos; eles são baixados em tempo de execução do HuggingFace, onde você aceita os termos do Gemma. Mude para um modelo com licença diferente (por exemplo, BGE-M3, MIT) via imprint config set model.name <repo>.

Contato

Dúvidas, feedback ou relatórios de bugs? Entre em contato:

X / Twitter GitHub Issues