obsidian-cli-mcp
obsidian-cli-mcp
Un servidor MCP que otorga a Claude y otros clientes MCP control total sobre una bóveda de Obsidian en ejecución a través de la CLI oficial de Obsidian (Obsidian 1.12+), con lecturas rápidas directas del sistema de archivos cuando la corrección lo permite.
Proyecto complementario de things-for-mac-mcp.
¿Qué lo hace diferente?
La mayoría de los servidores MCP de Obsidian se comunican con un plugin REST de la comunidad o leen directamente la carpeta de la bóveda. El primero requiere instalar y confiar en un plugin. El segundo rompe silenciosamente los wikilinks en el momento en que mueve o renombra un archivo, porque solo Obsidian conoce cada enlace, alias y embed que apunta a él.
Este servidor enruta cada operación según su capacidad:
MCPs típicos solo de sistema de archivos | obsidian-cli-mcp | |
Búsqueda de texto completo en miles de notas | Rápido | Rápido (sistema de archivos) |
Mover o renombrar una nota | Rompe cada enlace entrante | Seguro para enlaces (CLI de Obsidian) |
Enlaces de retroceso, alias, enlaces no resueltos | Suposiciones | El propio resolvedor de Obsidian |
Consultas Bases, variables de plantilla | Imposible | Evaluación en tiempo de ejecución a través de la app |
Las escrituras llegan al índice y la recuperación de archivos de Obsidian | No | Sí |
Archivos desalojados de iCloud | Se leen como notas vacías | Detectados, leídos a través de Obsidian |
Requiere un plugin de la comunidad | A veces | No |
La arquitectura refleja exactamente la de su proyecto hermano:
things-for-mac-mcp | obsidian-cli-mcp | |
Lecturas rápidas | SQLite directo | Sistema de archivos directo |
Escrituras autoritativas | AppleScript | CLI de Obsidian |
Creaciones convenientes | Esquema URL | CLI de Obsidian |
La regla detrás de la división: las lecturas masivas van al sistema de archivos porque necesitan rendimiento, y cualquier cosa que mueva, renombre, elimine o dependa de la resolución de enlaces o del estado de la aplicación pasa por la CLI porque necesita el conocimiento de Obsidian. El adaptador del sistema de archivos estructuralmente no puede mutar la bóveda, no exporta ninguna función de escritura.
Requisitos
macOS, Windows o Linux de escritorio con Obsidian 1.12 o posterior
La CLI de Obsidian habilitada: Obsidian, Configuración, General, Interfaz de línea de comandos
Obsidian debe estar en ejecución. La CLI es un cliente de la aplicación, no un binario independiente. Esto es solo para escritorio, no se admite móvil.
Node.js 18 o posterior
Instalación
git clone https://github.com/jabaho9523/obsidian-cli-mcp.git
cd obsidian-cli-mcp
npm install
npm run buildConectar a un cliente MCP
Claude (Desktop / Code)
Añadir a claude_desktop_config.json (Claude Desktop) o ejecutar claude mcp add (Claude Code):
{
"mcpServers": {
"obsidian": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/obsidian-cli-mcp/dist/index.js"],
"env": {
"OBSIDIAN_VAULT": "YourVaultName"
}
}
}
}Usa la ruta absoluta a node, no la palabra simple. Las aplicaciones lanzadas desde la GUI no heredan el PATH de tu shell, por lo que "command": "node" falla silenciosamente en muchos clientes. Encuentra la tuya con which node.
Establece OBSIDIAN_VAULT si tienes más de una bóveda. De lo contrario, la CLI apunta a la bóveda que estuvo enfocada por última vez, lo cual es una propiedad terrible para escrituras automatizadas. Con una sola bóveda, el servidor la fija automáticamente al inicio.
Configuración
Variable | Valor por defecto | Propósito |
|
| Ruta al binario de la CLI de Obsidian |
| fijado automáticamente si existe exactamente una bóveda | Nombre de la bóveda a la que apunta cada comando |
| detectado automáticamente a través de la CLI | Carpeta de la bóveda para el adaptador del sistema de archivos |
|
| Tiempo de espera por comando en ms |
| no establecido | Establecer a |
| no establecido | Establecer a |
Barreras de protección
Tres niveles, aplicados antes de que el binario se ejecute:
Nivel 1, gratuito: lecturas, búsquedas y escrituras aditivas (
create_note,append_note,append_daily,set_property,update_task,capture).Nivel 2, requiere
confirm: trueen la llamada a la herramienta:delete_note,move_note,rename_note,remove_property,run_obsidian_command, y a través del paso directo:history:restore,publish:*,plugin:enable/disable/reload,theme:*,snippet:*,sync,sync:restore,reload,template:insert,workspace:save/delete. Cualquier llamada que lleve una banderaoverwriteopermanenttambién se eleva al nivel 2.Nivel 3, bloqueado a menos que el servidor se ejecute con
OBSIDIAN_MCP_ALLOW_DANGEROUS=1:eval,restart,plugin:install,plugin:uninstall,plugins:restrict,devtools,dev:cdp,dev:debug,dev:mobile, ydelete_noteconpermanent: true.
Una nota honesta sobre qué son estas barreras. El nivel 2 es un obstáculo contra llamadas accidentales, no seguridad: el modelo que llama puede establecer confirm: true por sí mismo. El nivel 3 es un límite real, porque solo quien configura el entorno del servidor puede desbloquearlo. Si apuntas un agente autónomo a una bóveda que te importa, ejecuta con OBSIDIAN_MCP_READONLY=1, que rechaza todo comando mutante antes del envío, independientemente del nivel.
Movimientos y renombrados seguros para enlaces
La regla más importante en este proyecto: los archivos nunca se mueven, renombran o eliminan a través del sistema de archivos. Obsidian actualiza cada wikilink en la bóveda cuando realiza la operación. Un simple mv no lo hace.
Antes, con Projects/Roadmap.md enlazado desde tres notas:
Weekly Review.md: Progress on [[Roadmap]] is on track.
Team Notes.md: See [[Roadmap#Q3]] for the plan.
Index.md: - [[Roadmap|2026 roadmap]]Después de move_note con to: "Archive/2026 Roadmap.md":
Weekly Review.md: Progress on [[2026 Roadmap]] is on track.
Team Notes.md: See [[2026 Roadmap#Q3]] for the plan.
Index.md: - [[2026 Roadmap|2026 roadmap]]Los tres enlaces actualizados, incluyendo el ancla de encabezado y el alias, porque Obsidian realizó el movimiento. Un movimiento del sistema de archivos habría dejado tres enlaces rotos y ningún error.
¿Por qué híbrido? La justificación del rendimiento
Cada invocación de la CLI es un viaje de ida y vuelta IPC completo a través de la aplicación Obsidian en ejecución. Eso es correcto pero lento: leer 2000 notas a través de obsidian read son 2000 viajes de ida y vuelta, minutos de tiempo real. Leerlas del disco es un recorrido de directorio, mucho menos de un segundo en cualquier SSD.
Por lo tanto, las lecturas masivas (búsquedas, listados, escaneos de etiquetas y propiedades, exportaciones, resúmenes) van al sistema de archivos, y la CLI se reserva para lo que solo Obsidian puede responder (enlaces, alias, Bases, plantillas, estado de la aplicación) y para cada escritura. Para comparar en tu propia bóveda, mide el tiempo de search_notes contra el paso directo obsidian_cli con ["search", "query=..."].
Solución de problemas
"Obsidian no se está ejecutando." El fallo más común. La CLI necesita la aplicación abierta y completamente cargada. Inicia Obsidian y vuelve a intentarlo.
"No se pudo encontrar el binario de la CLI de Obsidian." Habilita la CLI en Obsidian en Configuración, General, Interfaz de línea de comandos, o apunta OBSIDIAN_BIN al binario.
Tiempos de espera en el primer comando. Un inicio en frío de Obsidian puede exceder el valor predeterminado de 20s. Aumenta OBSIDIAN_MCP_TIMEOUT.
Las notas se leen como faltantes o el servidor recurre mucho a la CLI. Si tu bóveda está en iCloud con Optimizar almacenamiento de Mac activado, los archivos desalojados existen solo como stubs .name.icloud. El servidor los detecta y los lee a través de Obsidian, que los vuelve a descargar, en lugar de informar notas vacías. Los escaneos masivos omiten los archivos desalojados y lo indican en su salida.
Las escrituras llegan a la bóveda incorrecta. Tienes múltiples bóvedas y no has establecido OBSIDIAN_VAULT. El servidor advierte sobre esto en stderr al inicio. Fija una.
Las herramientas no aparecen en el cliente. Revisa los registros MCP del cliente y verifica el problema de la ruta absoluta de node mencionado anteriormente.
Mantenerse actualizado
git pull && npm install && npm run buildEl servidor verifica actualizaciones al inicio, como máximo una vez cada 24 horas, almacenando en caché el resultado en ~/.config/obsidian-cli-mcp/update-check.json. Falla silenciosamente sin conexión e imprime una sola línea en stderr cuando existe una versión más reciente.
Herramientas (39 en total)
Herramientas de lectura (18)
Herramienta | Adaptador | Descripción |
| Sistema de archivos, recurso a CLI | Leer una nota por nombre estilo wikilink o ruta exacta |
| Sistema de archivos | Búsqueda de texto completo con opciones de carpeta, mayúsculas/minúsculas, contexto y límite |
| Sistema de archivos | Listar archivos, filtrados por carpeta y extensión |
| Sistema de archivos | Listar carpetas |
| CLI | Ruta, tamaño, fechas de creación y modificación |
| Sistema de archivos | Árbol de encabezados con números de línea |
| CLI | Enlaces entrantes, resueltos por Obsidian |
| CLI | Enlaces salientes |
| Sistema de archivos | Todas las etiquetas con recuentos, en frontmatter y en línea |
| Sistema de archivos | Claves de frontmatter en toda la bóveda con recuentos |
| Sistema de archivos | Una clave de frontmatter en una nota |
| CLI | Nombre de la bóveda, ruta, estadísticas |
| CLI | Archivos abiertos recientemente |
| CLI | Todos los archivos .base |
| CLI | Ejecutar una consulta de vista Bases, evaluada por la app |
| CLI | Plantillas en la carpeta configurada |
| CLI | Contenido de la plantilla, opcionalmente con variables resueltas |
| Sistema de archivos | Palabras y caracteres, excluyendo frontmatter |
Herramientas de escritura (16)
Todas las escrituras pasan por la CLI. Cada una requiere un objetivo file o path explícito, ninguna puede recaer en el archivo activo actual.
Herramienta | Nivel de protección | Descripción |
| 1, 2 con | Crear una nota, opcionalmente a partir de una plantilla |
| 1 | Añadir contenido |
| 1 | Anteponer contenido después del frontmatter |
| 1 | Leer la nota diaria de hoy |
| 1 | Añadir a la nota diaria de hoy |
| 1 | Anteponer a la nota diaria de hoy |
| 1 | Ruta de la nota diaria de hoy |
| 1 | Establecer una propiedad del frontmatter |
| 2 | Eliminar una propiedad del frontmatter |
| 2 | Mover con seguridad de enlaces |
| 2 | Renombrar con seguridad de enlaces |
| 2, 3 con | Eliminar a la papelera, o permanentemente |
| 1 | Listar tareas en markdown con referencias |
| 1 | Alternar o establecer estado de tarea por referencia o línea |
| 1 | Abrir en la interfaz de Obsidian, solo navegación |
| 2 para ejecutar | Listar o ejecutar comandos de la paleta de comandos, incluidos los de plugins |
run_obsidian_command es la puerta más amplia del servidor: alcanza todas las acciones de la paleta de comandos, incluyendo las registradas por plugins comunitarios. Está expuesta deliberadamente y protegida en el nivel 2.
Herramientas de flujo de trabajo (4)
Herramienta | Descripción |
| Añadir con marca de tiempo a la nota diaria de hoy, la operación de mayor frecuencia en la práctica |
| Agregar un rango de fechas de notas diarias en un solo documento |
| Exportar una carpeta como JSON, Markdown o CSV, en línea o a un archivo fuera del vault |
| Huérfanos, callejones sin salida, enlaces no resueltos y notas vacías en un solo informe. Deliberadamente acotado al grafo de enlaces |
Vía de escape (1)
Herramienta | Descripción |
| Ejecutar cualquier comando CLI. Toma |
Recursos MCP
El soporte del cliente para recursos varía: Claude Desktop actualmente no los muestra.
Recurso | Contenido |
| Información del vault |
| Nota diaria de hoy |
| Todas las etiquetas con recuentos |
| Archivos abiertos recientemente |
| Notas sin enlaces entrantes |
| Cualquier nota por ruta relativa al vault |
Prompts MCP
Prompt | Propósito |
| Resumir una nota diaria, mostrar tareas abiertas, sugerir seguimientos |
| Recorrer el informe de salud del vault y proponer correcciones seguras de enlaces |
| Convertir material pegado en una nota usando una plantilla existente |
| Resumir una semana de notas diarias en una nota de resumen |
Arquitectura
src/
├── index.ts MCP server entry, stdio transport
├── config.ts Environment configuration
├── adapters/
│ ├── cli.ts execFile wrapper, vault injection, error contract
│ └── filesystem.ts Read-only vault access, iCloud stub detection
├── tools/
│ ├── common.ts Shared note loading with CLI fallback
│ ├── read.ts 18 read tools
│ ├── write.ts 16 write tools
│ ├── workflow.ts 4 composite tools
│ └── passthrough.ts obsidian_cli escape hatch
├── resources/
│ └── vault.ts MCP resources
├── prompts/
│ └── workflows.ts MCP prompts
└── utils/
├── guardrails.ts Tier policy, readonly allowlist
├── markdown.ts Frontmatter, headings, tags, word counts
├── output.ts Truncation at 60,000 characters
└── update-check.ts Daily update checkLas pruebas se ejecutan contra un binario simulado que escanea su argv completo y puede configurarse para fallar, colgarse o emitir una salida sobredimensionada, de modo que todo el conjunto de pruebas pase sin tener instalado Obsidian:
npm testSoporte
Incidencias y solicitudes de funciones: Issues en GitHub.
Más del autor
things-for-mac-mcp, el servidor MCP hermano para Things 3
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jabaho9523/obsidian-cli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server