Srclight
Indexação profunda de código para agentes de IA — 25 ferramentas MCP: busca híbrida FTS5 + embeddings, grafos de chamada, git blame/hotspots, análise de sistema de build. Workspaces multi-repositório, busca semântica acelerada por GPU, 10 linguagens. Totalmente local, zero dependências de nuvem.
Documentação
Srclight
Indexação profunda de código para agentes de IA. SQLite FTS5 + tree-sitter + embeddings + MCP.
O Srclight constrói um índice rico e pesquisável do seu código que agentes de codificação com IA podem consultar instantaneamente — substituindo dezenas de chamadas grep/glob por buscas precisas e estruturadas. É o servidor MCP de inteligência de código mais abrangente disponível: 42 ferramentas que cobrem busca de símbolos, grafos de relacionamento, detecção de comunidades, análise de impacto, inteligência de mudanças git, busca semântica, conhecimento do sistema de build e extração de documentos — capacidades que nenhum outro servidor MCP combina. Totalmente local e privado: seu código nunca sai da sua máquina.
Por quê?
Agentes de codificação com IA (Claude Code, Cursor, etc.) gastam 40-60% dos seus tokens em orientação — procurando arquivos, lendo código para entender a estrutura, caçando chamadores e chamados. O Srclight elimina esse desperdício.
| Sem Srclight | Com Srclight |
|---|---|
| 8-12 rodadas de grep para encontrar chamadores | get_callers("lookup") — uma chamada |
| Ler 5 arquivos para entender o módulo | codebase_map() — visão geral instantânea |
| "Encontrar código que faz X" → 20 greps | semantic_search("dictionary lookup") — uma chamada |
| Editar uma função, quebrar 47 chamadores | detect_changes() — mostra o raio de impacto antes de você commitar |
| 15-25 chamadas de ferramentas por correção de bug | 5-8 chamadas de ferramentas por correção de bug |
Recursos
- Dependências mínimas — um único arquivo SQLite por repositório, sem Docker/Redis/banco vetorial
- Totalmente offline — sem chamadas de API, funciona em ambiente isolado (embeddings locais com Ollama)
- Incremental — reindexa apenas arquivos alterados (detecção por hash de conteúdo)
- 11 linguagens — Python, C, C++, C#, JavaScript, TypeScript, PHP, Dart, Swift, Kotlin, Java, Go
- 10 formatos de documento — PDF, DOCX, XLSX, HTML, CSV/TSV, e-mail (.eml), imagens (PNG/JPG/SVG/etc.), texto puro, RST, Markdown
- OCR opcional — PaddleOCR para páginas de PDF escaneadas/somente imagem; pytesseract para imagens
- 4 modos de busca — nomes de símbolos, código-fonte (trigrama), documentação (stemming), semântica (embeddings)
- Busca híbrida — fusão RRF de resultados de palavras-chave + semânticos para máxima precisão
- Workspaces multi-repositório — busque em todos os seus repositórios simultaneamente via SQLite ATTACH+UNION
- Servidor MCP — funciona com Claude Code, Cursor e qualquer cliente MCP
- CLI — indexe, busque e inspecione pelo terminal
- Reindexação automática — hooks git pós-commit/pós-checkout mantêm os índices atualizados
Requisitos
- Python 3.11+
- Git (para inteligência de mudanças e hooks de reindexação automática)
- Ollama (opcional, para busca semântica / embeddings) — ollama.com
- GPU NVIDIA + cupy (opcional, para busca vetorial acelerada por GPU)
- Poppler (opcional, para suporte a PDF escaneado com PaddleOCR) —
apt install poppler-utils/brew install poppler
Início Rápido
# Install from PyPI
pip install srclight
# Install from source
git clone https://github.com/srclight/srclight.git
cd srclight
pip install -e .
# Optional: document format support (PDF, DOCX, XLSX, HTML, images)
pip install 'srclight[docs,pdf]'
# Optional: OCR for scanned PDFs (also needs poppler-utils on your system)
pip install 'srclight[pdf,paddleocr]'
# Optional: OCR for images (needs tesseract on your system)
pip install 'srclight[docs,ocr]'
# Optional: GPU-accelerated vector search (requires CUDA 12.x)
pip install 'srclight[gpu]'
# Everything (docs + pdf + ocr + paddleocr + gpu)
pip install 'srclight[all]'
# Index your project
cd /path/to/your/project
srclight index
# Index with embeddings (requires Ollama running)
srclight index --embed qwen3-embedding
# Search
srclight search "lookup"
srclight search --kind function "parse"
srclight symbols src/main.py
# Start MCP server (for Claude Code / Cursor)
srclight serve
Nota:
srclight indexadiciona automaticamente.srclight/ao seu.gitignore. Bancos de dados de índice e arquivos de embedding podem ser grandes e nunca devem ser commitados.
Busca Semântica (Embeddings)
O Srclight suporta busca semântica baseada em embeddings para consultas em linguagem natural como "encontre código que lida com autenticação" ou "onde está o pool de conexões do banco de dados".
Configuração
# Install Ollama (https://ollama.com)
# Pull an embedding model
ollama pull qwen3-embedding # Best quality (8B params, needs ~6GB VRAM)
ollama pull nomic-embed-text # Lighter alternative (137M params)
# Index with embeddings
srclight index --embed qwen3-embedding
# Or index workspace with embeddings
srclight workspace index -w myworkspace --embed qwen3-embedding
Como Funciona
- O nome + assinatura + docstring + conteúdo de cada símbolo é incorporado como um vetor de ponto flutuante
- Os vetores são armazenados como BLOBs na tabela
symbol_embeddings(SQLite) - Após a indexação, um snapshot sidecar
.npyé construído e carregado na VRAM da GPU (cupy) ou RAM da CPU (numpy) para busca rápida semantic_search(query)incorpora a consulta e executa similaridade de cosseno contra a matriz residente na GPU (~3ms para 27K vetores em uma GPU moderna)hybrid_search(query)combina resultados de palavras-chave FTS5 + resultados de embeddings via Fusão de Rank Recíproco (RRF)
Provedores de Embedding
| Provedor | Modelo | Qualidade | Local? | Notas |
|---|---|---|---|---|
| Ollama (padrão) | qwen3-embedding | Melhor local | Sim | Precisa de ~6GB de VRAM |
| Ollama | nomic-embed-text | Boa | Sim | Mais leve, funciona com 8GB de VRAM |
| Voyage AI (API) | voyage-code-3 | Melhor no geral | Não | Requer VOYAGE_API_KEY |
# Use Voyage Code 3 (API, highest quality)
VOYAGE_API_KEY=your-key srclight index --embed voyage-code-3
Armazenamento
Os embeddings são armazenados na tabela symbol_embeddings em .srclight/index.db. Após a indexação, um snapshot sidecar .npy é construído para carregamento rápido na GPU:
| Arquivo | Propósito |
|---|---|
index.db | Caminho de escrita — CRUD por símbolo durante a indexação |
embeddings.npy | Caminho de leitura — matriz float32 contígua para busca na GPU/CPU |
embeddings_norms.npy | Normas de linha pré-computadas (evita recomputação por consulta) |
embeddings_meta.json | Mapeamento de ID de símbolo, informações do modelo, versão para invalidação de cache |
Para ~27K símbolos com 4096 dimensões (qwen3-embedding), isso é ~428 MB em disco, ~450 MB em VRAM. Incremental: apenas reincorpora símbolos cujo conteúdo mudou; o sidecar é reconstruído após cada execução de indexação.
Workspaces Multi-Repositório
Busque em múltiplos repositórios simultaneamente. Cada repositório mantém seu próprio .srclight/index.db; no momento da consulta, o srclight os ATTACHa todos e faz UNION entre os esquemas.
# Create a workspace
srclight workspace init myworkspace
# Add repos
srclight workspace add /path/to/repo1 -w myworkspace
srclight workspace add /path/to/repo2 -w myworkspace -n custom-name
# Index all repos (with optional embeddings)
srclight workspace index -w myworkspace
srclight workspace index -w myworkspace --embed qwen3-embedding
# Search across all repos
srclight workspace search "Dictionary" -w myworkspace
srclight workspace search "Dictionary" -w myworkspace --project repo1
# Status
srclight workspace status -w myworkspace
srclight workspace list
# Start MCP server in workspace mode
srclight serve --workspace myworkspace
Submódulos Git não são indexados automaticamente — git ls-files não recursa neles. Para indexar um submódulo, clone-o separadamente e adicione-o como um projeto próprio do workspace. Veja docs/usage-guide.md para detalhes.
Integração MCP
O Srclight suporta dois modos de transporte: stdio (um servidor por sessão) e SSE (servidor persistente, múltiplas sessões). SSE é recomendado para workspaces.
Claude Code
Stdio (mais simples — um servidor por sessão):
# Single repo
claude mcp add srclight -- srclight serve
# Workspace mode
claude mcp add srclight -- srclight serve --workspace myworkspace
# Make it available in all projects (user scope)
claude mcp add --scope user srclight -- srclight serve --workspace myworkspace
SSE (servidor persistente — recomendado para workspaces):
Execute o srclight como um servidor de longa duração e aponte o Claude Code para ele:
# Start the server (default: http://127.0.0.1:8742/sse)
srclight serve --workspace myworkspace &
# Or install as a systemd user service (Linux/WSL)
# See docs/usage-guide.md for the service file
# Connect Claude Code to the running server
claude mcp add --transport sse srclight http://127.0.0.1:8742/sse
O modo SSE suporta múltiplas sessões concorrentes e sobrevive a reinicializações do Claude Code.
Cursor
SSE (recomendado): Execute o srclight uma vez e conecte o Cursor a ele. Melhor para responsividade e sem cold-start por sessão.
Inicie o servidor: srclight serve --workspace myworkspace (SSE padrão na porta 8742).
- UI: Configurações → Tools & MCP → Adicionar novo servidor MCP → Tipo:
streamableHttp, URL:http://127.0.0.1:8742/sse. - JSON (projeto
.cursor/mcp.jsonou global~/.cursor/mcp.json):
"srclight": {
"url": "http://127.0.0.1:8742/sse"
}
Stdio (alternativa): Um processo de servidor por sessão do Cursor.
- UI: Tipo:
command, Comando:srclight, Argumentos:serve --workspace myworkspace(ouservepara repositório único). - JSON:
"srclight": {
"command": "srclight",
"args": ["serve", "--workspace", "myworkspace"]
}
Para repositório único: "args": ["serve"]. Reinicie o Cursor completamente após adicionar o servidor.
Verificação: No chat do Cursor, pergunte "Quais projetos estão no workspace do srclight?" ou "Liste as ferramentas do srclight" — o agente deve chamar list_projects() ou mostrar as ferramentas do srclight.
OpenClaw
O OpenClaw conecta-se ao srclight via mcporter, seu CLI de ferramentas de servidor MCP integrado.
# 1. Add srclight to mcporter's home config
mcporter config add srclight http://127.0.0.1:8742/sse \
--transport sse --scope home \
--description "Srclight deep code indexing"
# 2. Verify the connection
mcporter call srclight.list_projects
# 3. Restart the OpenClaw gateway to pick up the new server
systemctl --user restart openclaw-gateway # if using systemd
# or: openclaw daemon restart
O agente OpenClaw pode então usar as ferramentas do srclight via a skill mcporter:
mcporter call srclight.search_symbols query="my_function"
mcporter call srclight.get_callers symbol_name="MyClass" project="my-repo"
mcporter call srclight.hybrid_search query="authentication logic"
Pré-requisito: O Srclight deve estar rodando como servidor SSE (veja acima). O mcporter do OpenClaw conecta-se via HTTP — o modo stdio não é suportado.
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"srclight": {
"command": "srclight",
"args": ["serve", "--workspace", "myworkspace"]
}
}
}
Qualquer Cliente MCP (SSE)
Qualquer cliente compatível com MCP pode conectar-se ao endpoint SSE:
http://127.0.0.1:8742/sse
Ferramentas MCP (42)
O Srclight expõe 42 ferramentas MCP organizadas em sete níveis. O servidor MCP inclui instruções integradas que guiam agentes de IA sobre qual ferramenta usar e quando — os agentes recebem um protocolo de sessão, guia de seleção de ferramentas e documentação de parâmetros project automaticamente na conexão.
Nível 1: Orientação Instantânea
| Ferramenta | O que faz |
|---|---|
codebase_map() | Visão geral completa do projeto — chame primeiro em toda sessão |
search_symbols(query) | Busca em nomes de símbolos, código e documentação |
get_symbol(name) | Código-fonte completo + metadados de um símbolo |
get_signature(name) | Apenas a assinatura (leve) |
symbols_in_file(path) | Sumário de um arquivo |
list_projects() | Todos os projetos no workspace com estatísticas |
Nível 2: Grafo de Relacionamento
| Ferramenta | O que faz |
|---|---|
get_callers(name) | Quem chama este símbolo? |
get_callees(name) | O que este símbolo chama? |
get_dependents(name, transitive) | Raio de impacto — o que quebra se eu mudar isto? |
get_implementors(interface) | Todas as classes que implementam uma interface |
get_tests_for(name) | Funções de teste que cobrem um símbolo |
get_type_hierarchy(name) | Árvore de herança (classes base + subclasses) |
Nível 2b: Análise de Comunidade e Impacto
| Ferramenta | O que faz |
|---|---|
get_communities(project) | Clusters de módulos funcionais auto-detectados (algoritmo de Louvain) |
get_community(name, project) | A qual comunidade um símbolo pertence, com todos os co-membros |
get_execution_flows(project) | Caminhos de execução rastreados de pontos de entrada através do grafo de chamadas |
get_impact(name, project) | Raio de impacto + nível de risco (BAIXO / MÉDIO / ALTO / CRÍTICO) |
detect_changes(project, ref?) | Mapeia git diff para símbolos afetados — raio de impacto agregado das suas edições |
Nível 3: Inteligência de Mudanças Git
| Ferramenta | O que faz |
|---|---|
blame_symbol(name) | Quem mudou isto, quando e por quê |
recent_changes(n) | Feed de commits (entre projetos no workspace) |
git_hotspots(n, since) | Arquivos mais frequentemente alterados (ímãs de bugs) |
whats_changed() | Trabalho não commitado em andamento |
changes_to(name) | Histórico de commits do arquivo de um símbolo |
Nível 4: Build e Configuração
| Ferramenta | O que faz |
|---|---|
get_build_targets() | Alvos CMake/.csproj/npm com dependências |
get_platform_variants(name) | Guards de plataforma #ifdef ao redor de um símbolo |
platform_conditionals() | Todos os blocos de código condicionais por plataforma |
Nível 5: Busca Semântica (Embeddings)
| Ferramenta | O que faz |
|---|---|
semantic_search(query) | Encontre código por significado (linguagem natural) |
hybrid_search(query) | O melhor dos dois: palavras-chave + semântico com fusão RRF |
embedding_status() | Cobertura de embeddings e informações do modelo |
Nível 6: Meta e Servidor
| Ferramenta | O que faz |
|---|---|
index_status() | Atualidade do índice e estatísticas |
reindex() | Aciona reindexação incremental |
embedding_health() | Verifica se o provedor de embeddings (Ollama, etc.) está acessível |
setup_guide() | Instruções de configuração estruturadas para agentes e usuários |
server_stats() | Tempo de atividade do servidor e informações do processo |
restart_server() | Solicita reinicialização do servidor (apenas SSE) |
No modo workspace, search_symbols, get_symbol, codebase_map e hybrid_search aceitam um filtro opcional project. Ferramentas de grafo/git/build/comunidade exigem project no modo workspace.
Guia de Implantação
Veja docs/usage-guide.md para o guia completo de implantação e uso, incluindo:
- Configurando o srclight como servidor MCP global para Claude Code
- Adicionando/removendo repositórios de workspaces
- O que acontece em commits e trocas de branch
- Fluxos de re-embedding
- Solução de problemas
Reindexação Automática (Hook Git)
Mantenha os índices atualizados automaticamente:
# Install post-commit + post-checkout hooks in current repo
srclight hook install
# Install across all repos in a workspace
srclight hook install --workspace myworkspace
# Remove hooks
srclight hook uninstall
Os hooks executam srclight index em segundo plano após cada commit e troca de branch.
Como Funciona
- tree-sitter analisa cada arquivo de código-fonte em uma AST
- Extratores de documentos lidam com arquivos não-código (PDF, DOCX, XLSX, HTML, CSV, imagens, e-mail, texto) — extraindo títulos, tabelas, páginas e metadados como símbolos pesquisáveis. Páginas de PDF escaneadas são opcionalmente submetidas a OCR via PaddleOCR.
- Símbolos (funções, classes, métodos, structs, etc.) são extraídos com metadados completos
- Três índices SQLite FTS5 são construídos com diferentes estratégias de tokenização:
- Nomes: tokenização ciente de código (divide
camelCase, lida com::,->) - Conteúdo: índice trigrama para correspondência de substrings
- Docs: Stemming de Porter para linguagem natural em docstrings
- Nomes: tokenização ciente de código (divide
- Detecção de comunidades agrupa símbolos em módulos funcionais via algoritmo de Louvain nas arestas do grafo de chamadas, com rotulagem automática TF-IDF
- Fluxos de execução são rastreados via BFS a partir de pontos de entrada, e a análise de impacto pontua o raio de explosão de cada símbolo (BAIXO/MÉDIO/ALTO/CRÍTICO)
- Opcional: vetores de incorporação são gerados via API Ollama ou Voyage e armazenados como BLOBs
- Um
.npysnapshot sidecar é construído e carregado na VRAM da GPU (cupy) ou RAM da CPU (numpy) para busca rápida - O servidor MCP expõe ferramentas de consulta estruturada que agentes de IA chamam em vez de grep
- Busca híbrida mescla resultados de palavras-chave (FTS5) e semânticos (incorporação) via RRF
Arquitetura (Modo Workspace)
repo1/.srclight/index.db ──┐
repo2/.srclight/index.db ──┼── ATTACH ──→ :memory: ──→ UNION ALL queries
repo3/.srclight/index.db ──┘
Cada repositório é indexado de forma independente. No momento da consulta, o mecanismo ATTACH do SQLite os une em um único namespace pesquisável. Lida com mais de 10 repositórios via agrupamento automático (limite de ATTACH do SQLite).
Como o Srclight se Compara
Uma pesquisa com mais de 50 servidores de inteligência de código MCP em todos os principais registros (Official MCP Registry, Smithery, Glama, mcp.so, awesome-mcp-servers) descobriu que nenhum outro servidor único combina todos os recursos do srclight:
| Capacidade | srclight | grep/glob (padrão) | CodeMCP (SCIP) | Claude Context (Zilliz) |
|---|---|---|---|---|
| Busca de símbolos (FTS5) | 3 índices (nome, conteúdo, docs) | Nenhum | Baseado em SCIP | BM25 |
| Busca semântica (incorporações) | Acelerada por GPU, ~3ms | Nenhum | Nenhum | API OpenAI + Milvus |
| Busca híbrida (palavras-chave + semântica) | Fusão RRF | Nenhum | Nenhum | BM25 + vetor |
| Grafo de relacionamentos (chamadores, chamados) | Arestas tree-sitter | Nenhum | Arestas SCIP | Nenhum |
| Detecção de comunidades (agrupamentos de módulos) | Louvain no grafo de chamadas | Nenhum | Nenhum | Nenhum |
| Análise de impacto (raio de explosão + risco) | Por símbolo + nível de diff | Nenhum | Nenhum | Nenhum |
| Inteligência de mudanças Git | blame, hotspots, WIP, detect_changes | Nenhum | Nenhum | Nenhum |
| Consciência do sistema de build | CMake, .csproj, #ifdef | Nenhum | Nenhum | Nenhum |
| Workspace multi-repositório | ATTACH+UNION | Nenhum | Nenhum | Nenhum |
| Infraestrutura necessária | pip install, SQLite | Nenhum | Indexador SCIP | Docker, Milvus, API OpenAI |
| Totalmente local / privado | Sim, zero chamadas de API | Sim | Sim | Não (precisa de OpenAI) |
| Linguagens | 11 | Qualquer (regex) | 5 (SCIP) | Qualquer (chunking) |
| Ferramentas MCP | 42 | 2 (grep, glob) | 80+ | ~10 |
Ao contrário de ferramentas baseadas em grep, o srclight constrói um índice persistente com consultas estruturadas. Ao contrário de soluções baseadas em nuvem, tudo roda localmente — seu código nunca sai da sua máquina. Ao contrário de plugins de IDE, o srclight funciona com qualquer cliente MCP.
Roadmap
Concluído
- Inteligência de símbolos + 3x busca FTS5
- Grafo de relacionamentos: chamadores, chamados, hierarquia
- Raio de explosão, descoberta de testes, implementadores
- Inteligência de mudanças Git: blame, hotspots, mudanças recentes
- Consciência do sistema de build: CMake, .csproj, condicionais de plataforma
- Busca semântica: incorporações via Ollama/Voyage, RRF híbrido
- Busca vetorial acelerada por GPU:
.npysidecar, matemática vetorizada cupy/numpy - Workspaces multi-repositório (ATTACH+UNION)
- Hooks Git de reindexação automática (post-commit + post-checkout)
- Extração de documentos: PDF, DOCX, XLSX, HTML, CSV, e-mail, imagens, texto (detecção de títulos, tabelas, metadados)
- OCR opcional: PaddleOCR para PDFs escaneados, pytesseract para imagens
- Orientação do agente MCP: instruções abrangentes, guia de seleção de ferramentas, protocolo de sessão
- Recarga a quente da configuração do workspace (sem reiniciar o servidor para adicionar repositórios)
- Redescoberta do sidecar VectorCache (sem reiniciar após incorporação)
- Sugestões de nome de projeto em mensagens de erro
- Detecção de comunidades: agrupamento Louvain nas arestas do grafo de chamadas com rotulagem automática TF-IDF
- Rastreamento de fluxo de execução: BFS a partir de pontos de entrada através de fronteiras de comunidades
- Análise de impacto: raio de explosão por símbolo com pontuação de risco (BAIXO/MÉDIO/ALTO/CRÍTICO)
-
detect_changes: mapear git diff para símbolos afetados e agregar raio de explosão
Próximos
- Mapeamento de conceitos entre linguagens (arestas explícitas entre símbolos equivalentes entre linguagens)
- Inteligência de padrões (detecção de convenções, extração de padrões de código)
- Pré-computação de IA (resumos de símbolos via LLM barato)
Licença
MIT — Gig8 LLC