# Obsidian MCP — текущая архитектура ## Факт: что стоит сейчас **Hermes native MCP client** (встроен в Hermes Agent, не wrapper). Конфиг в `~/.hermes/config.yaml` (и в `~/.hermes/hermes-whale/config.yaml`): ```yaml mcp_servers: obsidian: command: mcpvault args: - /Users/admin/obsidian ``` Пакет: **`@bitbonsai/mcpvault`** v0.12.1 (npm). Команда `mcpvault`. Hermes на старте: 1. Читает `mcp_servers` из config.yaml 2. Спавнит `mcpvault /Users/admin/obsidian` как subprocess 3. Init + list_tools → регистрирует инструменты как `mcp_obsidian_*` 4. Агент видит инструменты `mcp_obsidian_read_note`, `mcp_obsidian_patch_note`, и т.д. **Схема:** ``` Hermes (native MCP client) → spawn: mcpvault → reads/writes /Users/admin/obsidian/ ``` ### Инструменты, доступные через эту связку `read_note`, `write_note`, `patch_note`, `list_directory`, `delete_note`, `search_notes`, `move_note`, `move_file`, `read_multiple_notes`, `update_frontmatter`, `get_notes_info`, `get_frontmatter`, `manage_tags`, `get_vault_stats`, `list_all_tags`. ## Факт: что такое ~/scripts/obsidian-mcp-wrapper.js и почему он НЕ используется **Создан** 2026-05-09, когда вместо `mcpvault` стоял `npx obsidian-mcp` (старый пакет, автор Steven, ещё до переименования в `@bitbonsai/mcpvault`). Пакет постоянно падал: - ZodError на `"id": null` в notifications — `.strict()` валидация - Race condition при рестарте gateway - UTF-8 chunk split портил большие JSON - Зависания без watchdog Wrapper решал всё это. **Сейчас НЕ используется.** Конфиг в `~/.hermes/config.yaml`: ```yaml mcp_servers: obsidian: command: mcpvault # ← не node wrapper.js args: - /Users/admin/obsidian ``` **Почему:** после перехода на `@bitbonsai/mcpvault` (пришёл на смену старому obsidian-mcp), пакет стабильно работает с Hermes native MCP client. Wrapper стал не нужен. Конфиг поменяли, а doc не обновили. **Файл `~/scripts/obsidian-mcp-wrapper.js`** лежит на диске, не используется. Надо удалить. ## Факт: корень проблем с patch_note `mcp_obsidian_patch_note` падает с `"String not found"` — это **НЕ проблема транспорта**. Это проблема **самого mcpvault**: - Файл: `dist/src/filesystem.js`, строка 217 - Механизм: `fullContent.split(oldString).length - 1` - **Exact string match** — без trim, без fuzzy, без нормализации whitespace Workaround: использовать Hermes `patch()` (fuzzy matching, 9 стратегий) для сложных строк. `mcp_obsidian_patch_note` — только для простого текста без спецсимволов. ## Эволюция Obsidian MCP у нас | Период | Что было | Проблемы | |--------|----------|----------| | До 2026-05-09 | `npx obsidian-mcp` (пакет Steven, прямой) | ZodError, race condition, UTF-8 chunk split, зависания | | 2026-05-09 → ? | `npx obsidian-mcp` через wrapper | Wrapper решил проблемы | | Сейчас | `mcpvault` (Hermes native MCP client) | Стабильно. patch_note exact match — единственная боль | ## Рекомендация по замене (2026-06-24) При проблемах с mcpvault (зависания, память, exact match) — **cyanheads/obsidian-mcp-server**: - `obsidian_replace_in_note` с regex + flexible whitespace (решает exact match) - 9.7K dl/week, dual transport (stdio + HTTP), active - Требует Obsidian Local REST API plugin (Obsidian должен быть открыт) - Есть Docker support (`ghcr.io/cyanheads/obsidian-mcp-server`) Подробнее: `personal/tech/obsidian-mcp-ecosystem.md` ## См. также - `personal/tech/obsidian-mcp-ecosystem.md` — обзор всех 6 реализаций - ⚠️ `personal/projects/personal-os/obsidian-mcp-wrapper.md` — **УСТАРЕЛ**, не отражает реальность