PAMPA
Um servidor MCP para busca semântica inteligente e aprendizado automático em bases de código, permitindo que agentes de IA consultem e indexem artefatos de projetos de forma eficiente.
Documentação
PAMPA – Protocolo para Memória Aumentada de Artefatos de Projeto
Versão 1.12.x · Busca Semântica · Compatível com MCP · Node.js
Dê aos seus agentes de IA uma memória sempre atualizada e consultável de qualquer base de código – com busca semântica inteligente e aprendizado automático – em um único comando npx.
🇪🇸 Versión en Español | 🇺🇸 English Version | 🤖 Agent Version
🌟 Novidades na v1.12 – Busca Avançada e Suporte a Múltiplos Projetos
🎯 Filtros de Busca Escopados – Filtre por path_glob, tags, lang para resultados precisos
🔄 Busca Híbrida – Fusão BM25 + Vetores com combinação de classificação recíproca (ativada por padrão)
🧠 Re-Classificador Cross-Encoder – Re-classificador Transformers.js para ganhos de precisão
👀 Observador de Arquivos – Indexação incremental em tempo real com hash estilo Merkle
📦 Pacotes de Contexto – Escopos de busca reutilizáveis com integração CLI + MCP
🛠️ CLI Multi-Projeto – Aliases --project e --directory para clareza
🏆 Análise de Desempenho – Comparação arquitetural com ferramentas IDE de propósito geral
Principais melhorias:
- Indexação 40% mais rápida com atualizações incrementais
- Precisão 60% melhor com busca híbrida + re-classificador
- Operações multi-projeto 3x mais rápidas com caminhos explícitos
- Redução de 90% na duplicação de criação de funções com reforço de símbolos
- Arquitetura especializada para busca semântica de código
🌟 Por que PAMPA?
Agentes de modelos de linguagem de grande escala podem ler milhares de tokens, mas projetos facilmente alcançam milhões de caracteres. Sem uma camada inteligente de recuperação, os agentes:
- Recriam funções que já existem
- Nomeiam APIs incorretamente (newUser vs. createUser)
- Desperdiçam tokens carregando código repetitivo (
vendor/,node_modules/...) - Falham quando o repositório cresce
O PAMPA resolve isso transformando seu repositório em um grafo de memória semântica de código:
- Fragmentação – Cada função/classe torna-se um fragmento atômico
- Marcação Semântica – Extração automática de tags semânticas do contexto do código
- Incorporação – Fragmentos aprimorados são vetorizados com modelos avançados de incorporação
- Aprendizado – O sistema aprende com buscas bem-sucedidas e armazena intenções em cache
- Indexação – Vetores + metadados semânticos ficam no SQLite local
- Mapa de Código – Um
pampa.codemap.jsonleve é commitado no git para que o contexto acompanhe o repositório - Serviço – Um servidor MCP expõe ferramentas inteligentes de busca e recuperação
Qualquer agente compatível com MCP (Cursor, Claude, etc.) agora pode buscar com linguagem natural, obter respostas instantâneas para padrões aprendidos e permanecer sincronizado – sem escanear toda a árvore.
🤖 Para Agentes de IA e Humanos
🤖 Se você é um agente de IA: Leia o guia de configuração completo para agentes → ou 👤 Se você é humano: Compartilhe o guia de configuração para agentes com seu assistente de IA para configurar o PAMPA automaticamente!
📚 Sumário
- 🚀 Instalação MCP (Recomendada)
- 🧠 Recursos Semânticos
- 📝 Linguagens Suportadas
- 💻 Uso Direto via CLI
- 🧠 Provedores de Incorporação
- 🏆 Benchmark de Desempenho
- 🏗️ Arquitetura
- 🔧 Ferramentas MCP Disponíveis
- 📊 Recursos MCP Disponíveis
- 🎯 Prompts MCP Disponíveis
🧠 Recursos Semânticos
🏷️ Marcação Semântica Automática
O PAMPA extrai automaticamente tags semânticas do seu código sem nenhum comentário especial:
// File: app/Services/Payment/StripeService.php
function createCheckoutSession() { ... }
Tags automáticas: ["stripe", "service", "payment", "checkout", "session", "create"]
🎯 Busca Direta Baseada em Intenção
O sistema aprende com buscas bem-sucedidas e fornece respostas instantâneas:
# First search (vector search)
"stripe payment session" → 0.9148 similarity
# System automatically learns and caches this pattern
# Next similar searches are instant:
"create stripe session" → instant response (cached)
"stripe checkout session" → instant response (cached)
📈 Sistema de Aprendizado Adaptativo
- Aprendizado Automático: Salva buscas bem-sucedidas (similaridade >80%) como intenções
- Normalização de Consultas: Entende variações:
"create"="crear","session"="sesion" - Reconhecimento de Padrões: Agrupa consultas semelhantes:
"[PROVIDER] payment session"
🏷️ Comentários @pampa Opcionais (Complementares)
Aprimore a precisão da busca com comentários opcionais no estilo JSDoc:
/**
* @pampa-tags: stripe-checkout, payment-processing, e-commerce-integration
* @pampa-intent: create secure stripe checkout session for payments
* @pampa-description: Main function for handling checkout sessions with validation
*/
async function createStripeCheckoutSession(sessionData) {
// Your code here...
}
Benefícios:
- +21% de precisão quando presentes
- Pontuações perfeitas (1.0) quando a consulta corresponde exatamente à intenção
- Totalmente opcionais: Código sem comentários funciona automaticamente
- Retrocompatíveis: Bases de código existentes funcionam sem alterações
📊 Resultados de Desempenho da Busca
| Tipo de Busca | Sem @pampa | Com @pampa | Melhoria |
|---|---|---|---|
| Específica de domínio | 0.7331 | 0.8874 | +21% |
| Correspondência de intenção | ~0.6 | 1.0000 | +67% |
| Busca geral | 0.6-0.8 | 0.8-1.0 | +32-85% |
📝 Linguagens Suportadas
O PAMPA pode indexar e buscar código em várias linguagens prontamente:
- JavaScript / TypeScript (
.js,.ts,.tsx,.jsx) - PHP (
.php) - Python (
.py) - Go (
.go) - Java (
.java)
🚀 Instalação MCP (Recomendada)
1. Configure seu cliente MCP
Claude Desktop
Adicione à configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json no macOS):
{
"mcpServers": {
"pampa": {
"command": "npx",
"args": ["-y", "pampa", "mcp"]
}
}
}
Opcional: Adicione "--debug" aos argumentos para registro detalhado: ["-y", "pampa", "mcp", "--debug"]
Cursor
Configure o Cursor criando ou editando o arquivo mcp.json no seu diretório de configuração:
{
"mcpServers": {
"pampa": {
"command": "npx",
"args": ["-y", "pampa", "mcp"]
}
}
}
2. Deixe seu agente de IA lidar com a indexação
Seu agente de IA deve automaticamente:
- Verificar se o projeto está indexado com
get_project_stats - Indexar o projeto com
index_projectse necessário - Mantê-lo atualizado com
update_projectapós alterações
Precisa indexar manualmente? Veja a seção Uso Direto via CLI.
3. Instale a regra de uso para seu agente
Adicionalmente, instale esta regra no seu aplicativo para que ele use o PAMPA efetivamente:
Copie o conteúdo de RULE_FOR_PAMPA_MCP.md para as instruções do seu agente ou sistema de IA.
4. Pronto! Seu agente agora pode buscar código
Uma vez configurado, seu agente de IA pode:
🔍 Search: "authentication function"
📄 Get code: Use the SHA from search results
📊 Stats: Get project overview and statistics
🔄 Update: Keep memory synchronized
💻 Uso Direto via CLI
Para uso direto no terminal ou indexação manual de projetos:
Instale a CLI
# Run without installing
npx pampa --help
# Or install globally (requires Node.js 20+)
npm install -g pampa
Indexe ou atualize um projeto
# Index current repository with the best available provider
npx pampa index
# Force the local CPU embedding model (no API keys required)
npx pampa index --provider transformers
# Re-embed after code changes
npx pampa update
# Inspect indexed stats at any time
npx pampa info
A indexação grava
.pampa/(banco de dados SQLite + armazenamento de fragmentos) epampa.codemap.json. Faça commit do mapa de código no git para que colegas e CI reutilizem os mesmos metadados.
| Comando | Propósito |
| ---------------------------------------- | --------------------------------------------------------- | ----- | ------------------------------------------------- |
| npx pampa index [path] [--provider X] | Criar ou atualizar o índice completo no caminho fornecido |
| npx pampa update [path] [--provider X] | Forçar uma re-varredura completa (útil após grandes refatorações) |
| npx pampa watch [path] [--provider X] | Atualizar incrementalmente o índice conforme os arquivos mudam |
| npx pampa search <query> | Busca híbrida BM25 + vetores com filtros escopados opcionais |
| npx pampa context <list | show | use> | Gerenciar pacotes de contexto reutilizáveis para padrões de busca |
| npx pampa mcp | Iniciar o servidor MCP stdio para integrações com editores/agentes |
Busque com filtros escopados e flags de classificação
pampa search suporta os mesmos filtros usados pelos clientes MCP. Combine padrões glob, tags semânticas, filtros de linguagem, substituições de provedor e controles de classificação:
| Flag / opção | Efeito |
| -------------------- | -------------------------------------------------------------------- | ---------------- |
| --path_glob | Limitar resultados a arquivos correspondentes ("app/Services/**") |
| --tags | Filtrar por tags do mapa de código (stripe, checkout) |
| --lang | Filtrar por linguagem (php, ts, py) |
| --provider | Substituir o provedor de incorporação para a consulta (openai, transformers) |
| --reranker | Reordenar os principais resultados com o cross-encoder Transformers (off | transformers) |
| --hybrid / --bm25 | Alternar fusão de classificação recíproca ou o estágio candidato BM25 (on | off) |
| --symbol_boost | Alternar o reforço de classificação ciente de símbolos que favorece correspondências de assinatura (on | off) |
| -k, --limit | Limitar resultados retornados (padrão: 10) |
# Narrow to service files tagged stripe in PHP
npx pampa search "create checkout session" --path_glob "app/Services/**" --tags stripe --lang php
# Use OpenAI embeddings but keep hybrid fusion enabled
npx pampa search "payment intent status" --provider openai --hybrid on --bm25 on
# Reorder top candidates locally
npx pampa search "oauth middleware" --reranker transformers --limit 5
# Disable signature boosts for literal keyword hunts
npx pampa search "token validation" --symbol_boost off
O PAMPA extrai assinaturas de funções e grafos de chamada leves com tree-sitter. Quando os reforços de símbolos estão ativados, consultas que mencionam um método, classe ou um auxiliar diretamente conectado recebem um aumento extra de pontuação.
Quando um pacote de contexto está ativo, a CLI imprime o nome do pacote antes de executar a busca. Qualquer flag explícita substitui os padrões do pacote.
Gerencie pacotes de contexto
Armazene pacotes JSON em .pampa/contextpacks/*.json para capturar padrões reutilizáveis:
// .pampa/contextpacks/stripe-backend.json
{
"name": "Stripe Backend",
"description": "Scopes searches to the Stripe service layer",
"path_glob": ["app/Services/**"],
"tags": ["stripe"],
"lang": ["php"],
"reranker": "transformers",
"hybrid": "off"
}
# List packs and highlight the active one
npx pampa context list
# Inspect the full JSON definition
npx pampa context show stripe-backend
# Activate scoped defaults (flags still win if provided explicitly)
npx pampa context use stripe-backend
# Clear the active pack (use "none" or "clear")
npx pampa context use clear
Dica MCP: A ferramenta MCP use_context_pack espelha a CLI. Agentes podem alternar pacotes no meio da sessão e toda chamada subsequente de search_code herda esses padrões até serem limpos.
Observe e re-indexe incrementalmente
# Watch the repository with a 750 ms debounce and local embeddings
npx pampa watch --provider transformers --debounce 750
O observador agrupa eventos do sistema de arquivos, reutiliza o armazenamento de hash Merkle em .pampa/merkle.json e apenas re-incorpora arquivos modificados. Pressione Ctrl+C para parar.
Execute o harness de benchmark sintético
npm run bench
O harness semeia um corpus determinístico Laravel + TypeScript e imprime uma tabela resumo com Precision@1, MRR@5 e nDCG@10 para os modos Base, Híbrido e Híbrido+Cross-Encoder. Personalize cenários via flags ou variáveis de ambiente:
npm run bench -- --hybrid=off– executar avaliação apenas vetorialnpm run bench -- --reranker=transformers– forçar o cross-encoderPAMPA_BENCH_MODES=base,hybrid npm run bench– limitar a modos específicosPAMPA_BENCH_BM25=off npm run bench– desabilitar geração de candidatos BM25
Execuções de benchmark nunca baixam modelos externos quando PAMPA_MOCK_RERANKER_TESTS=1 (ativado por padrão dentro do harness).
Um exemplo completo de pacote de contexto ponta a ponta está em examples/contextpacks/stripe-backend.json.
🧠 Provedores de Incorporação
O PAMPA suporta múltiplos provedores para gerar incorporações de código:
| Provedor | Custo | Privacidade | Instalação |
|---|---|---|---|
| Transformers.js | 🟢 Gratuito | 🟢 Total | npm install @xenova/transformers |
| Ollama | 🟢 Gratuito | 🟢 Total | Instalar Ollama + npm install ollama |
| OpenAI | 🔴 ~$0.10/1000 funções | 🔴 Nenhuma | Defina OPENAI_API_KEY |
| Cohere | 🟡 ~$0.05/1000 funções | 🔴 Nenhuma | Defina COHERE_API_KEY + npm install cohere-ai |
Recomendação: Use Transformers.js para desenvolvimento pessoal (gratuito e privado) ou OpenAI para máxima qualidade.
🏆 Análise de Desempenho
O PAMPA v1.12 usa uma arquitetura especializada para busca semântica de código com resultados mensuráveis.
📊 Métricas de Desempenho
Resultados do Benchmark Sintético:
| Setting | P@1 | MRR@5 | nDCG@10 |
| ---------- | ----- | ----- | ------- |
| Base | 0.750 | 0.833 | 0.863 |
| Hybrid | 0.875 | 0.917 | 0.934 |
| Hybrid+CE | 1.000 | 0.958 | 0.967 |
🎯 Exemplos de Busca
# Search for authentication functions
pampa search "user authentication"
→ AuthController::login, UserService::authenticate, etc.
# Search for payment processing
pampa search "payment processing"
→ PaymentService::process, CheckoutController::create, etc.
# Search with specific filters
pampa search "database operations" --lang php --path_glob "app/Models/**"
→ UserModel::save, OrderModel::find, etc.
🚀 Vantagens Arquiteturais
- Indexação Especializada - Índice persistente com granularidade em nível de função
- Busca Híbrida - Combinação de BM25 + Vetor + reclassificação por cross-encoder
- Consciência de Código - Reforço de símbolos, análise AST, assinaturas de funções
- Multi-Projeto - Suporte nativo para contexto entre diferentes bases de código
Resultado: Arquitetura otimizada para busca semântica de código com métricas verificáveis.
🏗️ Arquitetura
┌──────────── Repo (git) ─────────-──┐
│ app/… src/… package.json etc. │
│ pampa.codemap.json │
│ .pampa/chunks/*.gz(.enc) │
│ .pampa/pampa.db (SQLite) │
└────────────────────────────────────┘
▲ ▲
│ write │ read
┌─────────┴─────────┐ │
│ indexer.js │ │
│ (pampa index) │ │
└─────────▲─────────┘ │
│ store │ vector query
┌─────────┴──────────┐ │ gz fetch
│ SQLite (local) │ │
└─────────▲──────────┘ │
│ read │
┌─────────┴──────────┐ │
│ mcp-server.js │◄─┘
│ (pampa mcp) │
└────────────────────┘
Componentes Principais
| Camada | Função | Tecnologia |
|---|---|---|
| Indexador | Divide o código em blocos semânticos, gera embeddings, escreve codemap e SQLite | tree-sitter, openai@v4, sqlite3 |
| Codemap | JSON amigável ao Git com {file, symbol, sha, lang} por bloco | Plain JSON |
| Diretório de blocos | Corpos de código .gz (ou .gz.enc quando criptografado) (carregamento preguiçoso) | gzip → AES-256-GCM quando habilitado |
| SQLite | Armazena vetores e metadados | sqlite3 |
| Servidor MCP | Expõe ferramentas e recursos sobre o protocolo MCP padrão | @modelcontextprotocol/sdk |
| Registro | Registro de depuração e erros no diretório do projeto | Logs baseados em arquivo |
🔧 Ferramentas MCP Disponíveis
O servidor MCP expõe estas ferramentas que os agentes podem usar:
search_code
Busque código semanticamente no projeto indexado.
- Parâmetros:
query(string) - Consulta de busca semântica (ex.: "função de autenticação", "tratamento de erros")limit(número, opcional) - Número máximo de resultados a retornar (padrão: 10)provider(string, opcional) - Provedor de embeddings (padrão: "auto")path(string, opcional) - Caminho do diretório PROJECT ROOT onde o banco de dados PAMPA está localizado
- Localização do Banco de Dados:
{path}/.pampa/pampa.db - Retorna: Lista de blocos de código correspondentes com pontuações de similaridade e SHAs
get_code_chunk
Obtenha o código completo de um bloco específico.
- Parâmetros:
sha(string) - SHA do bloco de código a recuperar (obtido dos resultados de search_code)path(string, opcional) - Caminho do diretório PROJECT ROOT (mesmo usado em search_code)
- Localização do Bloco:
{path}/.pampa/chunks/{sha}.gzou{sha}.gz.enc - Retorna: Código-fonte completo
index_project
Indexe um projeto a partir do agente.
- Parâmetros:
path(string, opcional) - Caminho do diretório PROJECT ROOT para indexar (criará o subdiretório .pampa/ aqui)provider(string, opcional) - Provedor de embeddings (padrão: "auto")
- Cria:
{path}/.pampa/pampa.db(banco de dados SQLite com embeddings){path}/.pampa/chunks/(blocos de código comprimidos){path}/pampa.codemap.json(índice leve para controle de versão)
- Efeito: Atualiza o banco de dados e o codemap
update_project
🔄 CRÍTICO: Use esta ferramenta com frequência para manter sua memória de IA atualizada!
Atualize o índice do projeto após alterações de código (ferramenta de fluxo de trabalho recomendada).
- Parâmetros:
path(string, opcional) - Caminho do diretório PROJECT ROOT para atualizar (mesmo usado em index_project)provider(string, opcional) - Provedor de embeddings (padrão: "auto")
- Atualiza:
- Re-verifica todos os arquivos em busca de alterações
- Atualiza embeddings para funções modificadas
- Remove funções excluídas do banco de dados
- Adiciona novas funções ao banco de dados
- Quando usar:
- ✅ No início das sessões de desenvolvimento
- ✅ Após criar novas funções
- ✅ Após modificar funções existentes
- ✅ Após excluir funções
- ✅ Antes de tarefas importantes de análise de código
- ✅ Após refatorar código
- Efeito: Mantém a memória de código do seu agente de IA sincronizada com o estado atual
get_project_stats
Obtenha estatísticas do projeto indexado.
- Parâmetros:
path(string, opcional) - Caminho do diretório PROJECT ROOT onde o banco de dados PAMPA está localizado
- Localização do Banco de Dados:
{path}/.pampa/pampa.db - Retorna: Estatísticas por linguagem e arquivo
📊 Recursos MCP Disponíveis
pampa://codemap
Acesso ao mapa de código completo do projeto.
pampa://overview
Resumo das principais funções do projeto.
🎯 Prompts MCP Disponíveis
analyze_code
Modelo para analisar código encontrado com foco específico.
find_similar_functions
Modelo para encontrar funções semelhantes existentes.
🔍 Como Funciona a Recuperação
- Busca vetorial – Similaridade de cosseno com embeddings avançados de alta dimensão
- Fallback de resumo – Se um agente enviar uma consulta vazia, o PAMPA retorna resumos de alto nível para que o agente entenda o território
- Granularidade de bloco – Padrão = função/método/classe. Ajustável por linguagem
📝 Decisões de Design
- Somente Node → Desenvolvedores executam tudo via
npx, sem Python, sem Docker - SQLite em vez de HelixDB → Um banco de dados local para vetores e relações, sem dependências externas
- Codemap versionado → O contexto viaja com o repositório → clonagem funciona offline
- Granularidade de bloco → Padrão = função/método/classe. Ajustável por linguagem
- Somente leitura por padrão → O servidor expõe apenas métodos de leitura. A escrita é feita via CLI
🧩 Estendendo o PAMPA
| Ideia | Dica |
|---|---|
| Mais linguagens | Instale a gramática tree-sitter e adicione-a a LANG_RULES |
| Embeddings personalizados | Exporte OPENAI_API_KEY ou troque OpenAI por qualquer provedor que retorne vector: number[] |
| Segurança | Execute atrás de um proxy reverso com autenticação |
| Plugin VS Code | Aponte um cliente MCP WebView para o seu servidor local |
🔐 Criptografando o Armazenamento de Blocos
O PAMPA pode criptografar corpos de blocos em repouso usando AES-256-GCM. Configure assim:
-
Exporte uma chave de 32 bytes em formato base64 ou hexadecimal:
export PAMPA_ENCRYPTION_KEY="$(openssl rand -base64 32)" -
Indexe com criptografia habilitada (ignora gravações em texto simples mesmo se arquivos obsoletos existirem):
npx pampa index --encrypt onSem
--encrypt, o PAMPA criptografa automaticamente quando a chave de ambiente está presente. Use--encrypt offpara forçar texto simples (ex.: para depuração). -
Todos os novos blocos são armazenados como
.gz.ence exigem a mesma chave para recuperação de blocos via CLI ou MCP. Chaves ausentes ou corrompidas geram erros claros em vez de vazar dados.
Arquivos de texto simples existentes permanecem legíveis, então você pode habilitar a criptografia incrementalmente ou rotacionar chaves reindexando.
🤝 Contribuindo
- Fork → crie um branch de recurso (
feat/...) - Execute
npm test(em breve) enpx pampa indexantes do PR - Abra um PR com contexto: porquê + capturas de tela/logs
Todas as discussões em GitHub Issues.
📜 Licença
MIT – faça o que quiser, apenas mantenha os direitos autorais.
Feliz hacking! 💙
🇦🇷 Feito com ❤️ na Argentina | 🇦🇷 Hecho con ❤️ en Argentina