Servicio REST construido con Flask que actúa como puente entre un vault de Obsidian sincronizado en Nextcloud y el ecosistema externo (LLMs, bots, automatizaciones). Permite listar directorios, leer, crear, actualizar y eliminar notas o carpetas de manera segura.
- Navegación recursiva del vault mediante WebDAV.
- Lectura y escritura de notas Markdown con limpieza de rutas.
- Creación de notas y carpetas, y eliminación controlada.
- Logs estructurados (
obsidian_api.log) y manejo extensivo de errores. - Protección frente a path traversal (
safe_path).
- Python 3.11
- Flask 3
webdavclient3para integrarse con Nextcloud.python-dotenvpara cargar credenciales.
| Método | Ruta | Descripción |
|---|---|---|
GET |
/vault/structure?path=<opcional> |
Obtiene el árbol de directorios / archivos. |
GET |
/vault/read?path=nota.md |
Descarga y devuelve el contenido de una nota. |
POST |
/vault/create |
Crea una nota o carpeta. |
PUT |
/vault/update |
Sobrescribe el contenido de una nota existente. |
DELETE |
/vault/delete |
Elimina una nota o carpeta. |
Ver el archivo obsidian_api.py para parámetros exactos.
Cree un archivo .env (ver .env.example):
NEXTCLOUD_URL=https://tu-nextcloud.example.com
NEXTCLOUD_USERNAME=usuario
NEXTCLOUD_PASSWORD=clave
VAULT_REMOTE_PATH=Obsidian
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
flask --app obsidian_api run --host 0.0.0.0 --port 5000docker build -t obsidian-api .
docker run --rm -p 5000:5000 \
-e NEXTCLOUD_URL=... \
-e NEXTCLOUD_USERNAME=... \
-e NEXTCLOUD_PASSWORD=... \
obsidian-apiMonte un volumen si desea persistir logs (/app/obsidian_api.log).
- Use cuentas de servicio en Nextcloud con permisos limitados.
- Considere colocar el servicio detrás de un proxy con autenticación (ej. traefik, nginx).
- Los logs incluyen rutas solicitadas; revise políticas de retención.
- Cacheo local de notas populares.
- Difusión de cambios mediante webhooks/SignalR.
- Soporte para archivos binarios (imágenes, PDFs) en el vault.
Distribuido bajo licencia MIT.