Vault Cortex
Vault Cortex — это автономный MCP-сервер, который даёт любому ИИ-агенту гибридный поиск, управление задачами, структурированную память и доступ на чтение/запись к вашему хранилищу Obsidian. Никаких плагинов, запущенного Obsidian или отдельного моста. Один Docker-контейнер, ваша папка хранилища, полный набор инструментов + управляемые промпты. Разверните на VPS с Obsidian Sync — и то же хранилище будет доступно с телефона, claude.ai или любого удалённого MCP-клиента, защищённое OAuth 2.1.
Содержание — Что вы получаете · Быстрый старт · Как это работает · Гибридный поиск · Память · Задачи · Файлы · Инструменты · Промпты · Свойства · Конфигурация · Ежедневные заметки · Целостность данных · Аутентификация · Варианты развёртывания · Развёртывания сообщества
Что вы получаете
Удалённый доступ — работает с телефона, удалённого сервера или любого MCP-клиента через OAuth 2.1. Разверните на VPS с Obsidian Sync для доступа откуда угодно.
Без плагинов — Obsidian не нужно запускать. Сервер работает напрямую с файлами
.mdна диске. Headless-синхронизация поддерживает хранилище в актуальном состоянии.Гибридный поиск — ключевые слова FTS5 + векторное семантическое сходство через RRF-фьюжн, уточняемое переранжированием cross-encoder для запросов с сильной интенцией. Ключевые слова остаются точными на точных терминах и жаргоне; векторы находят заметки, даже когда ваши слова отличаются от слов в хранилище.
Структурированная память — датированные записи только на добавление накапливаются в личный слой знаний, автоматически инициализируемый для персонализации ИИ. Вспоминание по темам отвечает на вопрос «что я думаю об X?» с текущей позицией и датированной историей за ней — включая эволюцию.
Задачи — запросы и обновления задач с поддержкой канбана: триаж по статусу, датам или приоритету, затем завершение, изменение приоритета или перемещение задач между колонками одним вызовом. Разбирает как эмодзи-формат плагина Tasks, так и inline-поля Dataview.
Граф ссылок — обратные ссылки, исходящие ссылки и обнаружение сирот по всему хранилищу
Файлы — чтение и немаркдаун-файлов хранилища: изображения приходят как настоящие изображения (при необходимости уменьшенные), PDF — как структурированный текст или отрисованные страницы, канвасы — как читаемые контуры, файлы данных — как текст
Нативный Obsidian — понимает frontmatter, вики-ссылки, теги, заголовки и ежедневные заметки
Управляемые рабочие процессы — встроенные промпты для здоровья хранилища, обзора памяти и ежедневной сверки — собираются из живых данных хранилища каждый раз
Протестировано на 15-дневной поездке по Европе. 30+ сессий с телефона, 216 вызовов инструментов, ноль обращений к ноутбуку. Записи в одной сессии были сразу доступны в следующей, через города и дни.
Related MCP server: Vault MCP Server (mschuchard)
Быстрый старт
Локально (2 минуты — Docker + папка вашего хранилища)
Предварительные требования: Docker (или совместимый с Docker рантайм, например OrbStack, Colima, Podman), Node.js >= 20.12 (только для CLI — сам сервер работает в Docker) и хранилище Obsidian (или любая папка с файлами .md).
npx vault-cortex@latest initВот и всё — CLI спрашивает путь к хранилищу, генерирует токен аутентификации и файлы конфигурации, запускает сервер и печатает данные для подключения вашего MCP-клиента (справочник CLI →).

