obsidian-mcp
obsidian-mcp
Servidor MCP que envuelve la CLI oficial de Obsidian para que un agente LLM pueda controlar una instancia de Obsidian en ejecución: leer/escribir notas, buscar, gestionar metadatos, navegar por enlaces, ejecutar plugins y más.
Este servidor es un envoltorio ligero y completo. Cada herramienta se asigna 1:1 a un comando de la CLI de obsidian.
Requisitos previos
Obsidian debe estar ejecutándose. La CLI se comunica con la aplicación activa a través de IPC; no lee el almacén (vault) directamente del disco.
Registrar el binario de la CLI. En Obsidian: Ajustes → General → Interfaz de línea de comandos → Registrar CLI. Obsidian añadirá
obsidiana tuPATH.Verificar:
obsidian versionimprime la versión de la CLI.
Instalación
Dos caminos dependiendo de si quieres compilarlo tú mismo o usar una versión prepublicada desde npm.
Opción A — Clonar y compilar (funciona hoy)
Clona el repositorio y compila localmente, luego apunta Claude Code al archivo compilado:
git clone https://github.com/yuchichang/obsidian-mcp.git
cd obsidian-mcp
npm install
npm run buildRegístralo con Claude Code (un comando):
# Add (user scope — available across all projects)
claude mcp add -s user obsidian -- node /absolute/path/to/obsidian-mcp/dist/index.js
# Remove
claude mcp remove obsidian
# List configured servers
claude mcp list-s user lo registra para toda tu cuenta de usuario. Usa -s project para confirmarlo en el archivo .mcp.json del repositorio, o -s local solo para el proyecto actual (por defecto).
O escríbelo manualmente en .mcp.json:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-mcp/dist/index.js"]
}
}
}Opción B — Instalar desde npm (sin compilación)
Requisito previo: el paquete ya debe estar publicado en npm. El mantenedor publica una vez mediante
npm publish; todos los usuarios posteriores lo obtienen automáticamente mediantenpx. Si has hecho un fork de este repositorio y quieres este flujo bajo tu propio ámbito, cambianameenpackage.jsona@<tu-nombre-de-usuario-npm>/obsidian-mcp, luego ejecutanpm publish.
Una vez publicado, no se necesita clonar ni compilar:
claude mcp add -s user obsidian -- npx -y @yuchichang/obsidian-mcpO en .mcp.json / claude_desktop_config.json de Claude Desktop:
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@yuchichang/obsidian-mcp"]
}
}
}Sobrescribir la ruta de la CLI
Si obsidian no está en el PATH, establece la variable de entorno OBSIDIAN_CLI. Funciona con cualquier ruta de instalación:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/absolute/path/to/obsidian-mcp/dist/index.js"],
"env": {
"OBSIDIAN_CLI": "C:/Users/you/AppData/Local/Obsidian/obsidian.cmd"
}
}
}
}Herramientas
Almacén (Vault) y archivos
Herramienta | Envuelve |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Propiedades de Frontmatter
Herramienta | Envuelve |
|
|
|
|
|
|
Búsqueda
Herramienta | Envuelve |
|
|
|
|
Etiquetas y enlaces
Herramienta | Envuelve |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notas diarias
Herramienta | Envuelve |
|
|
|
|
|
|
Plugins
Herramienta | Envuelve |
|
|
|
|
|
|
|
|
Desarrollador / avanzado
Herramienta | Envuelve | Notas |
|
| ⚠️ Ejecuta JS arbitrario dentro de Obsidian. Trátalo como destructivo. |
|
| Devuelve PNG en base64. |
|
| |
|
|
Meta
Herramienta | Envuelve |
|
|
|
|
Convenciones
Apuntar a una nota — las herramientas que apuntan a archivos aceptan:
file— nombre de nota estilo wikilink (ej."Mi Nota"), opath— ruta de archivo relativa al almacén (ej."Carpeta/Mi Nota.md").
Configuraciones multialmacén — cada herramienta acepta un parámetro opcional
vault. Cuando se omite, se utiliza el almacén enfocado más recientemente.Formato de salida — las herramientas de lista/búsqueda/metadatos devuelven JSON por defecto para facilitar el análisis automático.
Operaciones sensibles y confirmación del usuario
Las siguientes herramientas están protegidas por un paso de confirmación del usuario:
Herramienta | Razón |
| Elimina datos (especialmente con |
| Renombra + reescribe wikilinks en todo el almacén. |
| Elimina datos de frontmatter. |
| Reescribe etiquetas en masa en todas las notas. |
| Otorga ejecución de código a un plugin de la comunidad. |
| Ejecuta JavaScript arbitrario dentro de Obsidian. |
Cómo funciona la protección:
Elicitación MCP (preferido). Si el cliente conectado soporta la capacidad
elicitation(Claude Code lo hace), el servidor envía una solicitudelicitation/createy el cliente muestra al usuario un aviso de ¿Proceder? con la acción y el objetivo detallados. Soloaccept + confirm: trueprocede.Parámetro explícito
confirm: true. El esquema de entrada de cada herramienta sensible incluye unconfirm: booleanopcional. Pasarconfirm: trueomite el aviso de elicitación; úsalo solo cuando el llamador ya haya obtenido la aprobación del usuario.Reserva de rechazo. Si el cliente no soporta la elicitación y no se proporcionó
confirm: true, la herramienta devuelve un resultadoisErrorque nombra la acción e instruye al llamador a reintentar conconfirm: true.
Omisión para lotes / automatización
OBSIDIAN_MCP_AUTO_CONFIRM=1Establece esta variable de entorno (en el bloque env de tu cliente MCP) para omitir cada aviso de confirmación. Úsalo solo en contextos de automatización totalmente confiables.
Contenido largo y límites de argv
La CLI de Obsidian no soporta (todavía) la lectura de valores de parámetros desde stdin o desde archivos; cada valor viaja en la línea de comandos. Eso choca con los límites de la plataforma:
Plataforma | Límite práctico de línea de comandos |
Windows (cmd.exe) | ~8,191 caracteres en total |
macOS / Linux |
|
Para mantenerse seguro, el servidor fragmenta automáticamente las escrituras largas:
Herramienta | Estrategia de fragmentación |
| Primer fragmento mediante |
| Llamadas secuenciales a |
| Llamadas a |
| Resuelve la ruta de la nota diaria, luego realiza un append fragmentado. |
| No fragmentado — JS no se puede dividir. Devuelve un error sugiriendo la alternativa de script-vía-nota. |
Las divisiones ocurren en los límites de línea cuando es posible; las líneas individuales demasiado grandes recurren a límites de caracteres seguros para UTF-8. El contenido reensamblado es idéntico byte a byte al original.
Configura el umbral de bytes por llamada (por defecto: 6,000 en Windows, 100,000 en otros lugares):
OBSIDIAN_MCP_MAX_ARG_BYTES=4000Si un fragmento en medio de una escritura de múltiples fragmentos falla, el servidor devuelve isError con un mensaje claro indicando qué fragmentos llegaron al disco para que el llamador pueda recuperarse.
Desarrollar
npm run dev # tsc --watch
npm run inspect # launch MCP Inspector against the built server
node scripts/smoke-test.mjs # initialize + tools/list smoke testCómo funciona
runObsidian() (src/exec.ts) cita los argumentos para el shell, invoca el binario obsidian a través de child_process.exec y analiza stdout. La mayoría de las herramientas de lectura solicitan format=json; los resultados se analizan en structuredContent para los clientes que consumen salida de herramientas estructurada, mientras siguen devolviendo una representación de texto en content.
El registro de herramientas reside en src/tools.ts: añadir un nuevo comando envuelto es una sola entrada allí.
Referencia
CLI de Obsidian: https://obsidian.md/help/cli
Especificación MCP: https://modelcontextprotocol.io
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/yuchi-chang/obsidian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server