Skip to main content
Glama

CI Gitleaks Trivy GitHub Release npm OpenSSF Scorecard OpenSSF Best Practices Ask DeepWiki vault-cortex MCP server

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 →).

npx vault-cortex@latest init — интерактивный мастер настройки выбирает режим, находит ваше хранилище, предлагает дополнительные параметры, генерирует конфигурацию и запускает сервер

Настроили через 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 сервера

Локально

http://localhost:8000/mcp

Удалённо

<PUBLIC_URL>/mcp

Добавьте 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

vault_read_note

Чтение заметки — полное тело, свойства, контур или раздел

vault_write_note

Создание заметки (ошибка, если уже существует; установите overwrite для замены)

vault_patch_note

Редактирование по заголовку (добавить в конец, в начало, заменить с защитой include_children, вставить)

vault_replace_in_note

Поиск и замена текста в заметке (первое совпадение или replace_all_occurrences)

vault_delete_span

Удаление блока строк по коротким якорям, без полного повторного цитирования

vault_list_notes

Список заметок с опциональным glob/фильтром по папке

vault_delete_note

Удаление заметки (защищённые пути соблюдаются)

vault_move_note

Перемещение или переименование заметки с переписыванием ссылок по всему хранилищу

Поиск

vault_search

Гибридный поиск с фильтрами по тегам/папкам/свойствам/датам

vault_search_by_tag

Поиск заметок по тегу (точное или префиксное совпадение)

vault_search_by_folder

Просмотр заметок в папке с метаданными

vault_recent_notes

Недавно изменённые или созданные заметки

vault_list_tags

Все теги со счётчиками использования

Задачи

vault_list_tasks

Индекс задач по всему хранилищу — с учётом канбана, 6 полей дат, приоритет, область папки/заголовка

vault_update_task

Одним вызовом статус, приоритет и смена дорожек — автоопределение дорожек «готово» на канбан-досках

Память

vault_get_memory

Чтение структурированной памяти (файл, раздел или всё)

vault_update_memory

Добавление записи с датой в раздел памяти

vault_delete_memory

Удаление конкретной записи памяти по дате

vault_list_memory_files

Обнаружение файлов памяти, их разделов и entry-policy каждого файла

vault_memory_recall

Гибридное вспоминание темы по записям через файлы памяти, от старых к новым

Свойства

vault_list_property_keys

Все ключи свойств с примерами значений

vault_list_property_values

Различные значения для ключа свойства

vault_search_by_property

Поиск заметок по паре ключ-значение свойства

vault_update_properties

Добавление или обновление свойств без касания тела

Ссылки

vault_get_backlinks

Заметки, ссылающиеся на заданный путь

vault_get_outgoing_links

Ссылки из заданной заметки

vault_find_orphans

Заметки без входящих ссылок

Файлы

vault_read_file

Чтение не-markdown файла — изображения приходят как изображения, канвасы как читаемые контуры

vault_list_files

Просмотр не-markdown файлов хранилища с размерами и количеством по расширениям

Ежедневные заметки

vault_get_daily_note

Ежедневная заметка за сегодня (или любую дату)

Промпты

Инструменты управляются моделью — их вызывает ассистент. Промпты — это рабочие процессы, которые запускаете вы. Каждый из них запрашивает поисковый индекс, граф связей и слой памяти в момент вызова, затем собирает результаты с направляющими инструкциями — так что сессия начинается с опорой на реальное состояние вашего хранилища, а не на предположения.

Промпт

Аргументы

Что делает

vault-orientation

Обзор статистики хранилища, распределения по папкам, уровня принятия свойств (отмечает низкий уровень), сирот, количества битых ссылок, тегов, недавних заметок и слоя памяти — с контекстными предложениями инструментов

memory-review

file?, max_chars?

Структурный обзор (callout-ы области, количество записей в разделах) + содержимое с датами как временная шкала. Направляемая рефлексия: нарратив эволюции, соответствие области, пробелы для заполнения и анализ покрытия — по умолчанию только добавление, удаление предлагается только для файлов с entry-policy: living. Скрыт, когда MEMORY_ENABLED=false, READONLY_MODE=true или DISABLED_TOOLS включает vault_update_memory.

daily-review

date?, max_chars?

Сверяет день — ежедневная заметка, статус задач по всему хранилищу (срок/просрочено, запланировано), изменённые заметки, исходящие ссылки (обнаружение битых ссылок) и обратные ссылки — показывает, что произошло, что открыто и что требует последующих действий

Промпты адаптируются к вашей конфигурации (MEMORY_DIR, настройки ежедневных заметок) и работают с любым хранилищем из коробки. Передайте max_chars, чтобы ограничить встроенное содержимое, если у вашего клиента есть лимиты полезной нагрузки.

