Представьте: ваш AI-агент копается в тысячах заметок Obsidian, чтобы найти тот самый черновик идеи из прошлого года. Он не просто ищет по ключевым словам — он понимает смысл, находит связанные концепции, вытаскивает контекст. И делает это локально, за миллисекунды, без отправки данных в облако. Звучит как магия? Нет, это Obsidian Hybrid Search — открытый MCP-сервер и CLI, который превращает вашу базу знаний в семантическую поисковую машину для AI-агентов.
Я перепробовал кучу способов подключить Obsidian к AI: плагин Smart Connections, самописные скрипты, даже пытался скормить весь vault в контекст LLM (спойлер: не влезло). Всё упиралось в одно: либо скорость, либо точность, либо конфиденциальность. Obsidian Hybrid Search решает все три проблемы разом, скрещивая старый добрый BM25 (лексический поиск) с векторными эмбеддингами (семантический поиск) через единый MCP-интерфейс.
⚠️ Важно: инструмент работает полностью локально. Ваши заметки не покидают компьютер. Никаких облачных API для эмбеддингов — всё через локальную модель (по умолчанию all-MiniLM-L6-v2 от SentenceTransformers).
Что под капотом? Гибридный поиск без компромиссов
Obsidian Hybrid Search — это не просто очередной плагин. Это три вещи в одном флаконе:
- MCP-сервер — реализует Model Context Protocol и позволяет любому MCP-совместимому агенту (Claude Code, Cursor, Codex CLI, Goose, Cline) выполнять поиск по вашему хранилищу Obsidian как по родной базе данных.
- CLI-инструмент — для индексации, поиска из терминала и интеграции в скрипты. Можно использовать без AI-агентов, просто как мощный поисковик по Markdown.
- Гибридный реранкер — на лету комбинирует результаты BM25 и косинусного расстояния эмбеддингов, выдавая взвешенный список. Коэффициенты настраиваются.
| Компонент | Назначение |
|---|---|
| Индексатор | Сканирует vault, парсит Markdown-файлы, строит инвертированный индекс и файл эмбеддингов (FAISS или NumPy). |
| MCP-сервер | Предоставляет инструменты search_notes, hybrid_search, get_note_content. |
| CLI | Команды ohs index, ohs search, ohs serve для ручного управления. |
С точки зрения архитектуры это напоминает подход, который мы разбирали в статье MCP-Manticore, только вместо SQL-движка — локальная папка с .md файлами. И если MCP-Manticore заточен на полнотекстовый поиск по структурированным данным, то Obsidian Hybrid Search понимает ваш личный «второй мозг» во всей его неструктурированной красе.
Почему не просто поиск Obsidian?
Встроенный поиск Obsidian — отличный для человека, но убогий для AI-агента. Он строковый, без понимания синонимов и концепций. Попросите Claude «найти заметки о распределённых системах», а у вас в vault нет точного словосочетания — получите пустые руки.
Плагины вроде Smart Connections (локальный семантический поиск) работают, но они замкнуты в интерфейсе Obsidian. Вы не сможете из Cursor или Codex CLI отправить запрос в свой мозг. Именно здесь MCP-протокол делает революцию: ваш AI-агент получает тот же level доступа, как если бы вы сами Ctrl+Shift+F в Obsidian.
1 Сравнение с альтернативами
| Инструмент | Тип поиска | MCP-интеграция | Локально | Скорость (первый запрос) |
|---|---|---|---|---|
| Obsidian Hybrid Search | Гибридный (BM25 + векторный) | ✅ Да (MCP-сервер) | ✅ | ~80 мс (с предзагруженными эмбеддингами) |
| Smart Connections (плагин) | Векторный (OpenAI / локальный) | ❌ Нет (только GUI Obsidian) | ✅ (локальная модель) | ~200 мс |
| Omnisearch (плагин) | Лексический (только BM25) | ❌ Нет | ✅ | ~50 мс |
| Самописный RAG на LlamaIndex | Любой | ✅ (через кастомный MCP) | ✅/❌ | ~500 мс (с индексацией) |
Как видно, главный козырь Obsidian Hybrid Search — это готовый MCP-сервер, который понимает Model Context Protocol «из коробки». Вам не нужно писать адаптер, как в случае с LlamaIndex. Просто запустил ohs serve — и любой MCP-агент уже видит ваш vault.
Ставим за 2 минуты
Установка через npm (или pip, зависит от версии):
# Через npm (рекомендуется)
npm install -g @obsidian-hybrid-search/cli
# Или через pip, если предпочитаете Python-экосистему
pip install obsidian-hybrid-search
Затем проиндексируйте свой vault (путь к Obsidian vault):
ohs index --vault /path/to/your/vault
По умолчанию индексация занимает несколько секунд на 1000 заметок. После этого можно запустить MCP-сервер:
ohs serve
Сервер будет слушать на порту 3000 по умолчанию. Теперь любой MCP-агент (Claude Code, Cursor, Codex CLI) может подключиться к нему.
Живой пример: Claude Code ищет ваши старые идеи
Допустим, я хочу, чтобы Claude Code нашел заметки, связанные с «нейросеть для генерации музыки», которые я писал полгода назад. При этом точные слова «нейросеть генерация музыка» могут и не встречаться — в заметках могло быть «AI music generation» или «превращаю мелодии через transformer».
Запускаем Claude Code и даём ему MCP-инструмент:
# В Claude Code прописываем конфиг MCP:
# ~/.claude/config.json или через .mcp файл
{
"mcpServers": {
"obsidian-hybrid": {
"type": "obsidian-hybrid-search",
"url": "http://localhost:3000"
}
}
}
Теперь Claude может выполнять поиск через инструмент hybrid_search. Я пишу промпт:
«Найди в моих заметках всё, что связано с генерацией музыки нейросетями. Покажи 5 релевантных заметок с краткими выдержками».
Claude вызывает hybrid_search с query="AI music generation deep learning transformer", и Obsidian Hybrid Search возвращает список заметок, ранжированных по гибридной релевантности. Агент читает содержимое через get_note_content и выдаёт ответ. Всё локально, без утечки данных.
💡 Если вы используете Codex CLI, как мы описывали в гиде по Codex CLI, интеграция происходит аналогично: добавьте MCP-сервер в codex.config.json.
Кому это реально нужно?
- Владельцы больших vault (от 500 заметок). Когда поиск «по Ctrl+F» перестаёт спасать, а вы помните только «там была статья про то, как...» — семантический поиск вывозит.
- Разработчики AI-агентов. Если вы строите агента на MCP (Claude Code, Cursor, самописного через MCP и саб-агентов) и хотите дать ему доступ к вашей личной базе знаний, это самый быстрый и безопасный способ.
- Пользователи, которые заботятся о конфиденциальности. Все эмбеддинги вычисляются на вашем железе. Даже если вы используете MCP-агент в облаке (через Cursor), сам поиск остаётся локальным — агент только шлёт текст запроса.
- Все, кто устал от «пустых рук» LLM. Вместо того чтобы тратить время на формулировку идеальных промптов, вы даёте агенту доступ к своим архивным заметкам, и он сам находит контекст. Это особенно полезно, если вы параллельно используете подход суб-агентов, как в статье Owlex — один из агентов может быть выделен под поиск по знаниям.
Подводные камни: что может пойти не так
Как и любой инструмент, этот не идеален. Мои наблюдения после недели использования:
- Первая индексация требует скачивания модели SentenceTransformers (~90 МБ). Если вы на медленном интернете, готовьтесь подождать.
- Память: при большом vault (>10k файлов) процесс может съедать до 2 ГБ RAM из-за хранения эмбеддингов в памяти. Но это только если вы оставили сервер включенным. Для CLI-режима память освобождается.
- Не все языки одинаково хороши: модель по умолчанию обучена на английском. Для русского текста рекомендую заменить на
intfloat/multilingual-e5-smallилиsentence-transformers/paraphrase-multilingual-MiniLM-L12-v2. Это легко делается через флаг--modelпри индексации.
Если выстроить процесс грамотно, как мы советовали в статье про сжатие латентности поиска, эти издержки становятся незначительными на фоне выигрыша в точности.
Совет напоследок: не ищите слова, ищите смысл
Obsidian Hybrid Search — это не просто утилита. Это способ сказать своему AI-агенту: «Вот моя база знаний, разбирайся». Если вы до сих пор использовали для RAG внешние поисковики вроде Tavily или Bing (о чём мы писали в статье про самодельный поиск), то для личных заметок такой подход избыточен и небезопасен. Obsidian Hybrid Search остаётся за вашим файрволом.
Попробуйте. Настройте MCP-интеграцию с Claude Code или Cursor, и вы увидите, как агент перестанет «высасывать из пальца» ответы и начнёт опираться на ваши собственные наработки. А когда натренируетесь на поиске, можно расширить систему до полноценного агентного пайплайна, как в статье про локальные агентные AI.