kObsidian
Primer servidor MCP basado en sistema de archivos para bóvedas de Obsidian con una capa LLM-Wiki encima.
Documentación
kObsidian MCP
Servidor MCP centrado en el sistema de archivos para bóvedas de Obsidian, con una capa LLM-Wiki encima.
Inspirado en la idea de LLM Wiki de Andrej Karpathy. Tú seleccionas las fuentes; el LLM se encarga de la contabilidad.
Instalación · Inicio rápido · Arquitectura · LLM Wiki · Herramientas · Documentación
🧰 El único MCP de Obsidian con espacios de trabajo.
vault.list/vault.selectpermiten que un LLM descubra y cambie entre tus bóvedas de Obsidian durante la sesión, sin reiniciar, sin editar configuración ni pasar rutas por cada herramienta. Compatible con versiones anteriores deOBSIDIAN_VAULT_PATH. Añadido en v0.3.0. Consulta docs/WORKSPACES.md.
Por qué kObsidian
- Centrado en el sistema de archivos. Opera directamente sobre tu bóveda. Obsidian no necesita estar en ejecución para 55 de las 66 herramientas.
- 66 herramientas MCP tipadas para bóvedas, notas, enlaces, etiquetas, tareas, Dataview, Canvas, Kanban, bloques delimitados, Marp, Plantillas — todas validadas con Zod, con salida
structuredContenty el conjunto completo de 4 anotaciones MCP (readOnlyHint,destructiveHint,idempotentHint,openWorldHint). - Multi-bóveda
vault.*(v0.3.0). El LLM puedevault.listtus bóvedas de Obsidian conocidas (descubiertas desde el propio registro de Obsidian o las variables de entornoOBSIDIAN_VAULT_<NAME>) yvault.selectentre ellas durante la sesión. Totalmente compatible con versiones anteriores:OBSIDIAN_VAULT_PATHsigue siendo el valor predeterminado y los argumentosvaultPathpor llamada siempre tienen prioridad. - Orquestación LLM-Wiki — un espacio de nombres
wiki.*que convierte tu bóveda en una base de conocimiento compuesta: ingiere fuentes, actualiza automáticamente un índice y un registro greppable, verifica huérfanos / enlaces rotos / páginas obsoletas. El agente aplica referencias cruzadas mediante un contratoproposedEditspara que cada escritura sea visible en la transcripción. - Ambos transportes. stdio clásico para clientes MCP locales y Streamable HTTP (Hono) para remoto, con preflight CORS, manejo de
MCP-Protocol-Version, 403 de origen y autenticación bearer opcional — todo según la especificación del 2025-11-25. - Disponible en todas partes. npm (
npx -y kobsidian-mcp), paquetes.mcpbmultiplataforma para arrastrar y soltar en Claude Desktop, unsmithery.yamlpara Smithery y unserver.jsonpara el Registro MCP. Cada artefacto de la versión.mcpbse escanea con VirusTotal y los enlaces se añaden al cuerpo de la versión.
Instalación
Elige tu cliente a continuación. Cada cliente admite el modo híbrido completo
— las herramientas centradas en el sistema de archivos (más de 80) funcionan solo con
la ruta de la bóveda, y la misma configuración puede simultáneamente llevar la clave
de la API REST Local para desbloquear workspace.*, commands.* y DQL en vivo mediante
dataview.query*. Configura todo el bloque de entorno una vez por cliente y cada
espacio de nombres de herramientas se activa; deja la clave REST en blanco y las
herramientas centradas en el sistema de archivos seguirán funcionando.
| Variable de entorno | Necesaria para |
|---|---|
OBSIDIAN_VAULT_PATH | Requerida en todas partes. Ruta absoluta a la bóveda. |
OBSIDIAN_API_URL | URL base del plugin Local REST API. Predeterminado https://127.0.0.1:27124. |
OBSIDIAN_API_VERIFY_TLS | Opcional. Predeterminado a false (el plugin REST API usa un certificado autofirmado en 127.0.0.1). Establece true solo después de confiar en el certificado en el llavero de tu sistema operativo. |
OBSIDIAN_REST_API_KEY | Clave bearer del plugin Local REST API — solo para workspace.* / commands.* / dataview.query* en vivo. |
Lista completa en docs/ENVIRONMENT.md. Cambia npx
por bunx en cualquier lugar si quieres un arranque en frío de ≈10 ms en lugar 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
En Windows, envuelve el comando en cmd /c:
-- cmd /c npx -y kobsidian-mcp.
Claude Desktop — arrastrar y soltar .mcpb
Descarga kobsidian-<platform>.mcpb desde la
última versión y
arrástralo a Claude Desktop. El instalador solicita la ruta de la bóveda y
la URL / clave de API opcional. Cada artefacto de la versión se escanea con VirusTotal — los
enlaces están en el cuerpo de la versión.
Compila uno 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 o enlace profundo
Edita ~/.cursor/mcp.json (o el .cursor/mcp.json por proyecto):
{
"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"
}
}
}
}
O entrega un enlace profundo de un clic a tus usuarios:
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"}}'
O crea .vscode/mcp.json en tu espacio de trabajo con la misma forma bajo
una clave de nivel 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
O edita manualmente ~/.gemini/settings.json bajo mcpServers.
Antigravity (Google) — mcp_config.json
Edita ~/.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 bajo context_servers
En ~/.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 bajo 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
Otros clientes (Cline, JetBrains AI, Continue, hosts personalizados) — JSON mcpServers genérico
Cualquier cliente MCP que lea un objeto mcpServers estándar aceptará:
{
"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" es opcional en clientes que infieren el transporte desde
command (Claude Code), pero requerido por Claude Desktop, Cursor,
VSCode y Antigravity — inclúyelo para máxima portabilidad.
Smithery
smithery.ai muestra una interfaz de instalación directamente desde
smithery.yaml y recopila las cuatro variables de entorno por ti
— la ruta de la bóveda más el trío opcional de URL / TLS / clave bearer de la API REST Local,
para que el modo híbrido funcione de inmediato.
Desde el código fuente (contribuciones / desarrollo)
git clone https://github.com/bezata/kObsidian
cd kObsidian
bun install
bun run dev:stdio # or dev:http
Plugins de Obsidian
kObsidian es centrado en el sistema de archivos — 55 de las 66 herramientas funcionan contra un directorio de bóveda simple sin plugins de Obsidian instalados. Los plugins a continuación solo importan si quieres los espacios de nombres de herramientas específicos que dependen de ellos.
Habilitar plugins de la comunidad (una sola vez, si aún no están activados)
Obsidian viene con los plugins de la comunidad deshabilitados por defecto. Actívalos una vez por bóveda:
- Abre tu bóveda en Obsidian.
- Configuración (⚙️, abajo a la izquierda) → Plugins de la comunidad.
- Haz clic en Activar plugins de la comunidad.
- Explorar → buscar → Instalar → Activar.
Requeridos para las herramientas con puente REST
Obsidian Local REST API (por Adam Coddington) — necesario para:
workspace.*(activeFile, openFile, navigate, closeActiveFile, toggleEditMode)commands.*(execute, list)dataview.query/dataview.listByTag/dataview.listByFolder/dataview.table(DQL en tiempo de ejecución — las herramientas offlinedataview.fields.*/dataview.index/blocks.*funcionan sin él)templates.useconengine: "templater"
Configuración después de la instalación:
- Activa el plugin.
- Abre su configuración — desplázate hasta API key → haz clic en Copiar (o Restablecer primero si quieres una nueva).
- Pega esa clave como
OBSIDIAN_REST_API_KEYen el bloqueenv:de la configuración de tu cliente MCP. El valor predeterminado deOBSIDIAN_API_URL(https://127.0.0.1:27124) funciona de inmediato.
Deja el plugin en ejecución mientras uses las herramientas con puente REST — el endpoint es solo local (127.0.0.1), así que nada sale de tu máquina.
Mejora (pero no es requerido para) espacios de nombres de herramientas específicos
| Plugin | Enlace | Qué desbloquea |
|---|---|---|
| Dataview | id=dataview | Todas las herramientas dataview.* siguen funcionando sobre el markdown sin procesar; el plugin Dataview es lo que hace que las consultas DQL en dataview.query* realmente se ejecuten. También renderiza tus campos y consultas visualmente dentro de Obsidian. |
| Templater | id=templater-obsidian | Renderizado de plantillas en tiempo de ejecución mediante la API REST (templates.use con engine:"templater"). El motor offline del sistema de archivos (templates.use con engine:"filesystem") y templates.list funcionan sin él. |
| Marp | id=marp-slides | Las herramientas Marp marp.* analizan y editan markdown con front-matter de Marp incluso sin el plugin; el plugin es lo que renderiza diapositivas / exporta a PDF dentro de Obsidian. |
| Kanban | id=obsidian-kanban | Las herramientas kanban.* leen/escriben el formato de tablero en markdown simple independientemente del plugin; el plugin es lo que renderiza el tablero como columnas arrastrables dentro de Obsidian. |
| Tasks | id=obsidian-tasks-plugin | Las herramientas tasks.* entienden la sintaxis de emojis del plugin Tasks (📅 ⏳ 🛫 ✅ 🔼 🔁) independientemente del plugin; el plugin es lo que proporciona filtrado / consultas / alternancia dentro de Obsidian. |
Los enlaces
obsidian://show-plugin?id=…saltan directamente al plugin en el navegador integrado de Obsidian — haz clic en uno con Obsidian abierto y se enlazará profundamente a la pantalla de instalación.
Resumen
| Quieres… | Mínimo que necesitas |
|---|---|
Usar notes.* / tags.* / links.* / stats.vault / tasks.* / wiki.* / kanban.* / blocks.* / marp.* / canvas.* / templates.list + templates.use (engine:"filesystem") / dataview.* offline | Solo una ruta de bóveda. No se requieren plugins. |
Usar workspace.* / commands.* | + plugin Local REST API + variable de entorno de clave API |
Ejecutar consultas DQL en vivo (dataview.query / dataview.listBy* / dataview.table) | + Local REST API + Dataview |
| Ejecutar plantillas Templater en tiempo de ejecución | + Local REST API + Templater |
Ninguna combinación de plugins hace que kObsidian dependa de que Obsidian esté en ejecución — las herramientas con puente REST simplemente devuelven un error claro si el plugin no es accesible, y las herramientas centradas en el sistema de archivos siguen funcionando.
Inicio rápido
Antes de la primera sesión — kObsidian funciona en una bóveda de Obsidian básica, pero habilitar algunos plugins de Obsidian desbloquea toda la superficie de herramientas. Consulta Plugins de Obsidian a continuación para la configuración de 5 minutos (Local REST API, Dataview, Templater, Marp, Kanban, Tasks). Omítelo si solo necesitas las más de 80 herramientas centradas en el sistema de archivos.
Una vez instalado, una sesión típica comienza con tres indicaciones en lenguaje natural. Las herramientas wiki.* más las habilidades .claude se encargan del 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
Ciclo completo, contratos de frontmatter y el diseño proposedEdits en docs/wiki.md.
Casos de uso de ejemplo
Las mismas primitivas cubren varios estilos reales de base de conocimiento. Tres ejemplos trabajados a continuación; recorridos más largos en docs/examples.md.
A. Wiki de investigación personal
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 Decisiones de Arquitectura (ADR) para una base de código
Modela cada ADR como una Fuente, los patrones arquitectónicos como Conceptos y los servicios / equipos / librerías como Entidades. La wiki se convierte en tu archivo de ADR con enlaces cruzados que nunca tendrás que mantener a mano.
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 base de código (documentos de diseño + post-mortems + RFC)
Los equipos de ingeniería abandonan las wikis porque nadie las actualiza. Deja que el LLM lo haga. Ingiera documentos de diseño, RFC y post-mortems como Fuentes; los patrones arquitectónicos se convierten en Conceptos; los servicios y equipos se convierten en 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 qué esto funciona para equipos de ingeniería
- El contrato
proposedEditssignifica que cada escritura de referencia cruzada es visible en la transcripción — sin corrupción silenciosa de la bóveda por una alucinación del LLM sobre qué servicios afecta una decisión. - El formato de registro greppable (
## [YYYY-MM-DD] ingest | ADR-004 …) convierte agrep '^## \[' wiki/log.md | tail -20en una consulta válida de "¿qué decidió el equipo recientemente?". wiki.lintdetecta enlaces rotos a servicios que fueron desaprobados hace meses — la contabilidad que los humanos nunca llegan a hacer.
Arquitectura
┌──────────────────────────────────────────────────────────────────────┐
│ 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 en docs/architecture.md.
LLM Wiki (60 segundos)
La parte tediosa de mantener una base de conocimiento no es la lectura ni el pensamiento — es la contabilidad. Los humanos abandonan las wikis porque la carga de mantenimiento crece más rápido que el valor. A los LLM no les aburre.
kObsidian implementa el patrón LLM Wiki del gist de Andrej Karpathy: una base de conocimiento persistente y compuesta que el LLM mantiene. La bóveda se convierte en un Memex privado y curado (Vannevar Bush, 1945) donde las referencias cruzadas, el registro de actividad y el lint son trabajo del LLM, mientras tú te centras en curar fuentes y hacer preguntas.
"En lugar de solo recuperar de documentos crudos en el momento de la consulta, el LLM construye y mantiene de forma incremental una wiki persistente — una colección estructurada e interconectada de archivos Markdown que se sitúa entre tú y las fuentes crudas." — 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
Distribución predeterminada dentro de la bóveda:
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
La decisión de diseño clave es que wiki.ingest nunca reescribe
referencias cruzadas a ciegas. Crea exactamente un archivo (la página de Fuentes),
añade un archivo (log.md) y devuelve un array proposedEdits
que el agente aplica con las herramientas notes.* existentes. Cada escritura es visible
en la transcripción — así las alucinaciones del LLM aparecen como ediciones revisables
en lugar de corrupción silenciosa de la bóveda.
Contrato completo en docs/wiki.md.
Habilidades de Claude Code
Cuatro habilidades en skills/ se activan con lenguaje natural:
wiki-bootstrap, wiki-ingest, wiki-query, wiki-lint. Cópialas o
haz enlaces simbólicos a ~/.claude/skills/ — ver
skills/README.md.
Superficie de herramientas
66 herramientas MCP en 16 espacios de nombres (v0.2.5 consolidado de ~90 a 62;
v0.3.0 añadió el espacio de nombres vault.* para soporte multi-bóveda — ver
CHANGELOG para el historial completo). Inventario
siempre actualizado en docs/tool-inventory.json.
| Espacio de nombres | Cantidad | Destacados |
|---|---|---|
vault.* | 4 | list · current · select · reset — descubrimiento multi-bóveda y cambio de sesión (v0.3.0) |
notes.* | 8 | read (contenido/metadatos/estadísticas vía include) · create (nota o carpeta) · edit (reemplazar/añadir/preponer/después-de-título/después-de-bloque) · frontmatter · delete · move · list · search |
tags.* | 4 | modify (añadir/quitar/reemplazar/fusionar) · search · analyze · list |
links.* | 8 | Backlinks · salientes · rotos · huérfanos · hubs · grafo · salud · conexiones |
stats.* | 1 | stats.vault (estadísticas por nota movidas a notes.read) |
tasks.* | 5 | Formato del plugin Tasks (📅 ⏳ 🛫 ✅ 🔼 🔁) — buscar · crear · alternar · updateMetadata · stats |
dataview.* | 7 | query + envoltorios de azúcar (listByTag/listByFolder/table) · index · fields.read · fields.write |
blocks.* | 3 | API unificada de bloques delimitados (list/read/update) en dataview, dataviewjs, mermaid |
marp.* | 2 | read (deck/slides/slide) · update (slide/frontmatter) |
kanban.* | 3 | parse · stats · card (añadir/mover/alternar) |
canvas.* | 4 | create · parse · connections · edit (add-node/add-edge/remove-node) |
templates.* | 2 | list · use (motor × acción) |
workspace.* | 5 | Puente de UI de Obsidian en vivo (requiere el plugin Local REST API) |
commands.* | 2 | list (con consulta opcional) · execute |
wiki.* | 7 | init · ingest · log · indexRebuild · query · lint · summaryMerge |
system.* | 1 | version |
Anotaciones de seguridad para clientes (MCP 2025-11-25):
| Indicación | Herramientas |
|---|---|
readOnlyHint: true (los clientes pueden aprobar automáticamente) | 47 |
destructiveHint: true (los clientes preguntan con más firmeza) | 6 |
idempotentHint: true (seguro de reintentar) | 12 |
openWorldHint: true (alcanza fuera de la bóveda) | 16 |
Recursos MCP (direccionables por URI; cualquier cliente puede navegarlos sin llamadas a herramientas):
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 no consumen los archivos skills/):
ingest-source, answer-from-wiki, health-check-wiki.
Detalles en docs/tools.md.
Configuración
| Variable de entorno | Predeterminado | Propósito |
|---|---|---|
OBSIDIAN_VAULT_PATH | — | Requerida. Ruta absoluta a la bóveda. |
OBSIDIAN_API_URL | https://127.0.0.1:27124 | Base de la API REST Local de Obsidian; solo para workspace.* / commands.* / dataview.query*. |
OBSIDIAN_API_VERIFY_TLS | false | Establece true si has confiado en el certificado autofirmado de la API REST. |
OBSIDIAN_REST_API_KEY | — | Clave Bearer para el plugin de la API REST (si se usa). |
KOBSIDIAN_HTTP_HOST | 127.0.0.1 | Host de enlace para dev:http. |
KOBSIDIAN_HTTP_PORT | 3000 | Puerto de enlace para dev:http. |
KOBSIDIAN_HTTP_BEARER_TOKEN | — | Bearer opcional para el transporte Streamable HTTP. |
KOBSIDIAN_ALLOWED_ORIGINS | http://localhost,http://127.0.0.1 | Lista de permitidos CORS separada por comas. |
KOBSIDIAN_WIKI_ROOT | wiki | Directorio de la wiki dentro de la bóveda. |
KOBSIDIAN_WIKI_SOURCES_DIR | Sources | Páginas de resumen por fuente. |
KOBSIDIAN_WIKI_CONCEPTS_DIR | Concepts | Páginas de temas / ideas. |
KOBSIDIAN_WIKI_ENTITIES_DIR | Entities | Personas / lugares / organizaciones / obras. |
KOBSIDIAN_WIKI_INDEX_FILE | index.md | Nombre del archivo del catálogo de la wiki. |
KOBSIDIAN_WIKI_LOG_FILE | log.md | Nombre del archivo de registro de la wiki. |
KOBSIDIAN_WIKI_SCHEMA_FILE | wiki-schema.md | Nombre del archivo del esquema semilla. |
KOBSIDIAN_WIKI_STALE_DAYS | 180 | Umbral de página obsoleta de wiki.lint. |
Cada herramienta de la wiki también acepta una anulación wikiRoot por llamada.
Documentación
La documentación localizada está disponible en 简体中文, 日本語 y 한국어.
| architecture.md | Pila, mapa de módulos, reglas de capas |
| wiki.md | Contrato LLM-Wiki, bucle, frontmatter, categorías de lint |
| examples.md | Wiki de investigación personal · ADR de ingeniería · wiki de base de código — de principio a fin |
| tools.md | Tabla de espacios de nombres, anotaciones, recursos, prompts |
| SECURITY.md | Origin/CORS, escaneos de VirusTotal, higiene de entorno |
| TESTING.md | Comandos bun run … y cobertura |
| ENVIRONMENT.md | Cada variable de entorno con sus valores predeterminados |
| MIGRATION.md | Notas de actualización |
Hoja de ruta
Los dos próximos hitos se siguen en TODO.md:
- v0.4 — Puente Obsidian LiveSync. Acceso gratuito a la bóveda con cifrado de extremo a extremo mediante el plugin comunitario Self-Hosted LiveSync (CouchDB / S3 / R2 / WebRTC peer) — para que un cliente MCP pueda alcanzar la misma bóveda de Obsidian desde cualquier máquina del usuario, sin necesidad de que Obsidian esté activo.
- v0.5 — Verificación semántica cruzada de bóvedas. Una herramienta
wiki.crossCheckque concilia dos o más bóvedas emparejadas con LiveSync en la capa de la wiki, controlada por un nuevo campo de frontmatterschema_versionque utiliza la disciplina semver del proyecto como contrato de compatibilidad.
TODO.md lleva la motivación, el desglose de tareas por hito
y las reglas sobre cómo los elementos pasan de allí al CHANGELOG.
Desarrollo
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
Convenciones del proyecto en AGENTS.md.
Seguridad y cadena de suministro
-
Cada artefacto de release
.mcpbse escanea con VirusTotal. El flujo de trabajoReleasesube cada paquetekobsidian-<platform>.mcpba VirusTotal mediantecrazy-max/ghaction-virustotal@v4justo después de publicarse el release, y luego añade los enlaces de análisis al cuerpo del release. Cualquier usuario que instale desde un release de GitHub puede hacer clic al informe público de VirusTotal del paquete de su plataforma antes de ejecutarlo — sin necesidad de confiar en el mantenedor. -
Endurecimiento del transporte. Streamable HTTP valida
Origincontra una lista de permitidos (403 si no coincide), implementa preflight CORS (OPTIONS /mcp→ 204 +Access-Control-*), requiere o usa como predeterminadoMCP-Protocol-Versiony admite autenticación opcional por bearer medianteKOBSIDIAN_HTTP_BEARER_TOKEN. stdio no tiene superficie de red. -
Suelo SDK fijado.
@modelcontextprotocol/sdk@^1.26.0— mitigaGHSA-345p-7cg4-v4c7(fuga de respuesta entre clientes) yCVE-2026-0621(ReDoS de UriTemplate). Este repositorio fija1.29.0. -
Trusted Publishing de npm. No se almacena ningún
NPM_TOKENde larga duración en el repositorio. GitHub Actions acuña un token OIDC de corta duración en cada push de etiqueta y el CLI de npm lo intercambia por un token de publicación de un solo uso con alcance para este archivo de flujo de trabajo exacto (.github/workflows/release.ymlen el repositoriobezata/kObsidian). Las atestaciones de procedencia son automáticas — cada versión publicada tiene una declaración de compilación con vínculo criptográfico que apunta a la ejecución exacta de Actions que la produjo. Los forks, otras ramas o archivos de flujo de trabajo modificados no pueden publicar — la reclamación de audiencia OIDC no coincidirá.
Notas completas en docs/SECURITY.md.
Notas de compatibilidad
- Versión del protocolo —
2025-11-25(especificación MCP actual). Los clientes HTTP sinMCP-Protocol-Versionrecurren a2025-03-26según la especificación; las versiones explícitas pero no soportadas devuelven 400. - División de Dataview — las herramientas sin conexión indexan bloques de frontmatter / en línea / lista / tarea /
dataviewdelimitados /dataviewjsdelimitados. El DQL en tiempo de ejecución se delega a Obsidian + Dataview a través de la API REST local. DataviewJS conserva el código fuente pero no se ejecuta dentro de este servidor. - Mermaid + Marp — solo análisis/edición que conserva el código fuente; el renderizado es responsabilidad del cliente.
- Nivel mínimo de SDK —
@modelcontextprotocol/sdk@^1.26.0(mitiga la fuga de respuestas entre clientesGHSA-345p-7cg4-v4c7+ ReDoS de UriTemplateCVE-2026-0621). Este repositorio fija1.29.0.
Créditos
- Patrón de wiki LLM — el gist de Andrej Karpathy. kObsidian es una implementación concreta en TypeScript, centrada en el sistema de archivos, de esta idea.
- Memex — Vannevar Bush, As We May Think, 1945. El concepto de senderos asociativos es lo que el grafo de referencias cruzadas de la wiki intenta ser.
- Model Context Protocol — Anthropic + la Fundación de IA Agéntica.
- Obsidian — obsidian.md. El formato de bóveda es autoritativo; kObsidian lo respeta, no lo migra.
Licencia
MIT — ver LICENSE. Las contribuciones son bienvenidas; abre un issue primero para cualquier cosa no trivial.