Поддержка клиентов: Промпты работают в Claude Desktop (Chat и Cowork — через меню + под вашим коннектором), Claude Code (слэш-команды) и OpenCode. Поддержка в других клиентах (Cursor, Windsurf) различается — см. матрицу MCP-клиентов для актуальной информации.

Свойства

Vault Cortex индексирует каждое свойство в ваших заметках, но пять получают повышенный статус — выделенные столбцы для быстрой фильтрации и поля верхнего уровня в каждом результате поиска и обнаружения:

Свойство

Что вы можете сделать

title

Отображаемое имя в результатах поиска; при отсутствии используется имя файла

tags

Поиск и фильтрация по тегам, включая иерархии родитель-потомок (project соответствует project/vault-cortex)

type

Фильтрация по типу заметки — meeting, person, session-log или любое значение, используемое вашим хранилищем

created

Сортировка по дате создания и просмотр даты создания каждой заметки вместе с каждым результатом поиска

related

Фильтрация заметок, перекрёстно ссылающихся на конкретную ссылку — выявляет связи, невидимые без графового запроса

Все остальные свойства по-прежнему полностью доступны для запросов — используйте 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, …) — см. таблицу конфигурации в руководстве по удалённому развёртыванию.

Переменная

Обязательный?

По умолчанию

Описание

MCP_AUTH_TOKEN

Да

Токен Bearer для аутентификации (также ключ подписи JWT)

VAULT_PATH

Только локально

Локальный путь к вашему хранилищу (источник bind-mount; удалённое использует именованный том)

PUBLIC_URL

Только удалённо

Публичный URL для метаданных обнаружения OAuth. Заполняется автоматически на Render, Railway и Fly.io (из RENDER_EXTERNAL_URL, RAILWAY_PUBLIC_DOMAIN или FLY_APP_NAME), если оставлено пустым

OBSIDIAN_AUTH_TOKEN

Только удалённо

Токен аутентификации Obsidian Sync — CLI get-sync-token захватывает его за вас

VAULT_NAME

Только удалённо

Точное имя вашего хранилища Obsidian Sync (с учётом регистра)

STORAGE_ROOT

Единый каталог для всего, что должно сохраняться — хранилища, поискового индекса и состояния Obsidian Sync — для платформ контейнерного хостинга, которые допускают один постоянный том (Railway, Render, Fly.io). Смонтируйте том туда и укажите этот же путь

EMBEDDING_ENABLED

true

Установите false, чтобы отключить конвейер эмбеддингов — пропускает загрузку модели, векторные таблицы, проходы эмбеддингов и гибридный поиск. Поиск переключается на ключевое сопоставление FTS5.

RERANK_MODE

blended

Режим переранжирования кросс-энкодером: blended применяет позиционно-зависимое смешивание оценок после слияния RRF (~200 мс дополнительной задержки), none пропускает переранжирование. Действует только при EMBEDDING_ENABLED = true.

MEMORY_ENABLED

true

Установите false, чтобы полностью отключить слой памяти — скрывает инструменты памяти, пропускает начальную загрузку, исключает память из метаданных сервера. MEMORY_DIR игнорируется при false.

FILE_TOOLS_ENABLED

true

Установите false, чтобы скрыть файловые инструменты (vault_read_file, vault_list_files) — полезно для удалённых развёртываний, где синхронизация вложений Obsidian Sync отключена.

READONLY_MODE

false

Установите true, чтобы скрыть все инструменты, изменяющие хранилище, и пропустить автоматическое создание папки памяти — подключённые клиенты могут читать и искать, но не редактировать.

DISABLED_TOOLS

Скрывает отдельные инструменты по имени, через запятую (например, vault_delete_note,vault_move_note). Имена соответствуют столбцу Name в таблице инструментов. Только вычитающее — не может повторно включить инструмент, скрытый другим параметром. Неизвестное имя инструмента останавливает сервер при запуске, поэтому опечатки сразу становятся заметны.

MEMORY_DIR

About Me

Папка хранилища для структурированных файлов памяти

PROTECTED_PATHS

MEMORY_DIR, DAILY_NOTES_FOLDER

Папки, которые vault_delete_note отказывается трогать

ORPHAN_EXCLUDE_FOLDERS

DAILY_NOTES_FOLDER, Templates, MEMORY_DIR

Папки, исключённые из обнаружения осиротевших заметок

DAILY_NOTES_FOLDER

из конфигурации хранилища

Задаёт папку, в которой находятся ваши ежедневные заметки. Если не задано, читается из .obsidian/daily-notes.json хранилища, с запасным вариантом Daily Notes. См. Ежедневные заметки.

DAILY_NOTES_FORMAT

из конфигурации хранилища

