v0.10.0 Local-first · Markdown puro · MCP nativo

Seu conhecimento,
conectado como grafo.

O GraphFinder transforma vaults Markdown e bases de código inteiras em um grafo de conhecimento com indexação semântica — um lugar bonito para humanos pensarem e recuperação cirúrgica de ~50 tokens para agentes de IA via servidor MCP nativo.

terminal
# Indexa qualquer pasta (notas + código) e exporta artefatos do grafo
$ graphfinder sync ./meu-repo --export
# Registra o GraphFinder em todos os editores de IA desta máquina
$ graphfinder config --install
# Pergunte ao grafo
$ graphfinder search "como a autenticação é tratada?"
24ferramentas MCP
20+linguagens indexadas
~50tokens por consulta
0chamadas à nuvem / API keys
Recursos

Um motor para notas, código e agentes.

Tudo roda na sua máquina: um núcleo em Rust com modelo ONNX embarcado, SQLite com FTS5, uma interface de grafo force-directed e um servidor MCP com o qual qualquer editor de IA conversa.

Busca semântica híbrida

Vetores densos FastEmbed de 384 dimensões combinados com BM25 do SQLite FTS5 via Reciprocal Rank Fusion (k = 60). As notas são divididas por títulos ##/###, então cada resposta é uma seção atômica com deep link, como [[Nota#Seção]].

FastEmbed ONNXSQLite FTS5RRF k=60AST pulldown-cmark

100% local

Sem API keys, sem telemetria. Seu Markdown continua como arquivos simples no disco.

Grafo interativo

Canvas force-directed com destaque de vizinhança de 1/2 saltos, clusters por tag e anéis coloridos por linguagem.

Inteligência de código

Varredura AST-lite de repositórios inteiros: símbolos (funções, classes, structs), grafo de imports locais e pacotes externos — respeitando o .gitignore e sincronizando de forma incremental por SHA-256.

TypeScript Rust Python Go JavaScript C / C++ Java · Kotlin · C# + outras

Servidor MCP nativo

24 ferramentas via Streamable HTTP/SSE (127.0.0.1:45123) com o app aberto, ou stdio headless com graphfinder mcp. Funciona com Cursor, Claude Desktop, Antigravity, Windsurf, Cline, Roo Code e Zed.

Análise de grafos

Detecção de comunidades, centralidade de grau, God Nodes, acoplamentos surpresa, ciclos e caminhos mínimos — exportados como graph.json, GRAPH_REPORT.md e um graph.html offline.

Monitoramento ao vivo

Edite no VS Code, Cursor ou Neovim — as mudanças são reindexadas em 500 ms.

Múltiplos projetos

Vaults isolados, cada um com seu índice. Renomear atualiza todos os wikilinks de entrada.

Seguro por padrão

Defesa contra DNS rebinding, validação de Origin, CSP estrita e sanitização com DOMPurify.

01 · INGESTÃO

Aponte para uma pasta

Notas Markdown e arquivos de código são analisados, divididos e vetorizados localmente.

02 · CONEXÃO

Veja o grafo se formar

Wikilinks, tags e imports viram arestas que você pode explorar e analisar.

03 · RECUPERAÇÃO

Agentes perguntam com precisão

As ferramentas MCP retornam só a seção ou símbolo necessário — não arquivos inteiros.

Documentação

Tudo sobre o GraphFinder.

Da instalação aos detalhes internos do motor de busca. Versão atual: v0.10.0.

01Visão geral#

O GraphFinder é um aplicativo desktop multiplataforma (Tauri v2 + Rust + React 19) e uma ferramenta de linha de comando que indexa vaults de conhecimento em Markdown e repositórios de código em um único grafo pesquisável semanticamente.

