@oomkapwn/enquire-mcp 3.10.1 → 3.11.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.ar.md +5 -5
  3. package/README.es.md +5 -5
  4. package/README.fr.md +334 -0
  5. package/README.hi.md +5 -5
  6. package/README.ja.md +329 -0
  7. package/README.md +9 -8
  8. package/README.pt.md +334 -0
  9. package/README.ru.md +334 -0
  10. package/README.zh.md +5 -5
  11. package/SECURITY.md +10 -0
  12. package/STABILITY.md +4 -2
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +2 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/feedback.d.ts +83 -0
  17. package/dist/feedback.d.ts.map +1 -0
  18. package/dist/feedback.js +201 -0
  19. package/dist/feedback.js.map +1 -0
  20. package/dist/fts5.d.ts.map +1 -1
  21. package/dist/fts5.js +10 -1
  22. package/dist/fts5.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/retrieval-opts.d.ts +17 -0
  28. package/dist/retrieval-opts.d.ts.map +1 -1
  29. package/dist/retrieval-opts.js +19 -0
  30. package/dist/retrieval-opts.js.map +1 -1
  31. package/dist/server.d.ts +15 -0
  32. package/dist/server.d.ts.map +1 -1
  33. package/dist/server.js +18 -3
  34. package/dist/server.js.map +1 -1
  35. package/dist/tool-manifest.d.ts +7 -5
  36. package/dist/tool-manifest.d.ts.map +1 -1
  37. package/dist/tool-manifest.js +9 -0
  38. package/dist/tool-manifest.js.map +1 -1
  39. package/dist/tool-registry.d.ts +21 -0
  40. package/dist/tool-registry.d.ts.map +1 -1
  41. package/dist/tool-registry.js +63 -2
  42. package/dist/tool-registry.js.map +1 -1
  43. package/dist/tools/search.d.ts +12 -0
  44. package/dist/tools/search.d.ts.map +1 -1
  45. package/dist/tools/search.js +31 -0
  46. package/dist/tools/search.js.map +1 -1
  47. package/docs/COMPARISON.md +4 -4
  48. package/docs/api.md +4 -2
  49. package/package.json +6 -2
