kObsidian
Primeiro servidor MCP de sistema de arquivos para vaults do Obsidian com uma camada LLM-Wiki sobreposta.
Documentação
kObsidian MCP
Servidor MCP com foco em filesystem para cofres Obsidian — com uma camada LLM-Wiki por cima.
Inspirado na ideia de LLM Wiki de Andrej Karpathy. Você seleciona as fontes; o LLM faz o trabalho de organização.
Instalação · Início rápido · Arquitetura · LLM Wiki · Ferramentas · Documentação
🧰 O único MCP Obsidian com workspaces.
vault.list/vault.selectpermite que um LLM descubra e alterne entre seus cofres Obsidian durante a sessão — sem reiniciar, sem editar configuração, sem passar caminhos por ferramenta. Compatível com versões anteriores aoOBSIDIAN_VAULT_PATH. Adicionado na v0.3.0. Veja docs/WORKSPACES.md.
Novidades na v0.3.7
Configure cada cofre de forma independente com .kobsidian.json: personalize pastas de wiki, nomes de arquivo, cabeçalhos e o limite de páginas desatualizadas sem compartilhar uma única configuração entre todos os cofres. A inserção de cabeçalhos notes.edit também preserva o espaçamento entre parágrafos e se junta a listas existentes de forma limpa.
Exemplo de configuração e notas de atualização.
Por que kObsidian
- Foco em filesystem. Opera diretamente no seu cofre. O Obsidian não precisa estar em execução para 55+ das 66 ferramentas.
- 66 ferramentas MCP tipadas em cofres, notas, links, tags, tarefas, Dataview, Canvas, Kanban, blocos cercados, Marp, Templates — todas validadas com Zod, com saída
structuredContente o conjunto completo de 4 dicas de anotação MCP (readOnlyHint,destructiveHint,idempotentHint,openWorldHint). vault.*multi-cofre (v0.3.0). O LLM podevault.listseus cofres Obsidian conhecidos (descobertos pelo registro do próprio Obsidian ou pelas variáveis de ambienteOBSIDIAN_VAULT_<NAME>) evault.selectentre eles durante a sessão. Totalmente compatível com versões anteriores:OBSIDIAN_VAULT_PATHcontinua sendo o padrão e os argumentosvaultPathpor chamada sempre vencem.- Orquestração LLM-Wiki — um namespace
wiki.*que transforma seu cofre em uma base de conhecimento em crescimento: ingira fontes, atualize automaticamente um índice + log pesquisável, verifique órfãos / links quebrados / páginas desatualizadas. O agente aplica referências cruzadas por meio de um contratoproposedEditspara que cada escrita fique visível na transcrição. - Ambos os transportes. stdio clássico para clientes MCP locais e Streamable HTTP (Hono) para remoto, com preflight CORS, tratamento
MCP-Protocol-Version, origem 403 e autenticação bearer opcional — tudo conforme a especificação de 2025-11-25. - Compatibilidade de esquema Claude Code (v0.3.5+, refinado na v0.3.6). As ferramentas anunciam JSON Schema 2020-12 tanto via stdio quanto via Streamable HTTP sem estado. Ferramentas com formato de união expõem seus campos e seletores ao cliente, enquanto o Zod ainda valida cada chamada e a saída estruturada. Veja detalhes de compatibilidade.
- Disponível em todos os lugares. npm (
npx -y kobsidian-mcp), pacotes.mcpbmultiplataforma para arrastar e soltar no Claude Desktop, umsmithery.yamlpara Smithery e umserver.jsonpara o MCP Registry. Cada artefato de release.mcpbé verificado pelo VirusTotal, com links anexados ao corpo do release.
Instalação
Escolha seu cliente abaixo. Cada cliente suporta o modo híbrido completo
— ferramentas com foco em filesystem (mais de 80 delas) funcionam apenas com o caminho
do cofre, e a mesma configuração pode simultaneamente carregar a chave da
API REST Local para desbloquear workspace.*, commands.* e DQL ao vivo via
dataview.query*. Defina todo o bloco de variáveis de ambiente uma vez por cliente e todos os
namespaces de ferramentas são ativados; deixe a chave REST em branco e as
ferramentas com foco em filesystem continuam funcionando.
| Variável de ambiente | Necessária para |
|---|---|
OBSIDIAN_VAULT_PATH | Obrigatória em todos os lugares. Caminho absoluto para o cofre. |
OBSIDIAN_API_URL | URL base do plugin Local REST API. Padrão https://127.0.0.1:27124. |
OBSIDIAN_API_VERIFY_TLS | Opcional. Padrão false (o plugin REST API usa um certificado autoassinado em 127.0.0.1). Defina true somente após confiar no certificado no chaveiro do seu sistema operacional. |
OBSIDIAN_REST_API_KEY | Chave bearer do plugin Local REST API — apenas para workspace.* / commands.* / dataview.query* ao vivo. |
Lista completa em docs/ENVIRONMENT.md. Troque npx
por bunx em qualquer lugar se quiser inicialização de ≈10 ms em vez de ≈200 ms.
Claude Code — claude mcp add
claude mcp add kobsidian -s user \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
No Windows, envolva o comando em cmd /c:
-- cmd /c npx -y kobsidian-mcp.
Claude Desktop — arrastar e soltar .mcpb
Baixe kobsidian-<platform>.mcpb do
último release e
arraste-o para o Claude Desktop. O instalador solicita o caminho do cofre +
URL/chave da API opcional. Cada artefato de release é verificado pelo VirusTotal — os
links estão no corpo do release.
Crie um localmente:
bun install
bun run build:compile # → dist/kobsidian (or .exe on Windows)
bun run bundle:mcpb # → kobsidian.mcpb
Codex CLI (OpenAI) — codex mcp add
codex mcp add kobsidian \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
Cursor — ~/.cursor/mcp.json ou deeplink
Edite ~/.cursor/mcp.json (ou o .cursor/mcp.json por projeto):
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
Ou entregue um deeplink de um clique aos seus usuários:
cursor://anysphere.cursor-deeplink/mcp/install?name=kobsidian&config=<base64-encoded-config>.
VS Code (Copilot) — code --add-mcp
code --add-mcp '{"name":"kobsidian","command":"npx","args":["-y","kobsidian-mcp"],"env":{"OBSIDIAN_VAULT_PATH":"/absolute/path/to/vault","OBSIDIAN_API_URL":"https://127.0.0.1:27124","OBSIDIAN_REST_API_KEY":"only-if-you-use-workspace-or-commands-tools"}}'
Ou crie .vscode/mcp.json no seu workspace com o mesmo formato sob
uma chave de nível superior servers.
Gemini CLI — gemini mcp add
gemini mcp add kobsidian \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools \
-- npx -y kobsidian-mcp
Ou edite manualmente ~/.gemini/settings.json sob mcpServers.
Antigravity (Google) — mcp_config.json
Edite ~/.gemini/antigravity/mcp_config.json
(Windows: %USERPROFILE%\.gemini\antigravity\mcp_config.json):
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
Zed — settings.json sob context_servers
Em ~/.config/zed/settings.json:
{
"context_servers": {
"kobsidian": {
"source": "custom",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
OpenCode — opencode.json sob mcp
{
"mcp": {
"kobsidian": {
"type": "local",
"command": ["npx", "-y", "kobsidian-mcp"],
"environment": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
Factory Droid — droid mcp add
droid mcp add kobsidian "npx -y kobsidian-mcp" \
--env OBSIDIAN_VAULT_PATH=/absolute/path/to/vault \
--env OBSIDIAN_API_URL=https://127.0.0.1:27124 \
--env OBSIDIAN_REST_API_KEY=only-if-you-use-workspace-or-commands-tools
Outros clientes (Cline, JetBrains AI, Continue, hosts personalizados) — JSON mcpServers genérico
Qualquer cliente MCP que leia um objeto mcpServers padrão aceitará:
{
"mcpServers": {
"kobsidian": {
"type": "stdio",
"command": "npx",
"args": ["-y", "kobsidian-mcp"],
"env": {
"OBSIDIAN_VAULT_PATH": "/absolute/path/to/vault",
"OBSIDIAN_API_URL": "https://127.0.0.1:27124",
"OBSIDIAN_REST_API_KEY": "only-if-you-use-workspace-or-commands-tools"
}
}
}
}
"type": "stdio" é opcional em clientes que inferem o transporte a partir de
command (Claude Code), mas obrigatório no Claude Desktop, Cursor,
VSCode e Antigravity — inclua-o para máxima portabilidade.
Smithery
smithery.ai renderiza uma interface de instalação diretamente de
smithery.yaml e coleta as quatro variáveis de ambiente para você
— caminho do cofre mais o trio opcional de URL / TLS / chave bearer da API REST Local,
para que o modo híbrido funcione imediatamente.
A partir do código-fonte (contribuindo / desenvolvendo)
git clone https://github.com/bezata/kObsidian
cd kObsidian
bun install
bun run dev:stdio # or dev:http
Plugins do Obsidian
O kObsidian é focado em filesystem — 55+ das 66 ferramentas funcionam em um diretório de cofre simples, sem plugins do Obsidian instalados. Os plugins abaixo só importam se você quiser os namespaces de ferramentas específicos que dependem deles.
Habilitando plugins da comunidade (uma vez, se ainda não estiverem ativados)
O Obsidian vem com plugins da comunidade desabilitados por padrão. Habilite-os uma vez por cofre:
- Abra seu cofre no Obsidian.
- Configurações (⚙️, canto inferior esquerdo) → Plugins da comunidade.
- Clique em Ativar plugins da comunidade.
- Navegar → pesquisar → Instalar → Ativar.
Necessários para as ferramentas com ponte REST
Obsidian Local REST API (por Adam Coddington) — necessário para:
workspace.*(activeFile, openFile, navigate, closeActiveFile, toggleEditMode)commands.*(execute, list)dataview.query/dataview.listByTag/dataview.listByFolder/dataview.table(DQL em tempo de execução — as ferramentas offlinedataview.fields.*/dataview.index/blocks.*funcionam sem ele)templates.usecomengine: "templater"
Configuração após a instalação:
- Ative o plugin.
- Abra as configurações dele — role até API key → clique em Copiar (ou Redefinir primeiro se quiser uma nova).
- Cole essa chave como
OBSIDIAN_REST_API_KEYno blocoenv:da configuração do seu cliente MCP. O padrãoOBSIDIAN_API_URL(https://127.0.0.1:27124) funciona imediatamente.
Deixe o plugin em execução enquanto usa as ferramentas com ponte REST — o endpoint é somente local (127.0.0.1), então nada sai da sua máquina.
Melhora (mas não é necessário para) namespaces de ferramentas específicos
| Plugin | Link | O que ele desbloqueia |
|---|---|---|
| Dataview | id=dataview | Todas as ferramentas dataview.* ainda funcionam no markdown bruto; o plugin Dataview é o que faz as consultas DQL em dataview.query* realmente executarem. Também renderiza seus campos e consultas visualmente dentro do Obsidian. |
| Templater | id=templater-obsidian | Renderização de templates em tempo de execução via API REST (templates.use com engine:"templater"). O mecanismo offline de filesystem (templates.use com engine:"filesystem") e templates.list funcionam sem ele. |
| Marp | id=marp-slides | As ferramentas Marp marp.* analisam e editam markdown com front-matter Marp mesmo sem o plugin; o plugin é o que renderiza slides / exporta para PDF dentro do Obsidian. |
| Kanban | id=obsidian-kanban | As ferramentas kanban.* leem/escrevem o formato de quadro em markdown simples independentemente do plugin; o plugin é o que renderiza o quadro como colunas arrastáveis dentro do Obsidian. |
| Tasks | id=obsidian-tasks-plugin | As ferramentas tasks.* entendem a sintaxe de emojis do plugin Tasks (📅 ⏳ 🛫 ✅ 🔼 🔁) independentemente do plugin; o plugin é o que fornece filtragem / consulta / alternância dentro do Obsidian. |
Os links
obsidian://show-plugin?id=…saltam direto para o plugin no navegador integrado do Obsidian — clique em um com o Obsidian aberto e ele faz deep-link para a tela de instalação.
Resumo
| Você quer … | Mínimo necessário |
|---|---|
Usar notes.* / tags.* / links.* / stats.vault / tasks.* / wiki.* / kanban.* / blocks.* / marp.* / canvas.* / templates.list + templates.use (engine:"filesystem") / offline dataview.* | Apenas um caminho de vault. Nenhum plugin necessário. |
Usar workspace.* / commands.* | + Plugin Local REST API + variável de ambiente da chave de API |
Executar consultas DQL ao vivo (dataview.query / dataview.listBy* / dataview.table) | + Local REST API + Dataview |
| Executar modelos Templater em tempo de execução | + Local REST API + Templater |
Nenhuma combinação de plugins faz o kObsidian depender do Obsidian estar em execução — as ferramentas com ponte REST apenas retornam um erro claro se o plugin não estiver acessível, e as ferramentas baseadas em sistema de arquivos continuam funcionando.
Início rápido
Antes da primeira sessão — o kObsidian funciona em um vault Obsidian básico, mas habilitar alguns plugins do Obsidian desbloqueia toda a superfície de ferramentas. Veja Plugins do Obsidian abaixo para a configuração de 5 minutos (Local REST API, Dataview, Templater, Marp, Kanban, Tasks). Pule se você só precisa das 80+ ferramentas baseadas em sistema de arquivos.
Uma vez instalado, uma sessão típica começa com três prompts em linguagem
natural. As ferramentas wiki.* + as habilidades .claude cuidam do resto.
You: "Set up a wiki in this vault."
LLM: wiki.init → wiki/{Sources,Concepts,Entities}/ + index.md + log.md + wiki-schema.md
You: "Ingest this: https://… (paper on Memex)"
LLM: wiki.ingest → creates wiki/Sources/as-we-may-think.md + log entry
returns proposedEdits:
- insertAfterHeading index.md#Sources
- createStub Concepts/memex.md
- createStub Entities/vannevar-bush.md
LLM applies each via notes.* (you see every write in the transcript)
You: "What does the wiki say about memex vs hypertext?"
LLM: wiki.query memex → top-ranked pages
notes.read on each → cited synthesis
offers to file the synthesis back via wiki.summaryMerge
You: "Audit the wiki."
LLM: wiki.lint → {orphans, brokenLinks, stale, missingPages, tagSingletons, indexMismatch}
proposes concrete fixes; applies after you confirm
Loop completo, contratos de frontmatter e o design proposedEdits em
docs/wiki.md.
Exemplos de casos de uso
As mesmas primitivas cobrem vários tipos reais de base de conhecimento.
Três exemplos práticos abaixo; tutoriais mais longos em docs/examples.md.
A. Wiki de pesquisa pessoal
You: "Ingest this paper on in-context learning: <url or pasted markdown>"
LLM: wiki.ingest title="In-Context Learning — A Survey" sourceType=paper
tags=[icl, prompting] relatedConcepts=[In-Context Learning, Few-Shot Prompting]
relatedEntities=[Brown 2020]
→ wiki/Sources/in-context-learning-a-survey.md
→ proposedEdits:
• createStub wiki/Concepts/in-context-learning.md
• createStub wiki/Concepts/few-shot-prompting.md
• createStub wiki/Entities/brown-2020.md
• insertAfterHeading wiki/index.md#Sources
LLM applies each via notes.create / notes.edit (mode: "after-heading").
B. Registros de Decisão de Arquitetura (ADRs) para um código-base
Modele cada ADR como uma Fonte, padrões arquiteturais como Conceitos, e serviços / equipes / bibliotecas como Entidades. A wiki se torna seu arquivo de ADRs com links cruzados que você nunca precisa manter manualmente.
You: "Record ADR-004: we're switching internal service comms from REST
to gRPC. Context: <paste>"
LLM: wiki.ingest title="ADR-004 — gRPC for internal service comms"
sourceType=note tags=[adr, architecture, rpc]
relatedConcepts=[gRPC, Service Mesh, Internal RPC]
relatedEntities=[order-service, payment-service, inventory-service]
→ wiki/Sources/adr-004-grpc-for-internal-service-comms.md
→ proposedEdits:
• createStub wiki/Concepts/grpc.md
• createStub wiki/Concepts/service-mesh.md
• insertAfterHeading wiki/Entities/order-service.md#Notable Facts
• insertAfterHeading wiki/Entities/payment-service.md#Notable Facts
• …
Three weeks later —
You: "Why did we pick gRPC for internal comms?"
LLM: wiki.query "grpc internal comms"
notes.read top matches
→ "Per [[wiki/Sources/adr-004-grpc-for-internal-service-comms.md|ADR-004]],
chosen over REST because of native streaming + typed schemas; tradeoff
accepted: browser clients still use REST via an edge gateway
([[wiki/Concepts/service-mesh.md]])."
C. Wiki de código-base (documentos de design + post-mortems + RFCs)
Equipes de engenharia abandonam wikis porque ninguém as atualiza. Deixe o LLM fazer isso. Ingira documentos de design, RFCs e post-mortems como Fontes; padrões arquiteturais se tornam Conceitos; serviços e equipes se tornam Entidades.
You: "We had an incident today — payment-service timeouts cascaded
into order-service. Here's the post-mortem: <paste>"
LLM: wiki.ingest title="Postmortem 2026-04-10 — Payment timeouts cascade"
sourceType=other tags=[postmortem, incident, reliability]
relatedConcepts=[Circuit Breaker, Cascade Failure, Timeout Budget]
relatedEntities=[payment-service, order-service]
→ wiki/Sources/postmortem-2026-04-10-payment-timeouts-cascade.md
→ proposedEdits:
• createStub wiki/Concepts/circuit-breaker.md
• createStub wiki/Concepts/cascade-failure.md
• insertAfterHeading wiki/Entities/payment-service.md#Notable Facts
• insertAfterHeading wiki/Entities/order-service.md#Notable Facts
Periodic housekeeping —
You: "Audit the codebase wiki."
LLM: wiki.lint
→ 3 orphan RFCs (unlinked from any Concept; link or archive?)
→ 1 broken link: [[wiki/Entities/legacy-auth-service.md]]
(deprecated in Q1; remove the link from
[[wiki/Sources/adr-002-session-migration.md]]?)
→ 4 post-mortems past the 180-day stale threshold — tag with
"needs-review" or re-ingest with updated lessons-learned?
→ 2 tag singletons: `retry-logic` (merge into `retry-policy`?),
`observability` (first use; keep).
Por que isso funciona para equipes de engenharia
- O contrato
proposedEditssignifica que cada escrita de referência cruzada é visível na transcrição — sem corrupção silenciosa do vault por uma alucinação do LLM sobre quais serviços uma decisão afeta. - O formato de log pesquisável (
## [YYYY-MM-DD] ingest | ADR-004 …) tornagrep '^## \[' wiki/log.md | tail -20uma consulta válida de "o que a equipe decidiu recentemente". wiki.lintrevela links quebrados para serviços que foram descontinuados há meses — a contabilidade que humanos nunca conseguem fazer.
Arquitetura
┌──────────────────────────────────────────────────────────────────────┐
│ MCP Clients │
│ Claude Code · Claude Desktop · Cursor · VSCode · Antigravity · Zed │
│ JetBrains AI · Cline · Continue · ChatGPT · Smithery · … │
└────────────────────────────┬─────────────────────────────────────────┘
│ JSON-RPC 2.0 · MCP 2025-11-25
┌───────────────────┴──────────────────────┐
▼ ▼
┌──────────────────┐ ┌─────────────────────────┐
│ stdio transport │ │ Streamable HTTP (Hono) │
│ │ │ + OPTIONS / CORS │
│ │ │ + MCP-Protocol-Version │
│ │ │ + Origin 403 / bearer │
└────────┬─────────┘ └────────┬────────────────┘
│ │
└──────────────────┬───────────────────┘
▼
┌──────────────────────────────────┐
│ McpServer │
│ ┌────────────┐ ┌─────────────┐ │
│ │ 90 Tools │ │ 4 Resources │ │
│ └────────────┘ └─────────────┘ │
│ ┌────────────┐ ┌─────────────┐ │
│ │ 3 Prompts │ │ structured │ │
│ │ │ │ content │ │
│ └────────────┘ └─────────────┘ │
└────────────┬─────────────────────┘
│
▼
┌──────────────────────────────────┐
│ Domain layer (pure) │
│ notes · links · tags · tasks │
│ dataview · canvas · kanban │
│ blocks · marp · templates │
│ wiki/ orchestration │
└──────┬─────────────────┬─────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────────────┐
│ vault/ (FS) │ │ Obsidian Local REST │
│ authoritative│ │ API plugin (optional)│
└──────────────┘ └──────────────────────┘
Mapa completo de módulos em docs/architecture.md.
LLM Wiki (60 segundos)
A parte tediosa de manter uma base de conhecimento não é ler ou pensar — é a contabilidade. Humanos abandonam wikis porque o fardo de manutenção cresce mais rápido que o valor. LLMs não ficam entediados.
O kObsidian implementa o padrão LLM Wiki do gist de Andrej Karpathy: uma base de conhecimento persistente e crescente que o LLM mantém. O vault se torna um Memex privado e curado (Vannevar Bush, 1945) onde referências cruzadas, manutenção de logs e lint são tarefas do LLM enquanto você foca em curar fontes e fazer perguntas.
"Em vez de apenas recuperar de documentos brutos no momento da consulta, o LLM constrói e mantém incrementalmente uma wiki persistente — uma coleção estruturada e interligada de arquivos markdown que fica entre você e as fontes brutas." — Andrej Karpathy
User drops a source
│
▼
┌──────────────────────┐ proposedEdits
│ wiki.ingest │ ─────────────────────┐
└──────────┬───────────┘ │
│ creates 1 file ▼
│ ┌──────────────────────────────┐
▼ │ LLM applies edits via │
wiki/Sources/ │ notes.edit (after-heading) │
<slug>.md │ notes.edit (replace) │
│ │ notes.create │
│ appends └──────────────────────────────┘
▼
wiki/log.md
Anytime: wiki.query → top pages → notes.read → cited synthesis
Periodic: wiki.lint → orphans · broken · stale · missing · tag-drift
Curate: wiki.summaryMerge — add cited section to concept/entity page
Layout padrão dentro do vault:
wiki/
├── Sources/ per-source summary pages
├── Concepts/ topic / idea pages (LLM-maintained)
├── Entities/ people / places / orgs / works
├── index.md categorized catalog (wiki.indexRebuild)
├── log.md greppable chronological log
└── wiki-schema.md vault-local copy of the contract
A decisão de design chave é que wiki.ingest nunca reescreve
referências cruzadas cegamente. Ele cria exatamente um arquivo (a página de
Fontes), anexa um arquivo (log.md) e retorna um array proposedEdits
que o agente aplica com as ferramentas notes.* existentes. Cada escrita é visível
na transcrição — então alucinações do LLM aparecem como edições revisáveis
em vez de corrupção silenciosa do vault.
Contrato completo em docs/wiki.md.
Habilidades do Claude Code
Quatro habilidades em skills/ são acionadas por linguagem natural:
wiki-bootstrap, wiki-ingest, wiki-query, wiki-lint. Copie ou
crie links simbólicos para ~/.claude/skills/ — veja
skills/README.md.
Superfície de ferramentas
66 ferramentas MCP em 16 namespaces (v0.2.5 consolidou de ~90 para 62;
v0.3.0 adicionou o namespace vault.* para suporte a múltiplos vaults — veja
CHANGELOG para o histórico completo). Inventário sempre atual
em docs/tool-inventory.json.
| Namespace | Contagem | Destaques |
|---|---|---|
vault.* | 4 | list · current · select · reset — descoberta de múltiplos vaults e troca de sessão (v0.3.0) |
notes.* | 8 | read (conteúdo/metadados/estatísticas via include) · create (nota ou pasta) · edit (substituir/anexar/preceder/após-cabeçalho/após-bloco) · frontmatter · delete · move · list · search |
tags.* | 4 | modify (adicionar/remover/substituir/mesclar) · search · analyze · list |
links.* | 8 | Backlinks · outgoing · broken · orphans · hubs · graph · health · connections |
stats.* | 1 | stats.vault (estatísticas por nota movidas para notes.read) |
tasks.* | 5 | Formato do plugin Tasks (📅 ⏳ 🛫 ✅ 🔼 🔁) — search · create · toggle · updateMetadata · stats |
dataview.* | 7 | query + wrappers de açúcar (listByTag/listByFolder/table) · index · fields.read · fields.write |
blocks.* | 3 | API unificada de blocos cercados (list/read/update) em dataview, dataviewjs, mermaid |
marp.* | 2 | read (deck/slides/slide) · update (slide/frontmatter) |
kanban.* | 3 | parse · stats · card (adicionar/mover/alternar) |
canvas.* | 4 | create · parse · connections · edit (add-node/add-edge/remove-node) |
templates.* | 2 | list · use (engine × action) |
workspace.* | 5 | Ponte de UI ao vivo do Obsidian (requer plugin Local REST API) |
commands.* | 2 | list (com consulta opcional) · execute |
wiki.* | 7 | init · ingest · log · indexRebuild · query · lint · summaryMerge |
system.* | 1 | version |
Anotações de segurança do cliente (MCP 2025-11-25):
| Dica | Ferramentas |
|---|---|
readOnlyHint: true (clientes podem aprovar automaticamente) | 47 |
destructiveHint: true (clientes solicitam confirmação mais firme) | 6 |
idempotentHint: true (seguro tentar novamente) | 12 |
openWorldHint: true (acessa fora do vault) | 16 |
Recursos MCP (endereçáveis por URI; qualquer cliente pode navegar sem chamadas de ferramenta):
kobsidian://wiki/index wiki/index.md
kobsidian://wiki/log wiki/log.md
kobsidian://wiki/schema wiki/wiki-schema.md
kobsidian://wiki/page/{+path} any Sources/Concepts/Entities page
Prompts MCP (para clientes que não consomem os arquivos skills/):
ingest-source, answer-from-wiki, health-check-wiki.
Detalhes em docs/tools.md.
Configuração
| Variável de ambiente | Padrão | Finalidade |
|---|---|---|
OBSIDIAN_VAULT_PATH | — | Obrigatória. Caminho absoluto para o vault. |
OBSIDIAN_API_URL | https://127.0.0.1:27124 | Base da Local REST API do Obsidian; apenas para workspace.* / commands.* / dataview.query*. |
OBSIDIAN_API_VERIFY_TLS | false | Defina true se você confiou no certificado autoassinado da REST API. |
OBSIDIAN_REST_API_KEY | — | Chave Bearer para o plugin REST API (se usado). |
KOBSIDIAN_HTTP_HOST | 127.0.0.1 | Host de bind para dev:http. |
KOBSIDIAN_HTTP_PORT | 3000 | Porta de bind para dev:http. |
KOBSIDIAN_HTTP_BEARER_TOKEN | — | Bearer opcional para o transporte HTTP Streamable. |
KOBSIDIAN_ALLOWED_ORIGINS | http://localhost,http://127.0.0.1 | Lista de permissões CORS separada por vírgulas. |
KOBSIDIAN_WIKI_ROOT | wiki | Diretório da wiki dentro do vault. |
KOBSIDIAN_WIKI_SOURCES_DIR | Sources | Páginas de resumo por fonte. |
KOBSIDIAN_WIKI_CONCEPTS_DIR | Concepts | Páginas de tópicos / ideias. |
KOBSIDIAN_WIKI_ENTITIES_DIR | Entities | Pessoas / lugares / organizações / obras. |
KOBSIDIAN_WIKI_INDEX_FILE | index.md | Nome do arquivo do catálogo da wiki. |
KOBSIDIAN_WIKI_LOG_FILE | log.md | Nome do arquivo de log da wiki. |
KOBSIDIAN_WIKI_SCHEMA_FILE | wiki-schema.md | Nome do arquivo de schema inicial. |
KOBSIDIAN_WIKI_STALE_DAYS | 180 | Limiar de páginas obsoletas wiki.lint. |
KOBSIDIAN_WIKI_INDEX_SOURCES_HEADING | Sources | Seção index.md que lista fontes; wiki.ingest arquiva novas entradas sob ela. |
KOBSIDIAN_WIKI_INDEX_CONCEPTS_HEADING | Concepts | Seção index.md que lista conceitos. |
KOBSIDIAN_WIKI_INDEX_ENTITIES_HEADING | Entities | Seção index.md que lista entidades. |
KOBSIDIAN_WIKI_CONCEPT_PAGE_HEADING | Discussion | Cabeçalho da página de conceito que recebe citações wiki.ingest / seções wiki.summaryMerge. |
KOBSIDIAN_WIKI_ENTITY_PAGE_HEADING | Notable Facts | Cabeçalho da página de entidade que recebe citações wiki.ingest / seções wiki.summaryMerge. |
KOBSIDIAN_VAULT_CONFIG_FILE | .kobsidian.json | Caminho relativo ao vault do arquivo de configuração por vault (abaixo). |
Cada ferramenta da wiki também aceita uma substituição wikiRoot por chamada, e wiki.ingest
aceita substituições indexHeading / conceptHeading / entityHeading por chamada
para vaults cujas páginas usam cabeçalhos localizados (ex.: ## Fontes). Quando um
cabeçalho alvo está ausente em uma página, a proposta degrada para append para que
ainda possa ser aplicada via notes.edit.
Arquivo de configuração por vault
Configurações que pertencem a um vault específico em vez do servidor — nomes de pastas,
nomes de arquivos e cabeçalhos de seção de uma wiki localizada — vão em um
.kobsidian.json na raiz do vault. Cada chave é opcional e tem precedência sobre a
variável de ambiente correspondente; um argumento de ferramenta por chamada tem precedência sobre ambos
(por chamada → .kobsidian.json → env → padrão).
{
"$schema": "https://raw.githubusercontent.com/bezata/kObsidian/main/docs/kobsidian.config.schema.json",
"wiki": {
"root": "wiki",
"sourcesDir": "Fontes",
"staleDays": 90,
"headings": {
"indexSources": "Fontes",
"indexConcepts": "Conceitos",
"indexEntities": "Entidades",
"conceptPage": "Discussão",
"entityPage": "Fatos Notáveis"
}
}
}
Chaves desconhecidas e JSON malformado são rejeitados com o caminho do arquivo no erro
para que erros de digitação apareçam imediatamente; vault.current retorna a configuração
efetiva sob config (ou o erro).
Documentação
Documentação localizada está disponível em 简体中文, 日本語 e 한국어.
| architecture.md | Stack, mapa de módulos, regras de camadas |
| wiki.md | Contrato LLM-Wiki, loop, frontmatter, categorias de lint |
| examples.md | Wiki de pesquisa pessoal · ADRs de engenharia · wiki de código-base — ponta a ponta |
| tools.md | Tabela de namespaces, anotações, recursos, prompts |
| SECURITY.md | Origin/CORS, varreduras VirusTotal, higiene de ambiente |
| TESTING.md | Comandos bun run … + cobertura |
| ENVIRONMENT.md | Cada variável de ambiente com padrões |
| MIGRATION.md | Notas de atualização |
Roadmap
Os próximos dois marcos são rastreados em TODO.md:
- v0.4 — Ponte Obsidian LiveSync. Acesso gratuito ao vault com criptografia ponta a ponta via plugin da comunidade Self-Hosted LiveSync (CouchDB / S3 / R2 / peer WebRTC) — para que um cliente MCP possa alcançar o mesmo vault do Obsidian de qualquer máquina que o usuário possua, sem que o Obsidian esteja ativo.
- v0.5 — Verificação de vaults com semântica cruzada. Uma ferramenta
wiki.crossCheckque reconcilia dois ou mais vaults pareados via LiveSync na camada da wiki, controlada por um novo campo de frontmatterschema_versionque usa a disciplina de semver do projeto como contrato de compatibilidade.TODO.mdtraz a motivação, a divisão de tarefas por marco e as regras de como os itens migram daí para o CHANGELOG.
Desenvolvimento
bun install
bun run typecheck
bun run lint
bun run test # 56 tests across 14 files
bun run build # node-target stdio.js + bun-target http.js
bun run inventory # regenerate docs/tool-inventory.json
Convenções do projeto em AGENTS.md.
Segurança e cadeia de suprimentos
-
Cada artefato de release
.mcpbé verificado pelo VirusTotal. O workflowReleaseenvia cada pacotekobsidian-<platform>.mcpbpara VirusTotal viacrazy-max/ghaction-virustotal@v4logo após a publicação do release e anexa os links de análise ao corpo do release. Qualquer usuário que instale a partir de um release do GitHub pode clicar e ver o relatório público do VirusTotal para o pacote da sua plataforma antes de executá-lo — sem necessidade de confiar no mantenedor. -
Reforço de transporte. Streamable HTTP valida
Origincontra uma lista de permissões (403 em caso de incompatibilidade), implementa preflight de CORS (OPTIONS /mcp→ 204 +Access-Control-*), exige ou usa como padrãoMCP-Protocol-Versione suporta autenticação bearer opcional viaKOBSIDIAN_HTTP_BEARER_TOKEN. stdio não tem superfície de rede. -
Versão mínima fixada do SDK.
@modelcontextprotocol/sdk@^1.26.0— mitigaGHSA-345p-7cg4-v4c7(vazamento de resposta entre clientes) eCVE-2026-0621(ReDoS do UriTemplate). Este repositório fixa1.30.0. -
npm Trusted Publishing. Nenhum
NPM_TOKENde longa duração é armazenado no repositório. O GitHub Actions gera um token OIDC de curta duração a cada push de tag e o CLI do npm o troca por um token de publicação único, com escopo restrito a este arquivo de workflow exato (.github/workflows/release.ymlno repositóriobezata/kObsidian). Atestados de proveniência são automáticos — cada versão publicada tem uma declaração de build com vínculo criptográfico apontando para a execução exata do Actions que a produziu. Forks, outros branches ou arquivos de workflow modificados não podem publicar — a declaração de audiência do OIDC não corresponderá.
Notas completas em docs/SECURITY.md.
Notas de compatibilidade
- Versão do protocolo —
2025-11-25(especificação MCP atual). Clientes HTTP semMCP-Protocol-Versionusam2025-03-26como fallback, conforme a especificação; versões explícitas, porém não suportadas, retornam 400. - Divisão do Dataview — ferramentas offline indexam blocos de frontmatter / inline / lista /
tarefa /
dataviewcercado /dataviewjscercado. O DQL em tempo de execução é delegado ao Obsidian + Dataview por meio da Local REST API. DataviewJS preserva a origem, mas não é executado dentro deste servidor. - Mermaid + Marp — apenas análise/edição com preservação da origem; a renderização é responsabilidade do cliente.
- Versão mínima do SDK —
@modelcontextprotocol/sdk@^1.26.0(mitigaGHSA-345p-7cg4-v4c7vazamento de resposta entre clientes +CVE-2026-0621ReDoS do UriTemplate). Este repositório fixa1.30.0.
Créditos
- Padrão LLM Wiki — gist do Andrej Karpathy. kObsidian é uma implementação concreta, em TypeScript e centrada no sistema de arquivos, dessa ideia.
- Memex — Vannevar Bush, As We May Think, 1945. O conceito de trilhas associativas é o que o grafo de referências cruzadas do wiki tenta ser.
- Model Context Protocol — Anthropic + a Agentic AI Foundation.
- Obsidian — obsidian.md. O formato do cofre é autoritativo; o kObsidian o respeita, não o migra.
Licença
MIT — veja LICENSE. Contribuições são bem-vindas; abra uma issue primeiro para qualquer coisa não trivial.