Настроили через CLI? Он управляет сервером и дальше — configure, upgrade, start, restart, logs, down (справочник CLI →).
Настроили через Compose? Для обновлений тоже используйте Compose (docker compose pull && docker compose up -d) — CLI и Compose управляют контейнером независимо.
# 1. Get the quickstart files
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/local/docker-compose.yml
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/local/.env.example
# 2. Configure
cp .env.example .env
# Edit .env — set MCP_AUTH_TOKEN (openssl rand -hex 32) and VAULT_PATH
# 3. Start
docker compose upПолное локальное руководство → (включая настройку Windows)
Удалённо (доступ откуда угодно — Docker + Obsidian Sync)
Предварительные требования: VPS с Docker (или совместимым с Docker рантаймом), подписка Obsidian Sync и Node.js >= 20.12 (только для CLI — сам сервер работает в Docker).
# On your VPS:
npx vault-cortex@latest init --mode remoteВот и всё — CLI проводит через публичный URL, токен Obsidian Sync (он может запустить get-sync-token за вас) и конфигурацию аутентификации, затем запускает сервер (справочник CLI →).
Настроили через CLI? Он управляет настройкой и дальше — configure, upgrade, start, restart, logs, down (справочник CLI →).
Настроили через Compose? Для обновлений тоже используйте Compose (docker compose pull && docker compose up -d) — CLI и Compose управляют контейнером независимо.
# On your VPS:
mkdir -p /opt/vault-cortex && cd /opt/vault-cortex
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/remote/docker-compose.yml
curl -O https://raw.githubusercontent.com/aliasunder/vault-cortex/main/deploy/remote/.env.example
cp .env.example .env
# Edit .env — set MCP_AUTH_TOKEN, PUBLIC_URL, OBSIDIAN_AUTH_TOKEN, VAULT_NAME
docker compose up -dПолное удалённое руководство →
Подключите ваш MCP-клиент
Настройка | URL сервера |
Локально |
|
Удалённо |
|
Добавьте URL сервера в любой MCP-клиент — Claude Code, Claude Desktop, Cursor, OpenCode или любой другой. OAuth-клиенты открывают страницу согласия в вашем браузере — подтвердите своим токеном, и клиент будет автоматически продлевать токен дальше. Клиенты без OAuth (MCP Inspector, скрипты) отправляют токен напрямую в заголовке Authorization: Bearer.
Claude Code:
claude mcp add --scope user --transport http vault-cortex http://localhost:8000/mcp # local (or <PUBLIC_URL>/mcp)--scope user регистрирует сервер для каждого проекта; опустите его, чтобы ограничить область только текущей директорией.
Диалог «Add custom connector» принимает только URL https. С публичным URL https PUBLIC_URL добавьте его напрямую в диалоге коннектора; для сервера на localhost зарегистрируйте его в claude_desktop_config.json через stdio-мост mcp-remote вместо этого:
{
"mcpServers": {
"vault-cortex": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8000/mcp",
"--header",
"Authorization: Bearer <your MCP_AUTH_TOKEN>"
]
}
}
}claude.ai (веб и мобильный) подключается только к удалённой настройке — его коннекторы загружаются на стороне сервера и никогда не могут достичь localhost.
«Удалённый MCP-сервер» относится к типу подключения (HTTP) — в локальной настройке сервер по-прежнему работает полностью на вашей машине.
См. Аутентификация для обоих методов и сроков жизни токенов.
Как это работает
Всё работает в одном Docker-контейнере, напрямую с файлами .md на диске:
Ваше хранилище остаётся источником истины — сервер читает и пишет те же обычные Markdown-файлы, что и ваши приложения Obsidian.
Поиск — это производные данные — файловый наблюдатель поддерживает индекс (ключевые слова + векторы) в актуальном состоянии по мере изменения заметок, и его можно перестроить из ваших заметок в любое время.
Удалённый образ добавляет цикл синхронизации — встроенный сервис Obsidian Sync поддерживает хранилище контейнера актуальным на всех устройствах: отредактируйте заметку на телефоне — и она станет доступна для поиска через мгновение; агент пишет заметку — и она появляется в Obsidian.
graph LR
subgraph container ["One Docker container"]
Sync["sync service<br/>(remote image)"]
Vault[("/vault<br/>.md files — source of truth")]
Index[("search index<br/>keywords + vectors")]
Server["MCP server"]
Sync <-->|read/write| Vault
Vault -->|file watcher| Index
Server <-->|read/write| Vault
Server -->|query| Index
end
Obsidian["Your Obsidian apps<br/>(phone, laptop)"] <-->|Obsidian Sync| Sync
Client["Any MCP client<br/>(Claude, Cursor, claude.ai)"] -->|OAuth 2.1 / Bearer| ServerСм. ARCHITECTURE.md для полного дизайна, диаграмм потока аутентификации и разбивки компонентов.
Гибридный поиск
Поиск только по ключевым словам терпит неудачу, когда ваш словарный запас не совпадает со словарём хранилища — «стремления» не найдут заметку о «целях», «коллеги» не всплывут в вашем файле «референсы». В тестировании на реальном хранилище 30% запросов на естественном языке возвращали ноль или касательные результаты только по ключевым словам. Гибридный поиск устранил эти промахи — векторы преодолевают словарный разрыв, а переранжировщик спасает запросы с сильной интенцией, где ни один сигнал сам по себе не силён.
Гибридный поиск объединяет три сигнала ранжирования через Reciprocal Rank Fusion:
Ключевые слова (FTS5) остаются точными на точных терминах, жаргоне и значениях свойств
Векторы (sqlite-vec) преодолевают словарный разрыв, сопоставляя по смыслу
Переранжировщик (cross-encoder) уточняет порядок, оценивая каждую пару запрос-документ совместно — спасает запросы с сильной интенцией, где ключевые слова и векторы оба промахиваются
Все модели работают локально (~45MB всего, без внешних API). Установите EMBEDDING_ENABLED=false для поиска только по ключевым словам или RERANK_MODE=none, чтобы пропустить переранжирование для меньшей задержки.
См. ARCHITECTURE.md → Гибридный поиск для деталей моделей, весов смешивания и полной разбивки конвейера.
Память
Слой памяти, который только растёт, полезен только если агенты могут извлекать нужные записи, не сваливая всё в контекст. Когда у вас сотни датированных записей в нескольких файлах — предпочтения, принципы, стиль общения, текущие обязательства — чтение целых файлов тратит контекст на нерелевантный материал и засоряет сигнал. Система памяти спроектирована для целевого извлечения: агенты накапливают знания со временем и вспоминают именно то, что релевантно текущей задаче.
Слой — это папка обычных Markdown-файлов (по умолчанию: About Me/) с датированными записями под тематическими заголовками — автоматически создаётся со стартовыми шаблонами при первом запуске, пополняется агентами через vault_update_memory. Три свойства делают её рабочей:
Только добавление — записи никогда не перезаписываются; исправления приходят как новые записи с датами. Слой становится личной базой знаний, которая фиксирует ваше текущее состояние и эволюцию за ним
Вспоминание по темам —
vault_memory_recallизвлекает все релевантные записи из всех файлов памяти сразу, по ключевым словам и семантически, от старых к новым. Спросите «что я думаю об X?» и получите текущую позицию плюс историю её развития с датами — без необходимости читать целые файлы или угадывать, в каком файле что лежитРастёт без деградации — ограничение результатов (
max_results) отбрасывает наименее релевантные записи, а не срез временной шкалы. Слой памяти с 500 записями обслуживает целевой запрос так же хорошо, как и с 50
Файлы, которые описывают текущее состояние, а не то, что было верно (рутины, активные обязательства), могут объявлять entry-policy: living во frontmatter — их устаревшие записи можно удалять, а не сохранять, что сохраняет точность картины текущего состояния.
Весь слой опционален — установите MEMORY_ENABLED=false, чтобы скрыть инструменты памяти и полностью пропустить автоматическое создание папки.
См. ARCHITECTURE.md → Memory для конвейера вспоминания, модели индексации, автоинициализации и поведения при отключении, а также templates/memory для формата файлов, соглашения об entry-policy и стартовых шаблонов.
Задачи
Метаданные задач живут в обычном markdown — разбросаны по файлам, закодированы в эмодзи-маркерах или инлайн-полях, организованы под заголовками канбана. Агенту, отвечающему на вопрос «что просрочено?», пришлось бы парсить каждый файл и понимать ваш выбранный формат; завершение задачи на канбан-доске означает знание структуры дорожек доски, синтаксиса дат и того, какой заголовок является дорожкой «готово».
Слой задач берёт это на себя, чтобы агентам не приходилось:
Находить — фильтрация по статусу, шести полям дат (срок, запланировано, начало, создано, готово, отменено), приоритету, папке или дорожке канбана. Каждый результат несёт свою дорожку, путь к заметке, заголовок и номер строки — никаких дополнительных чтений для поиска задачи
Обновлять — завершить, изменить приоритет и переместить задачи между дорожками канбана одним вызовом. Отметка задачи как выполненной автоматически определяет дорожку «готово» и проставляет дату завершения; отмена этого удаляет дату. Все три изменения могут произойти одновременно
Оба формата — какой бы формат вы ни использовали, эмодзи-маркеры Tasks plugin или инлайн-поля Dataview, сервер читает оба и пишет в том формате, под который настроен ваш Tasks plugin
См. ARCHITECTURE.md → Tasks для модели индексации, каскадной сортировки по датам и определения дорожек канбана.
Файлы
Ваши заметки содержат скриншоты, диаграммы архитектуры и ссылки на канвасы и файлы данных — но для агента, читающего markdown, ![[diagram.png]] — просто текст. vault-cortex относится к файлам как к части хранилища, а не как к мусору вокруг него — связанными, масштабированными и читаемыми, каждый в той форме, которую агент действительно может использовать:
Изображения — само изображение, а не имя файла. Скриншоты и диаграммы уменьшаются и пересжимаются на сервере, когда превышают то, что принимают MCP-клиенты, так что даже сессия с телефона может посмотреть диаграмму архитектуры на 5 МБ
Канвасы — доска Canvas приходит как читаемый контур: её группы, содержимое каждой карточки в порядке чтения и связи между ними. Содержимое канваса полнотекстово ищется, а ссылки на файлы на доске появляются в графе связей — обратные и исходящие ссылки работают так же, как ссылки между заметками. Точный JSON-исходник — в одном флаге, когда важна полная точность
PDF — текст извлекается с сохранением иерархии заголовков, блоков кода и гиперссылок; содержимое PDF полнотекстово ищется наравне с вашими заметками. Установите
raw: true, чтобы вместо этого рендерить страницы как изображения, показывая вёрстку, диаграммы и таблицы, которые текстовая экстракция сохранить не может — сканы и PDF только с изображениями работают в этом режимеТекстовые и файлы данных — TXT, SVG, JSON, XML, CSV, YAML, логи и файлы Bases возвращаются точно как написаны; первые 100 КБ содержимого полнотекстово ищутся. Большие файлы данных и логи можно читать по диапазонам строк, при этом каждая страница сообщает, где вы находитесь и сколько файла осталось
Просмотр — список файлов любой видимой папки с количеством по расширениям и размерами; файлы, на которые ссылается заметка, также сообщают свой размер в графе связей
Установите FILE_TOOLS_ENABLED=false, чтобы скрыть инструменты файлов — полезно, когда ваше удалённое хранилище синхронизируется без вложений.
См. ARCHITECTURE.md → Files для конвейера изображений и модели диспетчеризации.
Инструменты
Категория | Инструмент | Описание |
Vault CRUD |
| Чтение заметки — полное тело, свойства, контур или раздел |
| Создание заметки (ошибка, если уже существует; установите | |
| Редактирование по заголовку (добавить в конец, в начало, заменить с защитой | |
| Поиск и замена текста в заметке (первое совпадение или | |
| Удаление блока строк по коротким якорям, без полного повторного цитирования | |
| Список заметок с опциональным glob/фильтром по папке | |
| Удаление заметки (защищённые пути соблюдаются) | |
| Перемещение или переименование заметки с переписыванием ссылок по всему хранилищу | |
Поиск |
| Гибридный поиск с фильтрами по тегам/папкам/свойствам/датам |
| Поиск заметок по тегу (точное или префиксное совпадение) | |
| Просмотр заметок в папке с метаданными | |
| Недавно изменённые или созданные заметки | |
| Все теги со счётчиками использования | |
Задачи |
| Индекс задач по всему хранилищу — с учётом канбана, 6 полей дат, приоритет, область папки/заголовка |
| Одним вызовом статус, приоритет и смена дорожек — автоопределение дорожек «готово» на канбан-досках | |
Память |
| Чтение структурированной памяти (файл, раздел или всё) |
| Добавление записи с датой в раздел памяти | |
| Удаление конкретной записи памяти по дате | |
| Обнаружение файлов памяти, их разделов и entry-policy каждого файла | |
| Гибридное вспоминание темы по записям через файлы памяти, от старых к новым | |
Свойства |
| Все ключи свойств с примерами значений |
| Различные значения для ключа свойства | |
| Поиск заметок по паре ключ-значение свойства | |
| Добавление или обновление свойств без касания тела | |
Ссылки |
| Заметки, ссылающиеся на заданный путь |
| Ссылки из заданной заметки | |
| Заметки без входящих ссылок | |
Файлы |
| Чтение не-markdown файла — изображения приходят как изображения, канвасы как читаемые контуры |
| Просмотр не-markdown файлов хранилища с размерами и количеством по расширениям | |
Ежедневные заметки |
| Ежедневная заметка за сегодня (или любую дату) |
Промпты
Инструменты управляются моделью — их вызывает ассистент. Промпты — это рабочие процессы, которые запускаете вы. Каждый из них запрашивает поисковый индекс, граф связей и слой памяти в момент вызова, затем собирает результаты с направляющими инструкциями — так что сессия начинается с опорой на реальное состояние вашего хранилища, а не на предположения.
Промпт | Аргументы | Что делает |
| — | Обзор статистики хранилища, распределения по папкам, уровня принятия свойств (отмечает низкий уровень), сирот, количества битых ссылок, тегов, недавних заметок и слоя памяти — с контекстными предложениями инструментов |
|
| Структурный обзор (callout-ы области, количество записей в разделах) + содержимое с датами как временная шкала. Направляемая рефлексия: нарратив эволюции, соответствие области, пробелы для заполнения и анализ покрытия — по умолчанию только добавление, удаление предлагается только для файлов с |
|
| Сверяет день — ежедневная заметка, статус задач по всему хранилищу (срок/просрочено, запланировано), изменённые заметки, исходящие ссылки (обнаружение битых ссылок) и обратные ссылки — показывает, что произошло, что открыто и что требует последующих действий |
Промпты адаптируются к вашей конфигурации (MEMORY_DIR, настройки ежедневных заметок) и работают с любым хранилищем из коробки. Передайте max_chars, чтобы ограничить встроенное содержимое, если у вашего клиента есть лимиты полезной нагрузки.
Поддержка клиентов: Промпты работают в Claude Desktop (Chat и Cowork — через меню + под вашим коннектором), Claude Code (слэш-команды) и OpenCode. Поддержка в других клиентах (Cursor, Windsurf) различается — см. матрицу MCP-клиентов для актуальной информации.
Свойства
Vault Cortex индексирует каждое свойство в ваших заметках, но пять получают повышенный статус — выделенные столбцы для быстрой фильтрации и поля верхнего уровня в каждом результате поиска и обнаружения:
Свойство | Что вы можете сделать |
| Отображаемое имя в результатах поиска; при отсутствии используется имя файла |
| Поиск и фильтрация по тегам, включая иерархии родитель-потомок ( |
| Фильтрация по типу заметки — |
| Сортировка по дате создания и просмотр даты создания каждой заметки вместе с каждым результатом поиска |
| Фильтрация заметок, перекрёстно ссылающихся на конкретную ссылку — выявляет связи, невидимые без графового запроса |
Все остальные свойства по-прежнему полностью доступны для запросов — используйте vault_search с filters.properties для комбинированных текстовых и метаданных запросов, или vault_search_by_property для поиска только по метаданным. vault_list_property_keys и vault_list_property_values позволяют узнать, какие свойства существуют в вашем хранилище.
Это соглашения, а не требования — Vault Cortex работает с любой схемой свойств. Повышенные свойства просто дают вам более богатую фильтрацию и более чистые результаты из коробки.
Ведущие callout'ы получают такую же обработку. Когда первый контент тела заметки — это Obsidian callout (> [!type]) — либо сразу после frontmatter, либо сразу после заголовка — он индексируется и отображается вместе с каждым результатом обнаружения (в vault_search запросите его с помощью include_leading_callout). Это делает заметки самодокументируемыми: агент, просматривающий результаты, может увидеть, для чего предназначена каждая заметка, прежде чем решить, какую читать. Шаблоны памяти используют callout'ы > [!info] Scope of this file для этого, и любая заметка в вашем хранилище может использовать тот же шаблон.
Конфигурация
Все настройки — это переменные окружения с разумными значениями по умолчанию. Удалённые развёртывания имеют дополнительные настройки, не включённые ниже (SYNC_CONFIGS, SYNC_MODE, …) — см. таблицу конфигурации в руководстве по удалённому развёртыванию.
Переменная | Обязательный? | По умолчанию | Описание |
| Да | — | Токен Bearer для аутентификации (также ключ подписи JWT) |
| Только локально | — | Локальный путь к вашему хранилищу (источник bind-mount; удалённое использует именованный том) |
| Только удалённо | — | Публичный URL для метаданных обнаружения OAuth. Заполняется автоматически на Render, Railway и Fly.io (из |
| Только удалённо | — | Токен аутентификации Obsidian Sync — CLI |
| Только удалённо | — | Точное имя вашего хранилища Obsidian Sync (с учётом регистра) |
| — | — | Единый каталог для всего, что должно сохраняться — хранилища, поискового индекса и состояния Obsidian Sync — для платформ контейнерного хостинга, которые допускают один постоянный том (Railway, Render, Fly.io). Смонтируйте том туда и укажите этот же путь |
| — |
| Установите |
| — |
| Режим переранжирования кросс-энкодером: |
| — |
| Установите |
| — |
| Установите |
| — |
| Установите |
| — | — | Скрывает отдельные инструменты по имени, через запятую (например, |
| — |
| Папка хранилища для структурированных файлов памяти |
| — |
| Папки, которые |
| — |
| Папки, исключённые из обнаружения осиротевших заметок |
| — | из конфигурации хранилища | Задаёт папку, в которой находятся ваши ежедневные заметки. Если не задано, читается из |
| — | из конфигурации хранилища | Задаёт формат имени файла ежедневной заметки — те же токены, что и в настройке формата даты ежедневных заметок Obsidian. Если не задано, читается из |
| — |
| Часовой пояс IANA для временных меток и разрешения ежедневных заметок |
| — | URL репозитория GitHub | URL, возвращаемый в метаданных обнаружения OAuth |
| — |
| Уровень детализации журнала: |
| — |
| Каталог для файлов журнала, которые переживают пересоздание контейнера. Собственный журнал контейнера (то, что показывает |
| — |
| Сколько дней хранить файлы журнала перед автоматической очисткой при запуске; применяется только когда |
| — |
| На Windows? Установите |
| — |
| Максимальный размер файла, который прочитает |
| — |
| Бюджет байтов для изображений, доставляемых |
| — |
| Максимальное количество страниц PDF для рендеринга в изображения, когда |
| — |
| Количество доверенных переходов обратного прокси, используемых для определения IP клиента из |
| — |
| Установите |
Умные значения по умолчанию — установка
MEMORY_DIRилиDAILY_NOTES_FOLDERавтоматически обновляет значения по умолчанию дляPROTECTED_PATHSиORPHAN_EXCLUDE_FOLDERS; когдаDAILY_NOTES_FOLDERне задан, его место занимаетDaily Notes. Папка ежедневных заметок, настроенная только вdaily-notes.json, не подхватывается — добавьте её вPROTECTED_PATHSсамостоятельно. Явно эти значения задаются только для полностью кастомного списка.MEMORY_ENABLED=falseполностью отключает слой памяти — инструменты памяти скрыты, а папка памяти не создаётся автоматически.FILE_TOOLS_ENABLED=falseполностью скрывает файловые инструменты — полезно, когда в Obsidian Sync отключена синхронизация вложений и на диске нет файлов.READONLY_MODE=trueскрывает все инструменты записи в хранилище и пропускает автоматическое создание папки памяти — подключённые клиенты могут читать и искать, но никогда не редактировать.DISABLED_TOOLSскрывает ровно те инструменты, которые вы назвали — для более тонкого контроля, чем переключатели выше, например, оставить запись включённой, но убратьvault_delete_noteиvault_move_note. Перекрёстные ссылки, зависящие от доступности, в описаниях инструментов и промптах настраиваются автоматически.
См. templates/memory/ с примерами файлов памяти и философией дизайна датированных записей.
Ежедневные заметки
vault_get_daily_note и промпт ежедневного обзора находят ваши ежедневные заметки, используя папку и формат даты в имени файла, настроенные в Obsidian и читаемые из .obsidian/daily-notes.json вашего хранилища:
Локальный режим читает файл напрямую из вашего примонтированного хранилища — ничего настраивать не нужно.
Удалённый режим получает его через синхронизацию конфигурации хранилища Obsidian Sync. Сервер забирает его по умолчанию (настройка
SYNC_CONFIGSв.env), но, скорее всего, вам нужно будет включить сторону отправки: Obsidian Settings → Sync → Vault configuration sync, на каждом устройстве. Подробности: раздел «Daily notes» в руководстве по удалённому развертыванию.
Когда файл недоступен — или вы используете плагин Periodic Notes, чьи настройки он не отражает, — задайте DAILY_NOTES_FOLDER (любой путь относительно хранилища: Journal, Planner/Daily) и DAILY_NOTES_FORMAT (те же токены, что и в настройке формата даты Obsidian: YYYY-MM-DD-dddd, YYYY/MM/DD, MMM D, YYYY, …). Можно задать одно или оба — заданное значение всегда имеет приоритет над файлом конфигурации. Если нет ни одного источника, сервер использует Daily Notes и YYYY-MM-DD по умолчанию.
Примечание: Некоторые токены формата даты не поддерживаются — порядковые числительные (
Do,Mo,DDDo,wo),dd(двухбуквенный день недели),d(номер дня недели),e,k/kkи локализованные форматы (L–LLLL,LT,LTS). Сервер не может воспроизвести имена файлов, которые Obsidian создаёт с этими токенами, поэтому он никогда не смог бы найти заметки. Если ваш формат использует любой из них,vault_get_daily_noteвозвращает понятную ошибку — измените формат в Obsidian или задайтеDAILY_NOTES_FORMATс поддерживаемой альтернативой.
Целостность данных
Vault Cortex выполняет запись в личные заметки — слой безопасности файлов создан для предотвращения повреждений, а не только ошибок.
Атомарные записи — каждая запись файла сначала помещается во временный файл, затем переименовывается. Читатели никогда не видят частичную или нулевую заметку. Эксклюзивное создание использует
link()(POSIX no-clobber), чтобы закрыть окно TOCTOU при перемещении заметок.Мьютекс на файл — параллельные вызовы инструментов MCP сериализуются или быстро завершаются с ошибкой для каждого файла. Перемещения блокируют источник, назначение и каждый источник обратных ссылок как единое целое.
Запрет обхода путей —
resolveSafePath()сначала разрешает путь, затем проверяет префикс каждого пути. Удаление защищённых путей отклоняется после нормализации. Имена файлов памяти отвергают разделители на границе.Скрытые пути недоступны — файлы и папки, начинающиеся с точки (
.obsidian/,.trash/), никогда не появляются в списках или поиске, а любой вызов инструмента, направленный непосредственно на них, отклоняется, как и в Obsidian. Конфигурации плагинов и их API-ключи остаются вне досягаемости.Предотвращение инъекций — поисковые запросы параметризуются и очищаются для FTS5; содержимое промптов оборачивается в XML-маркеры данных с экранированием закрывающих тегов для предотвращения инъекций через выход из тега.
Укрепление контейнера — пользователь без root, init как PID 1, отсутствие менеджеров пакетов в образе выполнения, базовый образ с закреплённым digest, корректное завершение работы.
См. ARCHITECTURE.md → Целостность данных для деталей механизмов и SECURITY.md → Укрепление среды выполнения для полного перечня поверхности атак.
Аутентификация
Для сервера с доступом на чтение и запись к личным заметкам аутентификация не является опциональной. Vault Cortex реализует полную спецификацию OAuth 2.1, включая PKCE и ротацию refresh-токенов. Развертывание AWS (SST) добавляет эшелонированную защиту: запросы проверяются на двух независимых уровнях (авторизатор Lambda в API Gateway + промежуточное ПО Express). Согласно анализу безопасности MCP от BlueRock за 2026 год, только 8,5% MCP-серверов реализуют OAuth; 41% не имеют аутентификации вообще.
Метод | Используется | Формат токена |
OAuth 2.1 | Claude Desktop, Claude Code, claude.ai, любой OAuth-клиент | JWT (HS256, 24h) |
Статический bearer | Claude Code, MCP Inspector, curl | Raw |
OAuth использует динамическую регистрацию клиентов — Client ID/Secret не нужны. В браузере открывается страница согласия; введите свой MCP_AUTH_TOKEN для подтверждения. Refresh-токены имеют скользящий срок действия 60 дней (ежедневные пользователи никогда не проходят аутентификацию повторно).
См. ARCHITECTURE.md → Аутентификация для полной диаграммы потока.
Варианты развертывания
Локальный режим работает на вашей машине. Удалённые развертывания работают на VPS — ваше хранилище доступно, даже когда ноутбук закрыт.
Путь | Описание | Руководство |
Локально | Ваше хранилище на вашей машине — бесплатно, без облака | |
Удалённо | VPS + Obsidian Sync — доступ с любого устройства | |
AWS (SST) | Эталонное развертывание IaC — автоматизированная инфраструктура, эшелонированная защита аутентификации |
Путь AWS включает CI/CD-воркфлоу, созданные для этого репозитория, — форкерам нужно настроить собственные учетные данные и стейдж перед развертыванием.
Все три пути используют один и тот же образ, ghcr.io/aliasunder/vault-cortex — :latest — это только MCP-сервер (локально), :remote включает Obsidian Sync в тот же контейнер под управлением s6-overlay (удалённо и AWS). Один контейнер означает, что подойдёт любая OCI-совместимая среда выполнения: docker run, Podman, nerdctl — Docker Compose не обязателен.
Также на Docker Hub: те же образы зеркалируются в
aliasunder/vault-cortex. GHCR — основной источник; теги на Hub идентичны.
Стоимость: Для удалённой настройки нужны VPS и $4 USD/мес за Obsidian Sync. Экземпляр на 2 GiB отлично справляется с семантическим поиском для типичного хранилища; 4 GiB добавляют запас для одновременного поиска и более крупных хранилищ. Если полностью отказаться от семантического поиска, можно обойтись ещё меньшими ресурсами. Только локальный режим бесплатен. Эталонное развертывание AWS обходится суммарно в ~$17–29/мес.
Развертывания сообщества
Шаблоны развертывания, созданные и поддерживаемые сообществом, — здесь не тестировались и могут отставать от релизов.
vault-cortex-aca — шаблон Bicep для Azure Container Apps от @flytzen. Запускает образ
:remoteза ingress Container Apps с бесплатным управляемым HTTPS; хранилище намеренно эфемерное, а Obsidian Sync является источником истины.
Создали развертывание для другой платформы? Откройте PR, чтобы добавить его сюда.
Разработка
# Run locally with hot reload
PUBLIC_URL=http://localhost:8000 MCP_AUTH_TOKEN=local-dev-token VAULT_PATH=~/Vault npm run dev:mcp
# Tests
npm test
# Full check suite
npm run prettier:check && npm run lint && npm test && npm run buildnpm test включает интеграционные тесты, которые запускают реальный сервер и вызывают каждый инструмент и промпт по HTTP — проверяя принудительное применение аутентификации, поверхности инструментов, управляемые конфигурацией, целостность операций записи (каждая запись читается обратно) и отказ при запуске из-за неправильной конфигурации. См. SECURITY.md для покрытия, значимого для безопасности.
MCP Inspector — интерактивный браузерный интерфейс для тестирования инструментов:
# Start server (terminal 1), then:
npx @modelcontextprotocol/inspector
# Enter http://localhost:8000/mcp as URL, local-dev-token as Bearer tokenСм. CONTRIBUTING.md для полной настройки разработки.
Компаньон: навык obsidian-vault
MCP-сервер работает сам по себе с любым клиентом. Для агентов, поддерживающих навыки (Claude Code, Cursor, Windsurf, Cline и ещё 70+), навык obsidian-vault добавляет более глубокое знание markdown в стиле Obsidian — соглашения о frontmatter, синтаксис callout и форматы, специфичные для плагинов, такие как Dataview, Tasks и Kanban.
npx skills add aliasunder/agent-skills --skill obsidian-vaultДорожная карта
Этап | Описание | Статус |
1 | CRUD хранилища, полнотекстовый поиск (FTS5), слой памяти, OAuth 2.1 | Завершено |
2a | Гибридный поиск — FTS5 + вектор + объединение RRF, разбиение с учётом заголовков | Завершено |
2b | Реранкер — реранжирование cross-encoder, смешивание оценок с учётом позиции | Завершено |
3a | Слой задач — индекс задач по всему хранилищу, структурированные запросы и обновление задач одним вызовом (форматы эмодзи плагина Tasks + Dataview) | Завершено |
3b | Извлечение из памяти — извлечение с точностью до записи по датированной истории слоя памяти | Завершено |
3c | Графовые запросы — многошаговый обход существующего графа вики-ссылок хранилища (пути, окрестности) | Исследуется |
Благодарности
Синхронизация Obsidian работает на базе obsidian-headless — подход к контейнеризации вдохновлён obsidian-headless-sync-docker от @Belphemur. Каркас управления s6-overlay для образа :remote был заимствован из поддерживаемого форка этого проекта и теперь живёт в этом репозитории.
Конвейер гибридного поиска опирается на паттерны из qmd от @tobi — объединение RRF с бонусами за ранг, смешивание оценок с учётом позиции для реранжирования cross-encoder, фильтрация по хэшу содержимого и разбиение с учётом заголовков.
Участие в разработке
См. CONTRIBUTING.md для настройки разработки, соглашений о коде и правил оформления PR.
Лицензия
Образ :remote включает obsidian-headless
(CLI ob), который является проприетарным — его package.json объявляет "license": "UNLICENSED"
(© Dynalist Inc. / Obsidian). Он устанавливается из публичного npm во время сборки; лицензия MIT здесь
не распространяется на него, и его использование требует активной подписки Obsidian Sync. Образ :latest
(локальный) не содержит проприетарных компонентов.
Безопасность
Сообщайте об уязвимостях конфиденциально — см. SECURITY.md.
Maintenance
Related MCP Servers
- AlicenseAqualityDmaintenanceA server that enables AI agents to perform sophisticated knowledge discovery and analysis across Obsidian vaults through the Local REST API plugin, supporting complex multi-step workflows with advanced filtering and full content retrieval.321MIT
- AlicenseNot gradedqualityBmaintenanceA third-party MCP server for interacting with HashiCorp Vault to manage ACL policies, audit devices, and secret engines like KV v2, PKI, and Transit. It provides tools for system backend administration and includes prompts for generating security policy configurations.MIT
- AlicenseAqualityAmaintenanceThe most feature-complete MCP server for Obsidian vaults. 23 tools and 3 resources for search, read, write, tags, link analysis, graph traversal, and canvas support.4118228MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Obsidian — access your vault from any AI agent, even when your machine is off. Powered by Self-hosted LiveSync.22147MIT
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/aliasunder/vault-cortex'
If you have feedback or need assistance with the MCP directory API, please join our Discord server