Задаёт формат имени файла ежедневной заметки — те же токены, что и в настройке формата даты ежедневных заметок Obsidian. Если не задано, читается из .obsidian/daily-notes.json хранилища, с запасным вариантом YYYY-MM-DD. См. Ежедневные заметки.

TZ

UTC

Часовой пояс IANA для временных меток и разрешения ежедневных заметок

SERVICE_DOCUMENTATION_URL

URL репозитория GitHub

URL, возвращаемый в метаданных обнаружения OAuth

LOG_LEVEL

info

Уровень детализации журнала: debug, info, warn, error

LOG_DIR

/data/logs (удалённо), $STORAGE_ROOT/data/logs (один том), none (локально)

Каталог для файлов журнала, которые переживают пересоздание контейнера. Собственный журнал контейнера (то, что показывает docker logs) всегда записывается, но Docker отбрасывает его при каждом пересоздании контейнера — при обновлении образа или изменении конфигурации. Файлы с датой в имени под LOG_DIR находятся на томе данных и сохраняются. none оставляет только журнал контейнера.

LOG_RETENTION_DAYS

90

Сколько дней хранить файлы журнала перед автоматической очисткой при запуске; применяется только когда LOG_DIR — путь

WINDOWS_MODE

false

На Windows? Установите true. Переключает наблюдатель файлов на опрос, а перемещение заметок — на запись на основе переименования, чтобы хранилище на диске C: работало через Docker Desktop. Можно безопасно оставить включённым для любой настройки Windows; не требуется на macOS/Linux/WSL2.

MAX_FILE_BYTES

52428800 (50 МиБ)

Максимальный размер файла, который прочитает vault_read_file (в байтах). Файлы, превышающие это значение, отклоняются до чтения. Увеличьте для хранилищ с очень большими отдельными файлами.

MAX_IMAGE_OUTPUT_BYTES

49152 (48 КиБ)

Бюджет байтов для изображений, доставляемых vault_read_file, в двоичных байтах до кодирования base64. Изображения, превышающие это значение, уменьшаются и пересжимаются, чтобы соответствовать. Подобрано под самый строгий лимит массовых MCP-клиентов; увеличьте для клиентов, принимающих большие ответы.

MAX_PDF_RENDER_PAGES

5

Максимальное количество страниц PDF для рендеринга в изображения, когда raw: true задано в vault_read_file. Побайтовый бюджет на страницу — это MAX_IMAGE_OUTPUT_BYTES, разделённый поровну между отрендеренными страницами — меньше страниц означает выше качество каждой.

TRUST_PROXY_HOPS

0

Количество доверенных переходов обратного прокси, используемых для определения IP клиента из X-Forwarded-For (ограничение скорости OAuth, журналы запросов). Установите 1, когда перед сервером находится ровно один контролируемый вами прокси (Caddy, nginx, Cloudflare Tunnel, API Gateway). При 0 внедрённые заголовки пересылки игнорируются.

TRUST_FORWARDED_HEADER

false

Установите true только когда прокси перед сервером сообщает IP каждого посетителя в заголовке Forwarded по RFC 7239 (например, AWS API Gateway) — эталонное развёртывание AWS устанавливает это за вас. При false этот заголовок игнорируется.

  • Умные значения по умолчанию — установка 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 и локализованные форматы (LLLLL, 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 MCP_AUTH_TOKEN

OAuth использует динамическую регистрацию клиентов — Client ID/Secret не нужны. В браузере открывается страница согласия; введите свой MCP_AUTH_TOKEN для подтверждения. Refresh-токены имеют скользящий срок действия 60 дней (ежедневные пользователи никогда не проходят аутентификацию повторно).

См. ARCHITECTURE.md → Аутентификация для полной диаграммы потока.

Варианты развертывания

Локальный режим работает на вашей машине. Удалённые развертывания работают на VPS — ваше хранилище доступно, даже когда ноутбук закрыт.

Путь

Описание

Руководство

Локально

Ваше хранилище на вашей машине — бесплатно, без облака

deploy/local/

Удалённо

VPS + Obsidian Sync — доступ с любого устройства

deploy/remote/

AWS (SST)

Эталонное развертывание IaC — автоматизированная инфраструктура, эшелонированная защита аутентификации

DEPLOY.md

Путь 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 build

npm 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.

Лицензия

MIT

Образ :remote включает obsidian-headless (CLI ob), который является проприетарным — его package.json объявляет "license": "UNLICENSED" (© Dynalist Inc. / Obsidian). Он устанавливается из публичного npm во время сборки; лицензия MIT здесь не распространяется на него, и его использование требует активной подписки Obsidian Sync. Образ :latest (локальный) не содержит проприетарных компонентов.

Безопасность

Сообщайте об уязвимостях конфиденциально — см. SECURITY.md.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
7hResponse time
0dRelease cycle
198Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    3
    21
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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