Pipelines de RAG tradicionais cortam documentos em janelas fixas arbitrárias ou jogam arquivos inteiros no contexto do LLM, desperdiçando milhares de tokens. Já as ferramentas de notas raramente oferecem busca vetorial local ou uma API utilizável por agentes. O GraphFinder resolve os dois lados:

  • Para humanos — um ambiente local-first e sem distrações para escrever Markdown puro com [[wikilinks]], explorar conexões em um grafo 2D interativo e manter total posse dos seus arquivos.
  • Para agentes de IA — um servidor Model Context Protocol (MCP) embarcado que retorna resultados no nível de subseção ([[Nota#Seção]]) e símbolos de código individuais, tipicamente com cerca de 50 tokens por resultado.

Conceitos principais

ConceitoSignificado
VaultUma pasta de arquivos .md (e opcionalmente código) indexada pelo GraphFinder.
ProjetoUm vault registrado com seu próprio índice SQLite isolado. Identificado por um slug (ex.: minha-api).
ChunkUma seção atômica de uma nota delimitada por títulos ## / ###, vetorizada de forma independente.
Deep linkReferência a uma seção específica: [[Título da Nota#Título da Seção]], ou a um símbolo: [[caminho/arquivo.rs#funcao]].
Nó / ArestaNotas e arquivos de código são nós; wikilinks e imports são arestas.
God NodeUm hub altamente central no grafo, detectado por centralidade de grau.

02Instalação#

Opção A — Instaladores prontos (recomendado)

Cada release com tag é compilada pelo GitHub Actions para as três plataformas desktop. Baixe a mais recente na página de Releases:

Após instalar, habilite o comando de terminal para que graphfinder funcione em qualquer shell:

bash
# Windows: adiciona a pasta de instalação ao PATH do usuário + cria atalhos graphfinder.cmd
# macOS/Linux: cria um symlink em ~/.local/bin/graphfinder
graphfinder install-cli

Se graphfinder ainda não estiver no PATH, execute o binário diretamente, ex.: "C:\Program Files\GraphFinder\GraphFinder.exe" install-cli. Depois abra um novo terminal.

Opção B — Compilar a partir do código-fonte

Pré-requisitos

  • Node.js 20+ e npm
  • Rust 1.75+ via rustup
  • Windows: Visual Studio C++ Build Tools · Linux: libwebkit2gtk-4.1-dev, build-essential, libssl-dev, libayatana-appindicator3-dev, librsvg2-dev
bash
git clone https://github.com/GabrielTBeserra/GraphFinder.git
cd GraphFinder
npm install

# Roda o app desktop em modo de desenvolvimento (Vite na :1420 + Tauri)
npm run app

# Gera instaladores em src-tauri/target/release/bundle/
npm run tauri build

Na primeira execução o modelo de embeddings (all-MiniLM-L6-v2, ~90 MB) é baixado uma única vez para .fastembed_cache. Depois disso o GraphFinder funciona totalmente offline.

03Início rápido#

  1. Abra o appInicie o GraphFinder (ou rode graphfinder sem argumentos). Um vault padrão é criado e o grafo aparece.
  2. Crie ou abra um projetoUse o seletor de projetos na barra superior → Novo projeto, dê um nome e, opcionalmente, escolha uma pasta existente (de notas ou um repositório de código).
  3. Escreva uma notaCrie uma nota começando com # Título, um resumo curto e depois seções ##. Conecte conceitos com [[Outra Nota]] e termine com tags como #arquitetura. Salve com Ctrl+S.
  4. PesquisePressione Ctrl/⌘+K para abrir o Omnisearch — busca semântica híbrida em notas e símbolos de código.
  5. Conecte seu editor de IARode graphfinder config --install ou copie um snippet do modal MCP no app. Seu agente passa a ter 24 ferramentas do GraphFinder.

Prefere o terminal? O mesmo fluxo, sem interface:

bash
cd ~/code/meu-projeto
graphfinder sync            # registra a pasta como projeto e a indexa
graphfinder status          # notas, arquivos de código, arestas, tamanho do banco
graphfinder search "middleware de rate limiting"
graphfinder report          # auditoria de arquitetura + artefatos do grafo

04Aplicativo desktop#

A interface é organizada em uma barra lateral, o canvas central do grafo e painéis contextuais.

ÁreaO que faz
Barra superiorSeletor de projetos, novo projeto, Omnisearch, relatório arquitetural, modal de integração MCP e alternância de tema claro/escuro (salva no localStorage).
Barra lateralAbas Notes e Code (com filtros de linguagem), além de busca semântica com alternância entre notas Markdown e símbolos de código. Mostrar/ocultar com Ctrl+B.
Visão de grafoCanvas force-directed. Clique em um nó para focá-lo e destacar sua vizinhança de 1 e 2 saltos. Filtre com [All], [Notes], [Code]. Notas são coloridas por cluster de tag; arquivos de código ganham anéis por linguagem; hubs brilham proporcionalmente ao grau.
Editor de notasEditor Markdown com preview ao vivo (sanitizado pelo DOMPurify), autocomplete de wikilinks (digite [[, navegue com ↑↓, aceite com Enter/Tab, feche com Esc) e Ctrl+S para salvar.
Code InspectorPainel deslizante para um nó de código: símbolos declarados com intervalos de linha, grafo de imports com navegação clicável, pacotes externos e visualizador de código cirúrgico.
OmnisearchCtrl/⌘+K. Busca híbrida no projeto ativo, navegável pelo teclado.
Relatório arquiteturalComunidades, God Nodes, acoplamentos surpresa e ciclos do projeto ativo, com exportação em um clique.
Modal MCPSnippets de configuração prontos para cada editor de IA, além das regras de agente (AGENTS.md) e da skill curadora.

Atalhos de teclado

AtalhoAção
Ctrl/⌘ + KAbrir/fechar Omnisearch
Ctrl/⌘ + BMostrar/ocultar barra lateral
Ctrl/⌘ + SSalvar a nota atual
↑ ↓ Enter EscNavegar em resultados de busca e sugestões de wikilink

Enquanto o app desktop está aberto ele também hospeda o servidor MCP em http://127.0.0.1:45123, então notas criadas pelo seu agente aparecem no grafo em tempo real.

05Escrevendo notas#

O GraphFinder funciona com qualquer Markdown, mas a recuperação fica mais precisa quando as notas seguem esta estrutura:

  1. Um único título H1 (# Título da Nota) seguido de um resumo executivo de 2–3 linhas.
  2. Seções ##/### autocontidas de aproximadamente 40–150 tokens, com títulos descritivos (## 2. Configuração do SQLite WAL em vez de ## Config). Cada título vira um embedding próprio e um alvo de deep link.
  3. Wikilinks — [[Nota]] ou [[Nota#Seção]]. Mire em 1–3 links por nota para evitar órfãos.
  4. Hashtags em minúsculas — #arquitetura #sqlite #mcp no fim das seções ou da nota. Elas geram os clusters coloridos no grafo.
vault/Auth JWT.md
# Auth JWT

Como a API emite e valida JSON Web Tokens. Cobre chaves de assinatura,
política de expiração e rotação de refresh.

## 1. Assinatura de Tokens
Os tokens são assinados com RS256. As chaves giram a cada 30 dias e são
carregadas do cofre de segredos na inicialização. Veja [[Arquitetura do Sistema#2. Segredos]].

## 2. Rotação de Refresh
Cada refresh invalida a família de tokens anterior para impedir ataques de replay.

#auth #seguranca #arquitetura

Como as notas são processadas

  • O parsing usa uma AST CommonMark real (pulldown-cmark). O conteúdo dentro de blocos de código é isolado, então um # em código nunca é tratado como título ou tag.
  • Seções com mais de 320 tokens são divididas em janelas com sobreposição de 40 tokens para não perder contexto nas bordas.
  • Renomear uma nota (pela interface ou rename_note) reescreve todos os [[Título Antigo]] no vault.
  • Notas editadas fora do GraphFinder (VS Code, Cursor, Neovim…) são detectadas pelo file watcher (debounce de 500 ms).

07Indexação de código#

Aponte o GraphFinder para um repositório e ele constrói um índice de símbolos e um grafo de dependências sem precisar de compilador ou language server.

Tipos de arquivo suportados

LinguagemExtensõesImports analisados
TypeScript / TSX.ts .mts .cts .tsximport, require
JavaScript / JSX.js .mjs .cjs .jsximport, require
Python.py .pyiimport, from … import
Rust.rsuse, mod
Go.goimport
C / C++.c .h .cpp .hpp .cc .cxx .hh#include
Java / Kotlin.java .kt .ktsimport
C# / F#.cs .fsusing
PHP · Ruby · Swift.php .rb .swiftuse/require/import
Web e configuração.html .css .scss .sass .less .json .yaml .toml .sqlindexados como arquivos
Shell.sh .bash .zshsource

O que é extraído

  • Símbolos — funções, classes, structs, interfaces e enums de nível superior, com intervalos de linha e estimativa de tokens. Cada símbolo é um chunk pesquisável.
  • Imports locais — resolvidos para arquivos do projeto e salvos como arestas bidirecionais (code_links): imports e dependentes.
  • Pacotes externos — módulos de terceiros (ex.: rusqlite, react) listados por arquivo.

O que é ignorado

Tudo que está no .gitignore, além de node_modules, target, dist, .git, arquivos binários e arquivos maiores que 1 MB.

08Análise de grafos#

Um motor de análise escrito em Rust puro trata notas e arquivos de código como um grafo unificado e responde perguntas de arquitetura.

AnáliseDescrição
ComunidadesClustering por propagação de rótulos / estilo Louvain revela subsistemas modulares.
Centralidade e God NodesA centralidade de grau ranqueia os nós; os hubs mais conectados são marcados como God Nodes — refatore ou documente-os primeiro.
Acoplamentos surpresaArestas que acoplam subsistemas distantes — frequentemente dívida arquitetural oculta.
CiclosCadeias de dependência circular entre arquivos.
Caminho mínimoBFS por imports e wikilinks entre dois nós quaisquer (graphfinder path, find_path).
Explicação de nóCartão 360°: comunidade, ranking de centralidade, quem chama, quem é chamado, irmãos (graphfinder explain, explain_node).

Artefatos exportados

graphfinder report, graphfinder export, sync --export ou a ferramenta export_graph gravam em ./graphfinder-out/:

  • graph.json — nós (comunidade, grau, centralidade, flag de god-node) e arestas (origem, destino, rótulo, peso). Ideal para agentes e scripts.
  • GRAPH_REPORT.md — resumo executivo, métricas, tabela de God Nodes, lista de subsistemas, acoplamentos surpresa e ciclos.
  • graph.html — visualizador offline sem dependências, com busca, cores por comunidade e halos nos hubs. Abra em qualquer navegador.

09Referência da CLI#

O mesmo binário é o app desktop e a CLI. Executado sem argumentos, abre a interface gráfica; com um comando, roda no terminal.

uso
graphfinder [COMANDO] [OPÇÕES]
Comando (aliases)OpçõesDescrição
sync (syn, index) [caminho]--json --exportIndexa notas e código em caminho (padrão: diretório atual). Registra um novo projeto se for desconhecido; caso contrário, atualiza incrementalmente via SHA-256. --export também gera os artefatos do grafo.
status (info) [caminho]—Mostra notas, arquivos de código, arestas e estatísticas do banco.
projects (list)—Lista todos os projetos registrados e seus caminhos.
search <consulta>--path --limit <n>Busca semântica híbrida (BM25 + embeddings) em um projeto.
report (audit) [caminho]--out-dir --jsonComunidades, God Nodes, surpresas e ciclos, além dos três artefatos.
path <de> <para>--path --jsonCaminho mínimo multi-salto entre dois arquivos, símbolos ou notas.
explain <nó>--path --jsonCartão de contexto arquitetural de um nó.
export [caminho]--out-dirGera graph.json, GRAPH_REPORT.md e graph.html sem relatório no terminal.
config (mcp-config, setup)--install / -i --jsonImprime a configuração MCP para editores de IA. --install detecta os editores instalados, registra o GraphFinder neles e adiciona a CLI ao PATH.
tools (schemas, mcp-tools, export-schemas) [pasta]—Exporta os schemas JSON das 24 ferramentas, um manifesto tools.json e instructions.md para ./mcp-tools.
install-cli (install-path)—Adiciona graphfinder ao PATH do sistema.
mcp (--mcp)—Inicia o servidor MCP stdio headless.
help (--help, -h)—Mostra a ajuda.

Exemplos

bash
# Sync com saída legível por máquina para CI ou scripts
graphfinder sync ./services/api --json

# Como a interface chega até a camada de banco?
graphfinder path "GraphView.tsx" "db.rs"

# Por que este arquivo é importante?
graphfinder explain "src-tauri/src/engine/db.rs"

# Auditoria em uma pasta personalizada
graphfinder report --out-dir ./docs/arquitetura

# Apenas 3 resultados em um projeto específico
graphfinder search "debounce do file watcher" --path ./GraphFinder --limit 3

A partir do código-fonte, scripts npm encapsulam a CLI: npm run sync, npm run status, npm run search, npm run projects, npm run mcp.

10Configurando o MCP#

O GraphFinder implementa o Model Context Protocol com o SDK oficial em Rust (rmcp) em dois modos:

ModoEndpointIdeal para
A · HTTP/SSE embarcado (app aberto)http://127.0.0.1:45123/mcp (Streamable HTTP)
http://127.0.0.1:45123/sse (SSE)
Atualizações ao vivo: notas criadas pelo agente aparecem no grafo na hora.
B · stdio headlessgraphfinder mcp / GraphFinder.exe --mcpTerminais, servidores, CI, ou quando você não quer a interface aberta.

O caminho mais rápido é o registro automático:

bash
graphfinder config --install   # Cursor, Claude Desktop, Windsurf, Cline, Roo Code…
graphfinder config --json      # apenas imprime o snippet JSON

Ou configure manualmente:

Arquivo: .cursor/mcp.json (workspace) ou ~/.cursor/mcp.json (global).

mcp.json
{
  "mcpServers": {
    "graphfinder": {
      "url": "http://127.0.0.1:45123/sse"
    }
  }
}

Arquivo: %APPDATA%\Claude\claude_desktop_config.json (Windows) ou ~/Library/Application Support/Claude/claude_desktop_config.json (macOS).

claude_desktop_config.json
{
  "mcpServers": {
    "graphfinder": {
      "command": "C:\\Program Files\\GraphFinder\\GraphFinder.exe",
      "args": ["--mcp"]
    }
  }
}

Arquivo: ~/.gemini/antigravity-ide/mcp_config.json.

mcp_config.json
{
  "mcpServers": {
    "graphfinder": {
      "type": "sse",
      "url": "http://127.0.0.1:45123/sse"
    }
  }
}

Windsurf: ~/.codeium/windsurf/mcp_config.json. Cline / Roo Code: cline_mcp_settings.json no armazenamento global da extensão.

mcp_config.json
{
  "mcpServers": {
    "graphfinder": {
      "url": "http://127.0.0.1:45123/sse"
    }
  }
}

Qualquer cliente MCP que inicia um processo (sem interface gráfica):

json
{
  "mcpServers": {
    "graphfinder": {
      "command": "graphfinder",
      "args": ["--mcp"]
    }
  }
}

No modo stdio o handshake MCP responde em menos de 50 ms — o modelo de embeddings carrega e o vault sincroniza em segundo plano.

11Ferramentas MCP (24)#

Todas as ferramentas aceitam o parâmetro opcional project para mirar um vault específico sem contaminação entre projetos. Parâmetros tracejados são opcionais.

Recuperação de conhecimento

search_semantic

Busca híbrida vetor + BM25 sobre chunks de notas com RRF. Retorna deep links e estimativa de tokens.

querylimit=5format: dense_chunks | summaries

read_section

Lê exatamente uma seção pelo título ou fragmento de deep link.

targetsection

get_compressed_context

Resumo, links, tags e mapa de títulos com custo de tokens por seção — menos de 80 tokens.

target

list_recent_notes

Notas modificadas recentemente com resumos de uma linha e tags.

limit=10

Autoria e conexões

suggest_links

Vetoriza um rascunho e recomenda notas/seções existentes para linkar (evita órfãos).

textcurrent_notethreshold=0.60

store_context

Cria ou atualiza uma nota, faz o parsing e a indexa imediatamente.

titlecontenttags[]links[]

link_notes

Adiciona um [[wikilink]] de uma nota para outra e atualiza o grafo.

from_noteto_note

rename_note

Renomeia uma nota e refatora todos os wikilinks de entrada no vault.

old_titlenew_title

delete_note

Apaga o arquivo e limpa chunks, embeddings, links e tags.

target

Grafo e arquitetura

get_graph_neighborhood

Nós conectados em 1 ou 2 saltos, sem ler o conteúdo.

targetdepth=1

find_path

Caminho mínimo (BFS) por wikilinks e imports entre dois nós.

sourcetargetdirected=false

explain_node

Centralidade, comunidade, status de God Node, dependentes, dependências e irmãos.

target

get_community_report

Auditoria do sistema: comunidades, God Nodes, surpresas e ciclos.

project

export_graph

Gera graph.json, GRAPH_REPORT.md e graph.html.

out_dir=./graphfinder-out

get_vault_stats

Notas, chunks, links, tags e estimativa total de tokens.

project

Base de código

search_code

Busca híbrida em símbolos, assinaturas e comentários. Retorna [[arquivo#simbolo]] com intervalos de linha.

querylanguagelimit=5

find_files

Busca por glob / substring nos caminhos indexados.

patternlimit=20

get_file_context

Símbolos com linhas, imports locais, dependentes e pacotes — menos de 80 tokens.

file

read_code_chunk

Retorna apenas o corpo de uma função, classe ou struct.

filesymbol

get_code_dependencies

O que um arquivo importa e quem o importa.

file

Projetos e sincronização

list_projects

Todos os vaults registrados com caminhos e contagem de notas.

—

create_project

Cria um vault isolado (opcionalmente em qualquer caminho do disco).

namepath

switch_project

Troca o vault padrão ativo.

project_id

sync_vault

Reindexação incremental por hash; um path é mapeado (ou registrado) automaticamente como projeto.

pathproject

Rode graphfinder tools para exportar os schemas JSON de todas as ferramentas e usá-los com qualquer framework de agentes.

12Agentes de IA e skills#

O GraphFinder traz três camadas que trabalham juntas: o agente (Cursor, Claude, Antigravity…) raciocina e planeja, a skill impõe economia de tokens e qualidade das notas, e o servidor MCP executa buscas e escritas.

Skills e regras incluídas

  • AGENTS.md — regras do repositório para agentes (economia de tokens, schema de notas, pipelines de decisão). O Antigravity carrega automaticamente; no Cursor adicione às Project Rules; no Claude cole no prompt do projeto.
  • .agents/skills/graphfinder-curator — fluxo de autoria e curadoria (resumos, seções atômicas, suggest_links antes de store_context, tags).
  • .agents/skills/graphfinder — fluxo de auditoria de arquitetura (relatórios, caminhos, explain, exportações).

Fluxos recomendados

Respondendo uma pergunta

fluxo
search_semantic("sqlite wal mode")        → top 5 chunks (~50 tokens cada)
  └─ precisa da estrutura?  get_compressed_context("Arquitetura do Sistema")
  └─ precisa de uma seção?  read_section("Arquitetura do Sistema", "1. Armazenamento Local")

Salvando conhecimento

fluxo
rascunho (# Título + resumo + seções ##)
  → suggest_links(rascunho)                → ex.: "Arquitetura do Sistema: 85%"
  → inserir [[Arquitetura do Sistema]] no rascunho
  → store_context(title, content, tags)    → arquivo gravado, indexado, grafo atualizado

Inspecionando código

fluxo
search_code("hybrid_search", language="rust")
  → get_file_context("src-tauri/src/engine/db.rs")       # mapa de símbolos, <80 tokens
  → read_code_chunk("src-tauri/src/engine/db.rs", "hybrid_search")
  → get_code_dependencies("src-tauri/src/engine/db.rs")  # análise de impacto

Auditando a arquitetura

fluxo
get_community_report()      → subsistemas, God Nodes, surpresas, ciclos
  → explain_node("db.rs")   → por que importa
  → find_path("App.tsx", "db.rs")

Exemplos de prompts

ObjetivoPrompt
Busca cirúrgica"Consulte o vault do GraphFinder e explique como funciona a indexação de código sem ler arquivos inteiros."
Nota conectada"Documente nosso fluxo OAuth2 como uma nota no GraphFinder. Chame suggest_links antes e adicione tags relevantes."
Inspeção de código"Encontre onde o parsing de imports é implementado e leia só essa função com read_code_chunk."
Análise de impacto"Quais arquivos importam GraphView.tsx? Resuma o impacto arquitetural de alterá-lo."
Auditoria"Gere um community report do GraphFinder e liste os God Nodes que devemos documentar primeiro."

13Projetos e vaults#

Cada projeto é um workspace isolado com seu próprio diretório Markdown e seu próprio banco vetorial SQLite, então as buscas nunca vazam entre projetos.

  • Vault padrão — <pasta de dados>/vault com índice em <pasta de dados>/index.db.
  • Vaults gerenciados — <pasta de dados>/vaults/<project_id>/, criados pela interface ou por create_project.
  • Pastas externas — qualquer caminho do disco (ex.: um repositório) registrado pela interface, por graphfinder sync <caminho> ou create_project(name, path).
  • Registro — vaults/projects.json guarda o projeto ativo, nomes e caminhos personalizados.
vaults/projects.json
{
  "active_project": "default",
  "custom_names": { "minha-api": "Minha API" },
  "custom_paths": { "minha-api": "C:/Repos/MinhaAPI" }
}

Onde fica a pasta de dados?

  1. GRAPHFINDER_DATA_DIR, se definida.
  2. O diretório atual, se contiver package.json (código-fonte / modo dev).
  3. Caso contrário, a pasta de dados do sistema: %APPDATA%\GraphFinder (Windows), ~/Library/Application Support/GraphFinder (macOS), ~/.local/share/GraphFinder (Linux).

14Configuração#

O GraphFinder é configurado por variáveis de ambiente — nenhum arquivo de configuração é necessário.

VariávelPadrãoEfeito
GRAPHFINDER_DATA_DIRver acimaDiretório base para vaults, registro e bancos.
GRAPHFINDER_VAULT<dados>/vaultSubstitui a pasta do vault padrão.
GRAPHFINDER_DB<dados>/index.dbSubstitui o caminho do banco SQLite padrão.
GRAPHFINDER_MODEL / GRAPHFINDER_EMBEDDING_MODELautomultilingual, multilingual-e5-small ou e5 carregam o MultilingualE5Small; caso contrário, all-MiniLM-L6-v2.
GRAPHFINDER_MODELS—Pasta com model.onnx + tokenizer.json locais para uso totalmente offline (também detectado em models/all-MiniLM-L6-v2).
GRAPHFINDER_MCP_PORT45123Porta do servidor MCP HTTP/SSE embarcado.
GRAPHFINDER_AUTO_APPEND_LINKSfalse1/true adiciona automaticamente os wikilinks sugeridos ao salvar notas.
bash
# Vault em português / multilíngue em uma porta personalizada
export GRAPHFINDER_MODEL=multilingual
export GRAPHFINDER_MCP_PORT=47000
graphfinder
powershell
$env:GRAPHFINDER_MODEL = "multilingual"
graphfinder sync

Trocar o modelo de embeddings muda a semântica dos vetores. Reindexe seus projetos (apague o index.db do projeto e rode graphfinder sync) após a troca.

15Arquitetura#

Frontend · React 19
  • GraphView (force-graph)
  • NoteEditor + preview
  • CodeInspector
  • Sidebar · Omnisearch
  • ProjectSwitcher · Modais
Tauri IPC
Núcleo Rust · Tauri v2
  • Comandos IPC (lib.rs)
  • Servidor MCP (rmcp, axum)
  • Parser · Chunker
  • Motor de código (AST-lite)
  • FastEmbed · Análise de grafos
I/O
Armazenamento local
  • Vaults Markdown
  • Repositórios de código
  • index.db (SQLite WAL + FTS5)
  • projects.json
  • .fastembed_cache

Estrutura do repositório

árvore
GraphFinder/
├── src/                      # Frontend React 19 + TypeScript
│   ├── components/           # GraphView, NoteEditor, CodeInspector, Sidebar,
│   │                         # OmnisearchModal, McpModal, ArchitecturalReportModal…
│   ├── services/             # Bindings IPC do Tauri
│   └── types.ts
├── src-tauri/                # Backend Rust
│   ├── src/main.rs           # Ponto de entrada da CLI (GUI sem argumentos)
│   ├── src/lib.rs            # Setup do Tauri, comandos IPC, servidor MCP HTTP
│   ├── src/engine/
│   │   ├── parser.rs         # AST CommonMark, chunking, wikilinks, tags
│   │   ├── embeddings.rs     # Carregamento e inferência do FastEmbed
│   │   ├── db.rs             # Schema SQLite, FTS5, busca híbrida RRF
│   │   ├── vault.rs          # Engine: sync, watcher, ciclo de vida das notas
│   │   ├── code.rs           # Detecção de linguagem, símbolos, imports
│   │   ├── graph_analytics.rs# Comunidades, centralidade, caminhos, exportação
│   │   └── project.rs        # Gerenciador multi-vault e registro
│   └── src/mcp/              # Definição das ferramentas (mod.rs) e transportes (server.rs)
├── .agents/skills/           # Skills graphfinder e graphfinder-curator
├── mcp-tools/                # Schemas exportados das ferramentas
├── docs/                     # Este site (GitHub Pages)
└── AGENTS.md · MCP_TOOLS.md · CHANGELOG.md

Stack tecnológica

CamadaTecnologia
Runtime desktopTauri 2.12
BackendRust 2021 · Tokio · Axum 0.7 · rmcp 3.5
Embeddingsfastembed 4 (ONNX Runtime)
Armazenamentorusqlite 0.32 (SQLite embutido, WAL, FTS5)
Parsingpulldown-cmark 0.13 · regex · walkdir
Monitoramentonotify-debouncer-mini 0.6
FrontendReact 19.2 · TypeScript 6 · Vite 8 · Tailwind CSS 4
UIRadix UI · Phosphor Icons · force-graph · marked · DOMPurify

16Segurança#

  • Somente loopback — o servidor MCP HTTP escuta apenas em 127.0.0.1.
  • Defesa contra DNS rebinding — o cabeçalho Host é validado em cada requisição.
  • Validação de Origin — middleware estrito em vez de CORS permissivo.
  • Content Security Policy — aplicada no tauri.conf.json.
  • Proteção contra XSS — previews Markdown são sanitizados com DOMPurify.
  • Proteção contra path traversal — ids de projeto são sanitizados antes de tocar o sistema de arquivos.

Reporte vulnerabilidades de forma privada conforme o SECURITY.md.

17Desenvolvimento#

ScriptFinalidade
npm run devServidor Vite apenas do frontend (porta 1420).
npm run appApp desktop completo em modo dev (tauri dev).
npm run buildChecagem de tipos e build do frontend em dist/.
npm run tauri buildBinários e instaladores de release.
npm run lintLint com oxlint.
cargo test --manifest-path src-tauri/Cargo.tomlTestes unitários Rust (parser, FTS5, matemática de embeddings, detecção de linguagem, imports, busca de código).
npm run sync | status | search | projects | mcpExecuta comandos da CLI via cargo run.

Releases

Enviar uma tag no formato v* (ou rodar o workflow Release manualmente) dispara o .github/workflows/release.yml: o scripts/sync-version.js aplica a versão da tag em package.json, Cargo.toml e tauri.conf.json, e então o tauri-action compila e publica instaladores para Windows, macOS e Linux.

bash
git tag v0.11.0
git push origin v0.11.0

Contribuindo

Relatos de bugs, sugestões, documentação e PRs são bem-vindos. Leia o CONTRIBUTING.md e o Código de Conduta.

18Problemas e FAQ#

Meu agente não conecta em 127.0.0.1:45123.

O endpoint HTTP/SSE só existe enquanto o app desktop está aberto. Abra o app ou mude o cliente para o modo stdio ("command": "graphfinder", "args": ["--mcp"]). Se alterou GRAPHFINDER_MCP_PORT, atualize a URL.

graphfinder não é reconhecido no terminal.

Rode GraphFinder.exe install-cli (ou graphfinder config --install) e abra um novo terminal para carregar o PATH atualizado.

Os resultados são ruins para português / outros idiomas.

Defina GRAPHFINDER_MODEL=multilingual e reindexe.

A primeira inicialização é lenta.

O modelo de embeddings é baixado uma vez. Nas próximas execuções ele é carregado de .fastembed_cache; aponte GRAPHFINDER_MODELS para uma cópia local em máquinas sem internet.

Alguns arquivos não aparecem no grafo de código.

Verifique se estão no .gitignore, se são binários, se passam de 1 MB ou se têm extensão não suportada. Rode graphfinder sync para forçar uma atualização incremental.

Algum dado sai da minha máquina?

Não. Embeddings, busca e análises rodam localmente. O único acesso à rede é o download único do modelo (e este site consultando a release mais recente no GitHub).

19Changelog#

Histórico completo no CHANGELOG.md e na página de Releases.

v0.10.0atualOutubro de 2026
  • Motor de análise de grafos: comunidades, God Nodes, acoplamentos surpresa, ciclos.
  • Novas ferramentas MCP find_path, explain_node, get_community_report, export_graph (24 no total).
  • Comandos de CLI report, path, explain, export, config --install, tools, install-cli.
  • Artefatos graph.json, GRAPH_REPORT.md, graph.html offline; modal de relatório arquitetural no app.
v0.4.022/10/2026
  • Indexação de código multilinguagem e grafo de imports AST-lite.
  • Ferramentas de código: search_code, find_files, get_file_context, read_code_chunk, get_code_dependencies.
  • Painel Code Inspector, anéis por linguagem no grafo, filtros [All]/[Notes]/[Code], sync incremental de código por SHA-256.
v0.3.021/10/2026
  • Busca híbrida (vetores + BM25 FTS5 via RRF), parser AST CommonMark, janelas de 320 tokens.
  • MCP em dois modos (HTTP/SSE + stdio), file watcher, renomeação com refatoração de links, modelo multilíngue.
  • Canvas sem flicker; reforço de segurança (Host/Origin, CSP, DOMPurify, sanitização de caminhos).
v0.2.019/10/2026
  • Suporte multi-vault com bancos isolados; MCP embutido no binário principal (--mcp).
  • Primeiras 7 ferramentas MCP, modal de integração, seletor de projetos, design system minimalista suíço.
v0.1.001/10/2026
  • Versão inicial: vault único, chunking por títulos, FastEmbed local, grafo 2D, editor Markdown com wikilinks.

Dê aos seus agentes uma memória
que não desperdiça tokens.

Gratuito e open source sob a licença MIT. Roda inteiramente na sua máquina.