package/README.pt.md ADDED
@@ -0,0 +1,334 @@
1
+ <div align="center">
2
+
3
+ <a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — o MCP de Obsidian mais avançado. Memória de longo prazo para agentes de IA. Construído sobre o seu vault do Obsidian. Open-source, MCP-native, neutro em relação a fornecedores. Recuperação híbrida, reranker BGE, HNSW, PDFs com OCR. Para Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw." width="100%"></a>
4
+
5
+ # enquire-mcp
6
+
7
+ <sub>[English](./README.md) · [中文](./README.zh.md) · [Español](./README.es.md) · [हिन्दी](./README.hi.md) · [العربية](./README.ar.md) · [Русский](./README.ru.md) · **Português** · [Français](./README.fr.md) · [日本語](./README.ja.md)</sub>
8
+
9
+ <sub>**TL;DR para agentes de IA** — servidor MCP que expõe um vault local de markdown do Obsidian para Claude Code, Claude Desktop, Cursor, ChatGPT, Codex e OpenClaw como memória persistente e pesquisável. Recuperação híbrida (BM25 + embeddings de ML + reranker BGE, fundidos via RRF), HNSW + quantização int8, RAG agêntico (HyDE + sub-perguntas), GraphRAG-light, PDFs + OCR, Bases autônomas. Neutro em relação a fornecedores, MIT, zero chamadas à nuvem durante o serve. Instalação: `npm i -g @oomkapwn/enquire-mcp`. Docs: [llms.txt](https://github.com/oomkapwn/enquire-mcp/blob/main/llms.txt) · [AGENTS.md](https://github.com/oomkapwn/enquire-mcp/blob/main/AGENTS.md) · [API](https://oomkapwn.github.io/enquire-mcp/).</sub>
10
+
11
+ ### O MCP de Obsidian mais avançado. Memória de longo prazo para agentes de IA.
12
+
13
+ **Pare de reexplicar o contexto ao Claude, Cursor, ChatGPT, Codex e OpenClaw a cada sessão. Suas notas do Obsidian se tornam memória compartilhada e pesquisável em todos os agentes compatíveis com MCP — seu conhecimento, qualquer modelo, seu para sempre.**
14
+
15
+ [![CI](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
16
+ [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
17
+ [![downloads](https://img.shields.io/npm/dm/@oomkapwn/enquire-mcp.svg?color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
18
+ [![tests](https://img.shields.io/badge/tests-1329%20passing-brightgreen.svg)](#trust)
19
+ [![stable](https://img.shields.io/badge/v3.10.x-stable-brightgreen.svg)](./STABILITY.md)
20
+ [![build provenance](https://img.shields.io/badge/build_provenance-SLSA_L2-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l2)
21
+ [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
22
+ [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](./LICENSE)
23
+
24
+ **[⚡ Instalação em 30 segundos](#-início-rápido) · [🧠 Casos de uso](#-casos-de-uso) · [📊 Benchmarks](./docs/benchmarks.md) · [📖 Referência da API](https://oomkapwn.github.io/enquire-mcp/) · [💬 Comparar alternativas](./docs/COMPARISON.md)**
25
+
26
+ **Claude Code — em uma linha:**
27
+
28
+ ```bash
29
+ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
30
+ ```
31
+
32
+ </div>
33
+
34
+ > 📌 Este documento é a tradução para o português (Brasil) do [README.md](./README.md), para facilitar a leitura de quem fala português; em caso de qualquer divergência, **prevalece a versão em inglês** (atualizada a cada publicação).
35
+
36
+ ---
37
+
38
+ ## O problema
39
+
40
+ Toda sessão de IA começa do zero. Você reexplica seu projeto, suas decisões de design, as conclusões da pesquisa da semana passada. Os recursos de "memória" dos fornecedores ([Claude Memory](https://www.anthropic.com/news/memory-and-tool-use), [ChatGPT Memory](https://openai.com/index/memory-and-new-controls-for-chatgpt/), a memória do Cursor) prendem seu conhecimento na nuvem de um único fornecedor — e o esquecem de novo assim que você troca de ferramenta. **Seu conhecimento não para de começar de novo.**
41
+
42
+ ## A solução
43
+
44
+ Seu vault do Obsidian se torna **memória de longo prazo persistente e consultável** para qualquer agente compatível com MCP. Uma instalação — seu conhecimento fica instantaneamente acessível a partir do Claude Code, Claude Desktop, Cursor, GPT personalizado do ChatGPT, Codex, OpenClaw e todos os demais clientes MCP. Arquivos markdown simples **que são seus**, indexados localmente, pesquisados com toda a pilha moderna de recuperação de informação (IR) e relembrados em cada sessão e em cada modelo.
45
+
46
+ **Ancorado, não extraído.** Ferramentas de memória conversacional (mem0, Zep, Supermemory, Memobase) *extraem* fatos dos seus logs de chat para um armazenamento à parte que você não pode ler. O enquire-mcp é o inverso: ele é **ancorado no conhecimento que você já escreveu** — suas próprias notas `.md`, literais, com citações — de modo que a recuperação é auditável, editável em qualquer editor e nunca um resumo com perdas de um chat que você lembra pela metade. E, diferentemente das plataformas de memória de ***frota*** do lado do servidor — armazenamentos em nuvem multi-inquilino que parafraseiam o tráfego dos agentes para um banco de dados compartilhado — o enquire é **monousuário e local-first**: um único vault que pertence inteiramente a você e que você mesmo pode ler, editar e apagar, com zero chamadas à nuvem durante o serve. (Essa crítica de "extraído" é específica do grupo de memória de chat — não se aplica a ferramentas de grafo de conhecimento / ETL como o cognee, nem a pares de busca pessoal como o Khoj.)
47
+
48
+ **Ancorado — e consciente da atualidade.** Relembrar um fato é metade do problema; saber se ele ainda é *verdadeiro* é a outra metade. O [benchmark Memora](https://arxiv.org/abs/2604.20006) (abr. 2026) mostrou que sistemas de memória falham sistematicamente na reutilização de fatos desatualizados — relembrando uma nota de um ano atrás como se tivesse sido escrita hoje. Como a memória do enquire *são* seus arquivos markdown reais, cada resultado de busca carrega `age_days` + uma flag `stale` derivada da hora de última modificação ao vivo da nota, e você pode optar pelo ranqueamento ponderado por recência (`--recency-weight`) para que as notas mais recentes apareçam primeiro. Seu conhecimento, consciente da atualidade — não um bloco atemporal.
49
+
50
+ > **O que torna o enquire-mcp diferente**:
51
+ > 1. **Neutro em relação a fornecedores.** Sua memória vive em arquivos `.md`. Troque do Claude para o Cursor — sua memória vem junto.
52
+ > 2. **Recuperação de ponta.** BM25 híbrido + embeddings multilíngues + reranker cross-encoder BGE fundidos via RRF, escalados com HNSW + quantização int8. A mesma pilha de IR que uma startup de busca construiria — open-source, em um único binário.
53
+ > 3. **Zero chamadas à nuvem durante o serve.** Modelos em cache local (download único do HuggingFace). O conteúdo do seu vault nunca sai da sua máquina. Seguro para ambientes isolados (air-gap) por padrão.
54
+ > 4. **Recuperação consciente da atualidade.** Cada resultado informa quão antiga é a nota; o reranqueamento por recência opcional permite que um agente prefira conhecimento recente e sinalize fatos desatualizados para reverificação — a fronteira consciente do esquecimento, construída sobre o `mtime` que seus arquivos já têm.
55
+
56
+ **46 ferramentas · 19 prompts MCP · 1329+ testes unitários · 50+ idiomas · v3.10.x estável · vinculado a semver · MIT · proveniência de build no npm (SLSA L2).**
57
+
58
+ ---
59
+
60
+ ## 🏆 Por que é o melhor
61
+
62
+ **Seis recursos que nenhum outro Obsidian-MCP tem** (GraphRAG-light, execução autônoma de `.base`, HyDE, quantização int8, late-chunking, harness de avaliação embutido). **Mais toda a pilha moderna de IR** (BM25 + embeddings de ML + reranking por cross-encoder + HNSW) da qual os concorrentes entregam, no máximo, um ou dois itens. Lado a lado:
63
+
64
+ | Recurso | enquire-mcp | Smart Connections | Outros Obsidian-MCPs |
65
+ |---|:---:|:---:|:---:|
66
+ | Recuperação híbrida (BM25 + TF-IDF + embeddings de ML, fundidos via RRF) | ✅ | ❌ | ❌ |
67
+ | **Reranking por cross-encoder** (BGE, +15.5 NDCG@10 medido) | ✅ | ❌ | ❌ |
68
+ | **Índice vetorial HNSW** (top-K em menos de 10 ms, persistido) | ✅ | ❌ | ❌ |
69
+ | **Quantização vetorial int8** (embed-db ~4× menor) | ✅ | ❌ | ❌ |
70
+ | **Late-chunking** embeddings com janela de contexto | ✅ | ❌ | ❌ |
71
+ | **PDFs mesclados na busca híbrida** (citações `[page: N]`) | ✅ | ❌ | ❌ |
72
+ | **OCR para PDFs digitalizados** (Tesseract.js, multilíngue) | ✅ | ❌ | ❌ |
73
+ | **Graph-boost de wikilinks** como sinal de recuperação | ✅ | ❌ | ❌ |
74
+ | **Busca semântica multilíngue** (50+ idiomas, no dispositivo) | ✅ | 💰 pago | ❌ |
75
+ | **Harness de avaliação de qualidade de recuperação embutido** (NDCG, Recall, MRR, matriz A/B) | ✅ | ❌ | ❌ |
76
+ | **MCP remoto** sobre HTTP + autenticação por bearer + sessões com estado | ✅ | ❌ | parcial |
77
+ | **Observabilidade por sinal** em cada resultado | ✅ | ❌ | ❌ |
78
+ | **MCP-native** (Claude · Cursor · ChatGPT · Codex · OpenClaw · qualquer cliente) | ✅ | ❌ só Obsidian | varia |
79
+ | **Filtro de privacidade** verificado em cada caminho de busca + escrita | ✅ | n/d | ❌ |
80
+ | **46 ferramentas de produção** (34 ferramentas de leitura sempre ativas + 4 opcionais + 7 escritas restritas + 1 ferramenta de feedback) | ✅ | n/d | varia |
81
+ | **GraphRAG-light** (detecção de comunidades de wikilinks via modularidade de Louvain) | ✅ **só aqui** | ❌ | ❌ |
82
+ | **Execução autônoma de consultas `.base`** (funciona sem o Obsidian em execução) | ✅ **só aqui** | ❌ | ❌ delega ao Obsidian |
83
+ | **Recuperação HyDE** (Gao et al. 2023) + decomposição em sub-perguntas | ✅ **só aqui** | ❌ | ❌ |
84
+ | **1329 testes unitários · 9 gates obrigatórios + 5 consultivos de CI por PR** | ✅ | n/d | raro |
85
+ | **Proveniência de build assinada** (npm + Sigstore, SLSA Build L2) | ✅ | n/d | ❌ |
86
+ | **Superfície pública vinculada a semver** ([STABILITY.md](./STABILITY.md)) | ✅ | n/d | ❌ |
87
+ | Autônomo (sem necessidade de plugin do Obsidian) | ✅ | ❌ exige Obsidian | varia |
88
+ | Licença | MIT, grátis | proprietária, paga | varia |
89
+
90
+ <sub>Comparação baseada nas capacidades públicas de cada projeto a partir do v3.8.x estável (snapshot inicial v3.7.0 / 15/05/2026; atualizada no v3.8.4). O Smart Connections é um plugin pago do Obsidian (não um servidor MCP). "Outros Obsidian-MCPs" refere-se a servidores Obsidian-MCP open-source públicos no GitHub no momento da redação. Os benchmarks públicos de recuperação ponta a ponta do enquire-mcp estão publicados em <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a> — o delta medido do `rerank-bge` é +24.7 MRR / +15.5 NDCG@10 sobre o híbrido puro em uma ablação de 60 consultas.</sub>
91
+
92
+ > Afirmação estratégica: o enquire-mcp é o backend open-source para [Wikis de LLM ao estilo Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) sobre o seu vault do Obsidian existente. Conhecimento que se acumula, rastreável até as fontes.
93
+
94
+ ---
95
+
96
+ ## ⚡ Início rápido
97
+
98
+ ```bash
99
+ npm install -g @oomkapwn/enquire-mcp
100
+ enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
101
+ ```
102
+
103
+ Conecte a qualquer cliente MCP:
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "obsidian": {
109
+ "command": "npx",
110
+ "args": ["-y", "@oomkapwn/enquire-mcp", "serve", "--vault", "/path/to/vault"]
111
+ }
112
+ }
113
+ }
114
+ ```
115
+
116
+ 📂 Configurações prontas para uso em [`examples/`](./examples/) — **Claude Desktop**, **Cursor**, **GPT personalizado do ChatGPT** (MCP remoto sobre HTTP), além de um conjunto de consultas de exemplo para o harness de avaliação.
117
+
118
+ **Quer todo o poder híbrido?** Onboarding em um comando, sem fricção:
119
+
120
+ ```bash
121
+ enquire-mcp setup --vault <path> # baixa o modelo, constrói FTS5 + embed-db
122
+ enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
123
+ enquire-mcp doctor --vault <path> # verificação de saúde com código de cores ✓/⚠/✗
124
+ ```
125
+
126
+ ---
127
+
128
+ ## 🤖 Configure no seu agente de IA — prompts para copiar e colar
129
+
130
+ Depois que o `enquire-mcp` estiver instalado, cole estes prompts no seu agente para que ele saiba que o vault está disponível como memória.
131
+
132
+ <details>
133
+ <summary><b>Claude Code (terminal)</b> — adicione o servidor MCP + primeiro prompt</summary>
134
+
135
+ ```bash
136
+ # Adicione o servidor MCP à sua configuração do Claude Code (uma única vez)
137
+ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
138
+ ```
139
+
140
+ Depois, em qualquer sessão do Claude Code:
141
+
142
+ > Você agora tem ferramentas `obsidian_*` que buscam e leem o meu vault do Obsidian — a minha memória de longo prazo. Antes de responder perguntas sobre projetos, decisões, pessoas ou contexto técnico, chame `obsidian_search` com os termos relevantes. Cite cada fato com a nota de origem (e `[page: N]` para PDFs). Se você não encontrar uma nota relevante, diga isso — não chute.
143
+
144
+ </details>
145
+
146
+ <details>
147
+ <summary><b>Claude Desktop</b> — arquivo de configuração + primeiro prompt</summary>
148
+
149
+ Coloque o [`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json) na configuração MCP do Claude Desktop (edite o caminho do vault primeiro). Reinicie o Claude Desktop e então:
150
+
151
+ > Você tem o meu vault do Obsidian conectado como memória pesquisável via ferramentas `obsidian_*`. Sempre verifique `obsidian_search` primeiro quando eu perguntar sobre qualquer coisa nas minhas notas — contexto de reuniões, pesquisa, decisões, entradas de diário. Cite o caminho da nota de origem em cada fato.
152
+
153
+ </details>
154
+
155
+ <details>
156
+ <summary><b>Cursor</b> — configuração MCP stdio + regra do agente</summary>
157
+
158
+ Coloque o [`examples/cursor-mcp.json`](./examples/cursor-mcp.json) em `~/.cursor/mcp.json` (edite o caminho do vault). No seu arquivo `.cursorrules` ou no chat:
159
+
160
+ > Antes de sugerir código que toque em um tópico sobre o qual eu possa ter notas (decisões de arquitetura, contratos de API, avaliações de fornecedores), chame `obsidian_search` primeiro. Trate o meu vault do Obsidian como contexto autoritativo.
161
+
162
+ </details>
163
+
164
+ <details>
165
+ <summary><b>GPT personalizado do ChatGPT</b> — MCP remoto sobre HTTP</summary>
166
+
167
+ Siga [`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md) para expor `serve-http` por um túnel com autenticação por bearer. Nas instruções do seu GPT personalizado:
168
+
169
+ > Você tem acesso de leitura ao meu vault do Obsidian via a família de ferramentas `obsidian_*`. Busque antes de responder qualquer coisa que possa estar nas minhas notas; cite o caminho do arquivo de origem em cada afirmação.
170
+
171
+ </details>
172
+
173
+ <details>
174
+ <summary><b>OpenClaw / Codex / qualquer outro cliente MCP</b></summary>
175
+
176
+ O mesmo comando `npx -y @oomkapwn/enquire-mcp serve --vault <path>` funciona para qualquer cliente compatível com MCP. Consulte a documentação de configuração MCP do próprio cliente para saber onde colocar a entrada do servidor e, então, use qualquer um dos prompts acima.
177
+
178
+ </details>
179
+
180
+ **Regra de agente reutilizável** (coloque em qualquer `AGENTS.md` / `CLAUDE.md` / `.cursorrules` para que o agente saiba *quando* recorrer ao vault):
181
+
182
+ > Quando minha pergunta tocar nas minhas próprias notas, decisões, projetos, pessoas ou pesquisas, **busque no meu vault do Obsidian primeiro** via as ferramentas `obsidian_*` (comece com `obsidian_search`) e cite a nota de origem em cada fato. Prefira o enquire para recall *conceitual / cross-language / "o que eu disse sobre X"*; use `grep` / `ripgrep` simples para strings literais exatas. Se nada relevante retornar, diga isso — não chute.
183
+
184
+ ### Exemplos de consultas que funcionam bem
185
+
186
+ - *"Encontre toda nota em que discuti estratégia de precificação e resuma a evolução."* — a fusão RRF + reranker lida com "evolução" de forma semântica
187
+ - *"Qual foi minha decisão entre PostgreSQL e MongoDB? Cite a daily note."* — o graph-boost de wikilinks faz emergir o documento central de decisão
188
+ - *"Анализируй мои заметки о RAG за последние 3 месяца"* — embeddings multilíngues + filtro de data por frontmatter
189
+ - *"Quais páginas do PDF do paper do LLaMA-3 falam sobre escala?"* — PDFs mesclados na busca com citações `[page: N]`
190
+ - *"Mostre as comunidades temáticas no meu vault de pesquisa — quais temas venho explorando?"* — `obsidian_get_communities` (GraphRAG-light)
191
+
192
+ ---
193
+
194
+ ## 🧠 Casos de uso
195
+
196
+ **1 — Memória de longo prazo para agentes de IA.** Conecte o seu vault do Obsidian a qualquer agente compatível com MCP (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw). O agente passa a ter recall semântico durável sobre cada nota de reunião, entrada de diário, registro de pesquisa e documento de decisão que você já escreveu — entre sessões, modelos e fornecedores. Diferentemente do `Claude Memory` ou do `ChatGPT Memory`, seu conhecimento não fica preso na nuvem de um fornecedor; ele vive em markdown simples que você possui e pode migrar livremente.
197
+
198
+ **2 — Base de conhecimento pessoal / segundo cérebro.** A recuperação híbrida faz emergir a nota certa para *qualquer* formulação, em qualquer um dos mais de 50 idiomas. Pergunte em inglês sobre uma entrada de diário em russo de 2 anos atrás e obtenha o resultado certo. O graph-boost de wikilinks reranqueia notas que ficam no centro do seu grafo de conhecimento. O GraphRAG-light faz emergir comunidades temáticas — descubra conexões que você esqueceu que fez. PDFs se mesclam na busca com citações `[page: N]`, de modo que papers de pesquisa e transcrições de reuniões se tornam memória de primeira classe.
199
+
200
+ **3 — RAG agêntico / engenharia de contexto.** O `obsidian_search` expõe pontuações por sinal, de modo que o agente vê *por que* cada resultado foi ranqueado. O HyDE pré-reescreve consultas vagas em respostas hipotéticas ricas antes da recuperação. A decomposição em sub-perguntas lida com perguntas multi-hop ("como nossa estratégia de precificação evoluiu e qual foi a reação dos clientes?") quebrando-as em sub-consultas independentes e fundindo os resultados. O harness de avaliação embutido (NDCG / Recall / MRR) permite medir a qualidade da recuperação nas suas próprias consultas, em vez de confiar em benchmarks de fornecedores.
201
+
202
+ ---
203
+
204
+ ## 🚫 Quando o enquire-mcp *não* é a ferramenta certa
205
+
206
+ Não-objetivos honestos — recorra a outra coisa quando:
207
+
208
+ - **Você quer busca literal por string / regex.** `ripgrep` / `grep` é mais rápido e exato para "encontre este token preciso". O enquire brilha no recall *conceitual* — sinônimos, cross-language, "o que eu disse sobre X". Use os dois: `rg` para o literal, enquire para o significado.
209
+ - **Seu conhecimento vive em logs de chat, não em notas.** O enquire é *ancorado* no markdown que você escreveu. Ferramentas de memória conversacional (mem0, Zep, Supermemory) que *extraem* fatos de transcrições de chat para um armazenamento à parte são uma categoria diferente — veja a [comparação](./docs/COMPARISON.md).
210
+ - **Você precisa de busca multiusuário / hospedada / sincronizada.** O enquire é local-first e de vault único por design — sem índice multi-inquilino do lado do servidor.
211
+ - **Suas fontes não são Markdown ou PDF.** `.md` / `.canvas` / `.base` / `.pdf` são de primeira classe; outros formatos precisam de conversão primeiro.
212
+ - **Você quer uma GUI ou um plugin do Obsidian dentro do app.** O enquire é um servidor MCP / CLI headless — ele *complementa* o Obsidian, não é um. (O Smart Connections é a opção de plugin dentro do app.)
213
+ - **Você precisa de busca em submilissegundos sobre milhões de notas.** O HNSW dá top-K em menos de 10 ms em grande escala, mas o enquire mira vaults pessoais / de equipe, não corpora de escala web.
214
+
215
+ ---
216
+
217
+ ## 📖 Referência da API
218
+
219
+ **[Referência da API auto-gerada em oomkapwn.github.io/enquire-mcp](https://oomkapwn.github.io/enquire-mcp/)** — cada ferramenta, prompt e helper exportado com TSDoc completo (`@param` / `@returns` / `@example`). Reconstruída a partir do código a cada push para `main` via [`publish-docs.yml`](https://github.com/oomkapwn/enquire-mcp/blob/main/.github/workflows/publish-docs.yml) (TypeDoc → GitHub Pages). Sem desvio por construção: o mesmo TSDoc que agentes de IA e IDEs veem é o que é publicado.
220
+
221
+ ---
222
+
223
+ ## 🏗️ Como a recuperação funciona
224
+
225
+ ```mermaid
226
+ graph LR
227
+ Q[Query] --> S[obsidian_search]
228
+ S --> BM25[BM25 / FTS5]
229
+ S --> TFIDF[TF-IDF cosine]
230
+ S --> EMB[ML embeddings<br/>HNSW]
231
+ BM25 --> RRF{RRF fusion<br/>k=60}
232
+ TFIDF --> RRF
233
+ EMB --> RRF
234
+ RRF --> GB[Graph boost<br/>α × in-degree]
235
+ GB --> RR[BGE cross-encoder<br/>reranker]
236
+ RR --> R[Ranked hits<br/>per_signal observability]
237
+ ```
238
+
239
+ O `obsidian_search` detecta automaticamente os sinais disponíveis e degrada de forma graciosa. O graph-boost de wikilinks reranqueia o top-K via PageRank personalizado de 1 passo. O reranking opcional por cross-encoder repontua o top-N para +15.5 NDCG@10 medido. Cada resultado retorna `per_signal: { bm25, tfidf, embeddings }` para você ver POR QUE ele foi ranqueado.
240
+
241
+ | Nível | Configuração | O que você obtém |
242
+ |---|---|---|
243
+ | **1** | `serve --vault <path>` | TF-IDF cosine (zero configuração, instantâneo) |
244
+ | **2** | + `--persistent-index` | + BM25 / FTS5 (top-10 em menos de 100 ms) |
245
+ | **3** | + `setup` (baixa o modelo + constrói o embed-db) | + embeddings de ML multilíngues |
246
+ | **4** | + `--enable-reranker` | + cross-encoder BGE (+15.5 NDCG@10 medido) |
247
+ | **5** | + `--use-hnsw` | + top-K em menos de 10 ms na escala de milhões de chunks |
248
+ | **6** | + `--include-pdfs` | + PDFs mesclados em tudo o que está acima |
249
+ | **7** | `serve-http --bearer-token …` | + MCP remoto (Claude.ai web, ChatGPT, Cursor HTTP, mobile) |
250
+
251
+ ---
252
+
253
+ ## 🛠️ Todas as 46 ferramentas
254
+
255
+ 46 ferramentas no total: 34 de leitura sempre ativas (incl. a `obsidian_search` guarda-chuva) + 4 de leitura opcionais + 7 escritas restritas + 1 de feedback em ciclo fechado. Referência completa: **[docs/api.md](./docs/api.md)**.
256
+
257
+ | Categoria | Ferramentas |
258
+ |---|---|
259
+ | **Busca e recuperação** | `obsidian_search` (guarda-chuva, fundida via RRF) · `obsidian_hyde_search` (aumentada com HyDE, v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
260
+ | **Wikilinks e grafo** | `obsidian_resolve_wikilink` · `obsidian_get_backlinks` · `obsidian_get_outbound_links` · `obsidian_get_note_neighbors` · `obsidian_get_unresolved_wikilinks` · `obsidian_find_path` · `obsidian_get_communities` (v3.4.0, GraphRAG-light) |
261
+ | **Frontmatter e Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
262
+ | **Ler e navegar** | `obsidian_read_note` · `obsidian_list_notes` · `obsidian_get_recent_edits` · `obsidian_stale_notes` · `obsidian_open_questions` · `obsidian_context_pack` · `obsidian_chat_thread_read` · `obsidian_open_in_ui` · `obsidian_stats` |
263
+ | **PDFs, Canvas e Bases** | `obsidian_read_pdf` · `obsidian_list_pdfs` · `obsidian_ocr_pdf` · `obsidian_read_canvas` · `obsidian_list_canvases` · `obsidian_list_bases` (v3.2.0) · `obsidian_read_base` (v3.2.0) · `obsidian_query_base` (v3.2.0) |
264
+ | **Escritas** (restritas por `--enable-write`) | `obsidian_create_note` · `obsidian_append_to_note` · `obsidian_rename_note` · `obsidian_replace_in_notes` · `obsidian_archive_note` · `obsidian_frontmatter_set` · `obsidian_chat_thread_append` |
265
+ | **Diagnóstico / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
266
+ | **Feedback** (opcional via `--feedback-weight`) | `obsidian_mark_useful` (ciclo fechado: registra quais notas relembradas ajudaram; impulsiona-as em buscas futuras) |
267
+
268
+ Mais 3 recursos MCP (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) e 19 **prompts MCP** (`summarize_recent_edits` · `review_tag` · `find_orphans` · `weekly_review` · `extract_todos` · `process_inbox` · `consolidate_tags` · `find_duplicates` · `lint_wiki` · `monthly_review` · `search_with_query_expansion` · `vault_synth` · `vault_wiki_compile` · `vault_lint_extended` · `vault_capture` · `vault_persona_search` · `vault_automation_setup` · `vault_research` · `vault_synthesis_page`) para fluxos comuns de trabalho com o vault.
269
+
270
+ ---
271
+
272
+ ## 🛡️ Confiança
273
+
274
+ | Superfície | Postura |
275
+ |---|---|
276
+ | **Padrão** | Somente leitura — `--enable-write` é necessário para as 7 ferramentas de escrita |
277
+ | **Privilégio mínimo** | `--disabled-tools` / `--enabled-tools` expõem uma superfície mínima (ex.: um agente de pesquisa somente leitura recebe apenas `obsidian_search` + `obsidian_read_note`) |
278
+ | **Segurança de caminho** | Verificação de realpath em cada leitura+escrita; symlinks que apontam para fora do vault são rejeitados |
279
+ | **Filtro de privacidade** | Verificado nos caminhos de recurso FTS5 + embed-db + chunk; fail-closed em allow-/deny-lists vazias |
280
+ | **Transporte HTTP** | Autenticação por bearer (SHA-256 de tempo constante + `timingSafeEqual`), rate-limit por token, CORS estrito |
281
+ | **Frontmatter** | `js-yaml@4` `load` (schema core YAML 1.2, seguro por padrão) — sem execução de código |
282
+ | **Arquivos de cache + índice** | chmod 0600, diretório pai 0700 |
283
+ | **CI** | **9 gates obrigatórios** de branch-protection: (1) `lint`, (2) `test` no Node 22, (3) `test` no Node 24, (4) `smoke`, (5) `audit`, (6) `coverage`, (7) `version-consistency`, (8) `docs`, (9) `oia`. **5 consultivos**: `test-macos` + `docker` (build do Dockerfile + smoke de introspecção `tools/list`) via `.github/workflows/ci.yml`; CodeQL ×2 + ações Analyze via [GitHub default-setup](https://docs.github.com/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-default-setup-for-code-scanning) (não em arquivos de workflow). O workflow de release reverifica que todos os 9 obrigatórios passaram no SHA marcado antes da publicação no npm. _v3.7.10 — `docs` (gate de geração TypeDoc) adicionado ao conjunto obrigatório. v3.7.13 — piso de `engines.node` elevado para `>=22.13.0` para casar com a matriz de CI. v3.8.0-rc.6 — `oia` (Outside-In Audit) promovido de consultivo._ |
284
+ | **Cobertura** | Linhas ≥86% · statements ≥82% · funções ≥75% · branches ≥74% (com gate) |
285
+ | **Releases** | npm + GitHub release por tag · semver · **proveniência de build assinada** (npm + Sigstore, SLSA Build L2; gerador L3 no roadmap) |
286
+ | **Estabilidade** | v3.0+ vinculado a semver — cada flag de CLI, nome de ferramenta, recurso MCP, prompt e símbolo exportado é contrato |
287
+
288
+ Postura completa: **[SECURITY.md](./SECURITY.md)** · Superfície de estabilidade: **[STABILITY.md](./STABILITY.md)** · Vulnerabilidades: `oomkapwn@gmail.com`.
289
+
290
+ ---
291
+
292
+ ## ❓ FAQ
293
+
294
+ **Preciso ter o Obsidian instalado?** Não. Lê `.md` + `.canvas` + `.pdf` diretamente. Funciona com qualquer vault no formato do Obsidian.
295
+
296
+ **Ele vai escrever no meu vault?** Não, a menos que você passe `--enable-write`. Todas as 7 ferramentas de escrita são restritas; as destrutivas suportam `dry_run`.
297
+
298
+ **Algum dado é enviado para algum lugar?** Somente no `enquire-mcp install-model` (baixa os pesos ONNX do HuggingFace, uma única vez). O modo serve nunca faz HTTP de saída. Embeddings + reranker rodam na CPU, localmente.
299
+
300
+ **Desempenho?** Build a frio do FTS5: ~5s/1k notas, ~30s/50k. Consulta BM25: <100ms sempre. Build de embedding: ~30ms/chunk no M1. **HNSW top-10: menos de 10 ms em qualquer escala.** Cold-start do serve: ~50ms com persistência do HNSW.
301
+
302
+ **Idiomas?** Padrão `paraphrase-multilingual-MiniLM-L12-v2` (50+ idiomas). Cross-encoder multilíngue. Validado ponta a ponta em vaults bilíngues russo + inglês. Tokenização CJK/tailandês/khmer via `Intl.Segmenter`.
303
+
304
+ **Rodar remotamente?** Sim — `serve-http` expõe o mesmo servidor sobre [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http). Coloque na frente um Tailscale Funnel ou Cloudflare Tunnel para HTTPS. Funciona com claude.ai web, GPT personalizado do ChatGPT, modo HTTP do Cursor, clientes MCP móveis. Veja **[docs/http-transport.md](./docs/http-transport.md)**.
305
+
306
+ ---
307
+
308
+ ## 🚀 Releases
309
+
310
+ **v3.0.0 — canal estável.** O roadmap de recuperação do v2.x está completo e a superfície pública agora é [vinculada a semver](./STABILITY.md). Resumo dos destaques:
311
+
312
+ `v2.0` recuperação híbrida (BM25+TF-IDF+embeddings via RRF) · `v2.6` MCP remoto · `v2.7-2.8` PDFs mesclados · `v2.9` reranker BGE · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` harness de avaliação · `v2.13` HNSW · `v2.14` sessões com estado · `v2.15` late-chunking · `v2.16` persistência do HNSW · `v2.17` quantização int8 · `v3.8.0` estável · `v3.8.7` endurecimento do transporte HTTP · **`v3.9.0` estável**: embed-sync do watcher de PDFs com OCR, atualização ao vivo do HNSW em memória em mudanças de arquivo, refill adaptativo do HNSW R-10 (fecha o under-return de >66% excluído). · **`v3.10` (`@rc`)**: atualidade consciente do esquecimento — flag `age_days` + `stale` + reranqueamento opcional `--recency-weight` + `obsidian_search` consciente de frontmatter.
313
+
314
+ Canal: `npm install @oomkapwn/enquire-mcp` → último estável (`@latest` = v3.10.x). Pré-lançamento: `npm install @oomkapwn/enquire-mcp@rc` (o release candidate mais recente — veja [CHANGELOG.md](./CHANGELOG.md)). Changelog completo: **[CHANGELOG.md](./CHANGELOG.md)** · Plano futuro: **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
315
+
316
+ ---
317
+
318
+ ## 🤝 Contribuindo
319
+
320
+ ```bash
321
+ git clone https://github.com/oomkapwn/enquire-mcp.git
322
+ cd enquire-mcp && npm install
323
+ npm test # suíte completa (1329 testes, ~12s)
324
+ npm run lint # zero avisos
325
+ npm run build # tsc → dist/
326
+ ```
327
+
328
+ Issues, PRs e ideias são bem-vindos. A branch protection exige revisão de PR em `main`.
329
+
330
+ ---
331
+
332
+ ## 📜 Licença
333
+
334
+ MIT. Feito por [Alex (@OomkaBear)](https://github.com/oomkapwn). Nomeado em homenagem ao [protótipo da WWW de Tim Berners-Lee de 1980](https://en.wikipedia.org/wiki/ENQUIRE) — o sistema de hipertexto original, antes da web. A especificação original era: você poderia perguntar qualquer coisa ao sistema. **O enquire-mcp traz isso para o seu vault.**