85 lines
4.4 KiB
Markdown
85 lines
4.4 KiB
Markdown
# 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` — **УСТАРЕЛ**, не отражает реальность
|