Skip to main content
Glama

Seekstone

obsidian-mcp-server (#1 по загрузкам)

REST-прокси-серверы

Плагин Local REST API

Не нужен

Обязателен

Обязателен

Запущенное приложение Obsidian

Не нужно — работает при закрытом Obsidian

Обязательно

Обязательно

Объём ответа поиска @ 10k заметок

2.0 КБ

47 КБ

до 95 МБ

Задержка тёплого v9

6.2 мс

732 мс (~118 проектка)

до 1 550 мс

Структурированные запросы по frontmatter

Встроен (query_notes) — фильтры]] по свойствам/датам/размеру, ответ занимает несколько сотен байт

JSON-логика через REST

Зависит от сервера

Те же запросы, те же закоммиченные хранилища, 20 прогонов каждый, одна машина — тестовый стенд замерял эталонные состояния с июня по август 2026 (даты указаны в каждом отчёте) — полные результаты по восьми серверам и трём размерам хранилища ниже, полностью воспроизводимые из стенда.



Что такое Seekstone?

Seekstone — это Obsidian MCP-сервер — он даёт Claude (и любому клиенту Model Context Protocol) прямой доступ на чтение и запись к вашему хранилищу Obsidian. Приложение Obsidian не нужно держать открытым, плагины не требуются, и ничего не покидает ваш компьютер.

Он читает ваше хранилище напрямую с диска, а не через плагин Obsidian Local REST API, и хранит в процессе тёплый полнотекстовый индекс. Практическая разница двоякая:

  • Скорость. Поиск по ключевым словам на прогретом индексе возвращается за единицы миллисекунд, семантический поиск — за ~14 мс, что до ~440× быстрее, чем у всех остальных протестированных Obsidian MCP-серверов, потому что не надо порождать подпроцесс и гонять HTTP-запрос на каждый поиск.

  • Контекст. Широкий поиск, который через REST-прокси-сервер возвращает десятки мегабайт и миллионы токенов, через Seekstone возвращает ~2 КБ — снижение до ~47,000×, причём с ростом хранилища оно только увеличивается.

Поиск работает в трёх режимах: ранжированный полнотекстовый поиск (нечёткое и префиксное сопоставление), опциональный локальный семантический поиск (по смыслу, через небольшую встраиваемую модель эмбеддингов — включается вручную и полностью офлайн после единоразовой загрузки ~30 МБ), и структурированные запросы к метаданнымquery_notes умеет фильтровать по свойствам frontmatter (status, due, type, …), тегам, папке, времени изменения и размеру, отвечая на вопросы вроде «какие черновые заметки изменились за эту неделю?» за несколько сотен байт, вместо цикла «поиск — потом чтение».

Claude может искать и читать всю вашу библиотеку заметок за миллисекунды и полезно не сжигать на это большуючасть контекстного окна.

Опубликован на npm как seekstone — установка через npx -y Seekstone. (Раньше также выпускался как obsidian-mcp-seekstone; этот псевдоним устарел, но существующие установки продолжат работать.)


Related MCP server: mcp-obsidian-ek

Почему We? Цифры.

Большинство Obsidian MCP-серверов возвращают полное содержимое заметок для каждого найденного документа. При широком запросе это мегабайты текста, который вашей LLM приходится обрабатывать; почти весь он нерелевантен и сжигает контекст. Seekstone же отдаёт короткие ранжированные извлечения (по умолчанию ~120 символов, настраиваетсяв каждом запросе). Мы прогнали Seekstone против 7 другоих Observer MCP-сервера — всего 8 серверов — на трёх размерах хранилища — 1 000 / 5 000 / 10 000 заметок (по 20 прогонов). Каждая цифра ниже полностью воспроизводима: хранилища закоммичены в репозиторий (сгенерированы из общедоступной «Encyclopedia Britannica» 1911 год), так что вы можете склонировать его и запустить точь-то такой же бенчмарк сами.

Смысл тестов в том, что именно здесь расходятся архитектуры — настоящее хранилище только растёт.

Объём ответа поиска — байты на запрос (освобождение по контексту; в чем меньше — тем лучше)

Сервер

Архитектура

1k заметок

5k заметок

10k заметки

🥇 Seekstone

внутрипроцессная индексация

1.6 KB

1.8 KB

2.0 KB

mcpvault

прямой доступ к полетовой системе, субпроцесс

1.7 KB

1.9 KB

2.2 KB

obsidian-mcp-rs

прямой доступ к ФС, сканирование в каждом запросе

10.2 KB

10.8 KB

11.2 KB

obsidian-tc

SQLite-платформа

4.2 KB

6.8 KB

7.2 KB

obsidian-mcp-server

REST API

55 KB

145 KB

232 KB

obsidian-mcp-pro

прямой доступ к ФС, субпроцесс

25 KB

84 KB

114 KB

obsidian-mcp

прямой доступ к ФС, субпроцесс

18 KB

105 KB

201 KB

mcp-obsidian

REST API

356 MB

2.4 GB

4.6 GB

Seekstone остаётся плообитом (~2 KB) независимо от роста вашего хранилища, потому что всегда возвращает ранжированные ранжированные фрагменты — сейчас у него самый маленький из всех протестированных серверов, что делает его даже более лёгким, чем решение mcpvault на всех трёх объёмах. REST-прокси-серверы возвращают полные содержимое для каждого совпадения, поэтому они растут вместе с хранилищем: mcp-obsidian достигает 95 MB при 10k заметк, а один широкий запрос (the capital of) в среднем за 20 прогонов отдавал 370 MB / 97.8m токенов за вызов. При 10k заметках это ~47,000× разница в сжигаемом контексте.

Задержка поиска — средняя по прогреву, ме (чем ниже, тем лучше)

Сервер

1k заметок

5k заметок

10k заметок

Против Seekstone @10k

🥇 Seekstone

1.1

3.1

6.2

obsidian-mcp-rs

6.1

19

37

~6× медленнее

obsidian-mcp-pro

46

213

430

~70× медленнее

obsidian-mcp-server

82

356

732

~118× медленнее

obsidian-mcp

82

405

811

~131× медленнее

mcpvault

96

467

958

~155× медленнее

mcp-obsidian

164

740

1,550

~250× медленнее

obsidian-tc

264

1,302

2,714

~440× медленнее

Каждый конкурент порождает подпроцесс или выполняет HTTP-запросы на каждый поисковый запрос, и большинство из них делает работу, объём которой растёт с размером хранилища. Seekstone хранит прогретый внутрипроцессный индекс — без IPC, без сети, — поэтому поиск по ключевым словам остаётся в пределах единиц миллисекунд даже при 10 000 заметок (семантический режим добавляет фиксированные ~8 мс на эмбеддинг и сканирование). И разрыв увеличивается с масштабом: при переходе от 1k к 10k заметок конкуренты замедляются в 5–10×, а Seekstone почти не сдвигается. Даже самый быстрый вариант — obsidian-mcp-rs, который пересканирует хранилище при каждом запросе, — на прогретом индексе при 10k заметок ~6× медленнее с в 3 раза большей полезной нагрузкой, а поколение REST-прокси работает ~90–250× медленнее.

Seekstone — единственный сервер в нашем наборе бенчмарков, который обеспечивает одновременно полезную нагрузку ~2 КБ и задержку поиска в единицы миллисекунд при любом размере хранилища — и, насколько нам известно, единственный Obsidian MCP-сервер с опубликованными воспроизводимыми бенчмарками. Тестовый стенд, синтетические хранилища и полные результаты открыты: см. benchmark-scaling.md и стенд. Клонируйте, запускайте, проверяйте.


Установка

Выберите способ, который подходит вам лучше всего.

Используете ИИ-агента? Вставьте этот промпт

Если вы работаете с Claude Code, Cursor или другим кодинг-агентом, вам не нужно ничего делать самостоятельно — вставьте этот промпт, и агент выполнит установку:

Установите MCP-сервер seekstone для этого редактора. Выполните npx -y seekstone init --client code --write (для других клиентов используйте desktop, cursor или vscode). Он сам определит моё хранилище Obsidian; если в списке будет несколько, спросите меня, какое выбрать, и повторите с --vault "<path>". Передайте мне все ошибки, затем скажите перезапустить эту сессию, чтобы инструменты seekstone загрузились.

seekstone init полностью неинтерактивен — с флагом --write он валидирует хранилище и в один заход обновляет конфиг клиента (Claude Code — через claude mcp add, для других клиентов — аддитивным JSON-патчем с резервной копией по времени).

Вариант 1 — Один клик (Claude Desktop, терминал не нужен)

  1. Скачайте seekstone.mcpb из GitHub Releases

  2. Откройте его в Claude Desktop — двойной клик в Finder или правая кнопка → Открыть с помощью → Claude Desktop

  3. Выберите папку вашего хранилища Obsidian, когда появится запрос.

Вы поймёте, что всё сработало, когда Seekstone появится в панели инструментов Claude. Никакого редактирования JSON, никакого терминала и Node.js не требуется.

Вариант 2 — Пошаговая настройка (рекомендуется пользователям CLI)

Откройте Терминал (macOS: Cmd+Space, введите "Терминал", нажмите Enter) и выполните:

npx -y seekstone init

Вы поймёте, что всё работу сделало, когда Seekstone появится в панели инструментов Claude под значком Plug.

Seekstone читает собственный реестр хранилищ Obsidian, определяет ваше хранилище, валидирует его и либо выводит готовый блок конфигурации для вставки, либо напрямую обновляет конфиг Claude Desktop:

# Auto-detect vault, print config to paste
npx -y seekstone init

# Auto-detect vault, patch Claude Desktop in place (with backup)
npx -y seekstone init --write

# Specify vault explicitly if you have multiple
npx -y seekstone init --vault "/path/to/vault"

# Auto-configure Claude Code in one step (auto-detects vault, runs claude mcp add)
npx -y seekstone init --client code --write

# Or just print the Claude Code command without running it
npx -y seekstone init --client code

Вариант 3 — Ручная настройка (Claude Desktop)

Добавьте в claude_desktop_config.json (Настройки → Разработчик → Изменить конфигурацию):

{
  "mcpServers": {
    "seekstone": {
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

Вариант 4 — Claude Code

Автоматически определяет ваше хранилище и настраивает Claude Code одной командой:

npx -y seekstone init --client code --write

Или вручную, если вы предпочитаете задать путь к хранилищу явно:

claude mcp add seekstone --env SEEKSTONE_VAULT=/absolute/path/to/your/vault -- npx -y seekstone

Вариант 5 — Cursor

Один клик: — затем укажите SEEKSTONE_VAULT как абсолютный путь к вашему хранилищу в настройках MCP Cursor (ссылка устанавливает заглушку/плейсхолдер).

Или позвольте CLI самому найти ваше хранилище и обновите ~/.cursor/mcp.json (с резервной копией):

npx -y seekstone init --client cursor --write

Или добавьте блок вручную в ~/.cursor/mcp.json (глобально) или <project>/.cursor/mcp.json (для проекта):

{
  "mcpServers": {
    "seekstone": {
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

Вариант 6 — VS Code

Один клик: <a href="https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22seekstone%22%"},{"url":null,"raw":null} data:, — затем укажите SEEKSTONE_VAULT какабсолютный путь к вашему хранилищу, когда VS Code откроет конфигурацию сервера (ссылка устанавливает заглушку/плейсхолдер).

Или позвольте CLI самому определить хранилище и записать конфигурацию рабочей области (.vscode/mcp.json в текущем каталоге):

npx -y seekstone init --client vscode --write

Или добавьте его из терминала:

code --add-mcp '{"name":"seekstone","command":"npx","args":["-y","seekstone"],"env":{"SEEKSTONE_VAULT":"/absolute/path/to/your/vault"}}'

Или добавьте блок вручную в .vscode/mcp.json (рабочая область) или через палитру команду → MCP: Open User Configuration (пользовательская, глобальная). Учтёте две особенности VS Code: верхнеуровневый ключ — servers (а не mcpServers), и обязателен параметр "type": "stdio":

{
  "servers": {
    "seekstone": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "seekstone"],
      "env": { "SEEKSTONE_VAULT": "/absolute/path/to/your/vault" }
    }
  }
}

Требуется VS Code 1.102+; seekstone появляется в перечне инструментов Agent mode в Copilot Chat.

Другие MCP-клиенты (Windsurf, Cline, …)

Seekstone — это стандартный MCP-сервер stdio — любой MCP-клиент может его запустить. Используйте тот же JSON-блок, что и выше, в MCP-конфиге вашего клиента (command: npx, args: ["-y", "seekstone"], env SEEKSTONE_VAULT).


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

Требуется Node.js ≥ 22 для опций CLI. Бандл .mcpb в один клик не имеет внешних требований.

Если Seekstone экономит вам контекст, загляните — и, возможно, ⭐ проспонсируйте репозиторий — это поможет другим найти его.


Что Claude может делать с вашим хранилищем?

Как только Seekstone подключён, вы можете просить Claude, например:

  • «Найди в моих заметках всё про [topic] и выдай сводку» — использует search, возвращает ранжированные фрагменты, а не полные файлы

  • «Найди все заметки с тегом #project и вывади их названия» — использует list_notes с фильтром по тегу

  • «Прочитай только секцию "Decisions" в моей [project]-заметке» — использует read_note с селектором секций, поэтому в контекст входит только этот фрагмент

  • «Какие заметки ссылаются на мою [topic]-заметку, и на какие она ссылается сама?» — использует get_backlinks and get_links для обхода графа

  • «Дополни сегодняшнюю заметку моим стендапом» — использует append_periodic_note, разгоняя путь пополдневной заметки из конфигурации хранилища (Obsidian не должен быть открыт)

  • «Исправь все вхождения старого имени проекта в этой зависимости» — использует replace_in_note, с предпросмотр сухим запуском до записи

  • «Добавь итоговую секцию в конец заметки [note]» — использует append_note, никогда не трогая frontmatter

  • «Перене 2и всем заметки из /inbox в /archive/[year]» — использует move_note

  • «Обнови поле status в frontmatter этой заметки на 'done'» — использует patch_frontmatter, сохраняя порядок ключей и стиль кавычек

  • «Создай новую встречную заметку на сегодня по стандартному шаблону» — использует create_note

Claude никогда не видит всё хранилище целиком — он ищет и читает выборочно, поэтому даже большие хранилища (10k+ заметок) удерживаются в рамках контекстного бюджета.


Инструменты

Чтение

Tool

Описание

search

Полноетекстовый поиск. Возвращает ранжированные фрагменты (по умолчанию ~120 символов, настраивается через excerptLength), а не полные заметки. Нечёткое и префиксное совпадение; с SEEKSTONE_ENANTIC=1, mode: "semantic"/"hybrid" — смысловой поискчерез локальную модель эмбеддингов (ничего не покидает вашу машину).

query_notes

Структурированный запрос по метаданнымго. Фильтры по предикатам «ключ-значение» во frontmatter (eq, ne, contains, exists, missing, gt/gte/lt/lte), тегу, папке, времени изменения и размеру; сортировка и выбор нужных полей. Возвращает компактные строки (путь + заголовок по умолчанию), а не содержимое заметок.

context_pack

Готовый кейс для ответа на вопрос на естественном языке одним запросом, жёсть ограниченным бюджетом байт (по умолчанию ~2 КБ): ранжированные фрагменты, связанные соседние заметки с однострочным пересказом, а также пути к следующим источникам — заменяет цикл search → read → get_backlinks.

read_note

Читать полное содержимое заметки по относительному пути в хранилище. Допускает возврат отдельной секции, блока или диапазона строк.

list_notes

Список заметок, опционально отфильтрованных по префиксу папки или тегу.

list_tags

Список всех тегов в хранилище, отсортированных по частоте использования (или по алфавиту).

outline_note

Возвращает структуру заголовков и блоков заметки без её полного содержимого — дешёвая навигация перед целевым чтением.

get_forward_links

Находит все заметки, которые ссылаются на данную заметку.

get_links

Перечисляет все статически заданные wikilinks markdown-ссылки из заметки.

get_periodic_note

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

Запись

Tool

Description

create_note

Создаёт заметку (опционольный frontmatter + тело); родительские каталоги создаются автоматически.

delete_note

Перемещается заметку в папку .trash/ хранилища (совместимо с Obsidian, можно восстанловить). Передайте permanent:true для необратмого удаления.

move_note

Перемещат или преименовывает заметку — вики-ссылки и markdown-ссылки в других заметках, указывающие на неё, переписываются, чтобы ничене не сломало;с (rewriteLinks: false — для ответа); целевые каталоги создаються автоатчески.

rename_heading

Переименовывает заголоок в заметке — каждая вики-ссылка [[note#heading]] и встреное содержимое по всому хранилищу переписываются, чтобы ссылки продолажали работать (правни свои сохраняются, блоки кода с огравдатель остают).

attach_note

Добавляет текст в тело заметки, не затрагив фронтматтер.

open_note? Wait no, attach_note is line. Actually table row: attach_note

Append text to a note body ... Let's correct: original row attach_note after rename_heading. Yes.

Need not include "open". The tool is append_note. | attach_note | Добавляет текст в тело заметки, не затрагивоing frontmatter. |

| patter_fronter (Wait row is terminate. Actually original table: after attach_note row, there is patter_front? Let's check original in user message:

| create_note | ... | delete_note | ... | move_note | ... | rename_heading | ... | attach_note | ... | patch_frontmatter | ... | patch_note | ... | replace_in_note | ... | append_periodic_note | ...

Need preserve rows. So after attach: patch_frontmatter, patch_note, replace_in_note, append_periodic_note.

I made a typo earlier. Let's list correctly.

Rows: 1 create_note 2 delete_note 3 move_note 4 rename_heading 5 append_note 6 patch_frontmatter 7 patch_note 8 replace_in_note 9 append_periodic_note

Not "create_note" with create_note (the code span should be create_note). Yes.

Need include patch_frontmatter row description.

Let's generate carefully.

For patch_frontmatter: "Устанавливает, обновляет или удаляет ключи frontmatter без перестановки существующих ключей и без измениения стиля квычек."

For patch_note: "Дописывает, вставляет в начало or иеняет тест у заголовка или блочной ссылки (createIfMissing — добавит в раздел; frontmatter не задерживается)."

Replace_in_note: "Ищет и заменяет текст в теле заметки — колбуквально или регулярным вывражением, с учётом регистра, целые слова, опционольный limit (по умолчания заменяются все вхождения), and dry-run просмотр."

append_periodic_note: "Дописывает в сегодняшную периодическую заметку, создавая из шаблона, если ещё не существует."

Then following paragraph.

Need be aware of quoting around frontmatter? "frontmatter" not backC, no issue.

Let's compose entire.

Need decide to translate "wikiLinks" "mockdown-links". Fine.

Need "dry-run" maybe translate "проверочный просмотр" but maybe keep dry-run as term? It appears and "and a dry-run preview" - we can say "и предпросмотр без примененит (dry-run)". Good.

Let's formulate final response in Russian, without code fence.

We'll include heading "## Кonфигура." Actually "## Конфигурация" as translation. Original uses "## Configuration". We'll translate. "## Как это работает" for "## How it works"? Original "## How it works" => "## Как это работает". "## Security & privacy" => "## Безопасность и конфидиенциальность". "## Frequently asked questions" => "## Частые вопросы". Good.

Need keep *** after intro and before "## Configuration"? The original has *** after two paragraphs. In translation, include.

Need preserve "technical terms" e.g., "periodic note" as "периодическая заметка" but "periodic note" is common in Obsidian. Fine.

Need preserve "Obsidian-compatible, restorable" at line.

Let's write final.## Конфигурация

Переменная

Обязательная

Описание

SEEKSTONE_VAULT

Да

Абсолютный путь к вашему хранилищу Obsidian.

SEEKSTONE_LOG_LEVEL

Нет

error | warn | info (по умолчанию) | debug.

SEEKSTONE_LOG_FILE

Нет

Абсолютный путь; при установке JSON-строки логов добавляются в него (с ротацией по размеру).

SEEKSTONE_LOG_MAX_SIZE

Нет

Порог ротации лога для SEEKSTONE_LOG_FILE (например, 10mb; по умолчанию 5 МБ).

SEEKSTONE_WATCH_POLL

Нет

Установите 1, чтобы использовать опрос через stat вместо нативных событий ОС — медленнее, но надёжнее на сетевых дисках, WSL и в некоторых контейнерах.

SEEKSTONE_READ_ONLY

Нет

Установите 1 для работы только на чтение: все 9 инструментов записи полностью удаляются из списка инструментов (и отклоняются при прямом вызове), так что сессия гарантированно не может изменить ваше хранилище.

SEEKSTONE_WRITE_PATHS

Нет

Разделяемые запятыми glob-шаблоны относительно хранилища (например, journal/**,inbox/*.md). Запись разрешена только в таких путях; остальная часть хранилища остаётся только для чтения.

SEEKSTONE_SEMANTIC

Нет

Установите 1 для включения семантического поиска (search получает mode: "semantic" и "hybrid"). Требуется локальная модель эмбедингов — скачайте её один раз с помощью npx -y seekstone fetch-model; работающий сервер никогда не обращается к сети.

SEEKSTONE_MODEL_PATH

Нет

Каталог, содержащий модель эмбедингов Model2Vec (по умолчанию: туда, куда fetch-model её помещает, в каталоге кэша).

SEEKSTONE_CACHE_DIR

Нет

Корневой каталог кэша для скачанной модели и покэшевых эмбедингов каждого хранилища (по умолчанию ~/.cache/seekstone).


Файловое содержимое

Seekstone обходит хранилище с помощью fast-glob, разбирает frontmatter каждой заметки (с учётом байтов, поэтому записи могут доказать, что область frontmatter байт-в-байт идентична до и после записи) и строит в памяти полнотекстовый индекс MiniSearch. Поиск возвращает короткие ранжированные выдержки, а не целые заметки — именно эта конструкция «выдержка, а не документ» даёт выигрыш по контекстным расходам. Кроссплатформенный наблюдатель файлов (chokidar) поддерживает индекс актуальным, пока вы редактируете в Obsidian.

Записи консервативны по замыслу: append_note никогда не затрагивает frontmatter, а patch_frontmatter редактирует YAML-документ на месте, не пере-сериализуя его — сохраняется порядок ключей, стиль цитат и комментарии.

Он построен для беспрерывной работы. Seekstone тестируется на macOS, Linux и Windows в CI на каждом коммите, его инструменты записи защищены от патогенных (ReDoS) входов, а случайный необработанный отказ промиса логируется, а не вызывает сбой — таким образом, ваша долгоживущая MCP-сессия сохраняет прогретый индекс, а не выходит из середины разговора.

Для пошагового обзора кодовой базы — пакеты, внутреннее устройство сервера, полный поток запросов и тестовый каркас измерения — см. docs/ARCHITECTURE.md.


Безопасность и приватность

Seekstone читает — и через инструменты записи изменяет — файлы из SEEKSTONE_VAULT на вашем локальном диске. Работающий сервер не совершает сетевых вызовов и не отправляет телеметрию (единственный сетевой путь в пакете — явная подкоманда npx -y seekstone fetch-model — разовый загрузка опциональной модели для семантического поиска с проверкой SHA-256, которая завершается до запуска сервера). Логи по умолчанию содержат только метаданные (содержимое заметок появляется только на уровне debug). Ничего не записывается за пределами хранилища, кроме опционального файла лога, который вы можете задать, и, при SEEKSTONE_SEMANTIC=1, кэша эмбедингов для каждого хранилища в ~/.cache/seekstone (полученные векторы ваших заметок — они никогда никуда не отправляются).

Write-Safety Contract

Предоставление ИИ права записи в ваши заметки заслуживает большего, чем «доверьтесь нам». Seekstone поставляется с именованным и провереннымй контрактом — docs/WRITE-SAFETY.mdвосемь гарантий, каждая из которых связана с кодом, который её реализует, и тестом, который доказывает её работу, подтверждённо байт-в-байт защитным набором в CI на каждям коммите и релизе: ноль сетевых контактов, песочница хранилища, байт-идентичный frontmatter при редактировании тела, атомарные записи (без рваных файлов), создание файла никогда не перезаписывает существующий, обратимое удаление (.trash/), опциональный compare-and-swap для каждого инструмента записи и настраиваемое ограничение зоны записи / режим только чтение. Этот же набор тестов запускается автоматически против других API-напрямую работающих с файлами серверов — сравнительная таблица находится в контракте.


Частые вопросы

Нужно ли мне, чтобы приложение Obsidian было действительно запущено? Нет. Seekstone читает папку хранилища напрямую с диска. Obsidian может быть открыт или был закрыт.

Нужен ли мне плагин Local REST API? Нет. Seekstone полностью его обходит — именно отсюда до 47 000 раз меньше передаваемых данных. Никаких плагинов не требуется.

Какие AI-клиенты поддерживаются? Любой клиент, который поддерживает Model Context Protocol (MCP) через stdio — Claude Desktop, Claude Code, Cursor, Windsurf, Continue и другие.

Безопасно ли использовать это в моём хранилище? Seekstone никогда не изменяет файлы, кроме случаев, когда вы явно вызываете один из его инструментов записи (те девять, что в таблице выше — create_note, append_note, patch_note, patch_frontmatter, replace_in_note, move_note, rename_heading, delete_note, append_periodic_note). Запущенный сервер не выполняет сетевых запросов (модель семантического поиска загружается один раз, отдельным шагом, по явной подкоманде fetch-model). Путь к хранилищу изолирован в песочнице — ни один инструмент не может читать или писать вне его. И вы можете ужесточить это ещё сильнее: SEEKSTONE_READ_ONLY=1 полностью убирает инструменты записи из сеанса, а SEEKSTONE_WRITE_PATHS ограничивает запись только теми папками, которые вы разрешили (например, только journal/**). Оба ограничения проверяются на уровне диспетчеризации, а не на уровне каждого инструмента, так что ни один инструмент не сможет «забыть» эту проверку.

Работает ли он в Windows? Да. Seekstone тестируется на macOS, Linux и Windows в CI при каждом коммите.

С хранилищами Obsidian какого размера он справляется? Seekstone профилировался на хранилищах с тысячами заметок. На эталонном хранилище из 10 000 заметок, включённом в репозиторий, холодная сборка индекса занимает десятки секунд, а RSS процесса укладывается ниже ~100 МБ; типичные личные хранилища индексируются за несколько секунд. Семантический режим после запуска вычисляет эмбеддинги в фоне (~20 с на 10 тыс. заметок), а затем они кэшируются для каждого хранилища, так что повторные запуски загружают всё значительно быстрее секунды.

Как seekstone init находит моё хранилище автоматически? Он читает собственный реестр хранилищ Obsidian (obsidian.json) — тот же файл, который Obsidian использует для отслеживания ваших известных хранилищ. Если у вас одно хранилище, оно выбирается автоматически. Если несколько — выводится их список, и вам предлагается выбрать с помощью --vault.

Что такое файл .mcpb? MCP Bundle — самодостаточный zip-файл с сервером и его манифестом. Чтобы установить: дважды щёлкните в Finder (или правая кнопка → «Открыть с помощью» → Claude Desktop), выберите хранилище — и готово. Терминал и Node.js не требуются.


Вклад и разработка

Вклад приветствуется. См. CONTRIBUTING.md с правилами или переходите сразу к делу:

npm install                                          # install all workspace deps
npm test                                             # run all tests
npm run lint                                         # biome check
npm run build -w seekstone                           # tsup → dist/
npm run build:mcpb                                   # build seekstone.mcpb bundle

npx vitest run packages/server/src/tools/search.test.ts  # single test file
npx vitest run -t 'parses a typical frontmatter'         # single test by name
npx tsc -p packages/server/tsconfig.json --noEmit        # typecheck

Структура репозитория

Пакет

Назначение

packages/core

Общие примитивы хранилища — walk, парсер frontmatter, извлекательсвязей/тегов, outline, percentiles, pmap и эмбеддер Model2Vec. Встраивается в сборку сервера.

packages/server

Публикуемый MCP-сервер seekstone (19 инструментов, stdio, индекс MiniSearch, наблюдатели на chokidar).

packages/harness

Профилировщик + бенчмарк + стенд проверки безопасности записи (REST против файловой системы), давший приведённые выше числа под нагрузкой. Только для разработки; не публикуется.

У сервер есть полноценная сборка (tsup → dist/), и он публикуется в npm. Харнес запускается из исходников через tsx. Релизы автоматизированы — см. docs/RELEASING.md.

Измерительный стенд

Стенд существует, чтобы воспроизводить показатели бенчмарков, которые привели к дизайну с прямой работой с файловой системой. Стандартный путь воспроизведения (бэкенды fs/seekstone с зафиксированными синтетическим хранилищем из репозитория) не требует ничего дополнительного; только бэкенды на REST (rest, mcp-obsidian, obsidian-mcp-server) требуют запущенного Obsidian с плагином Local REST API.

export SEEKSTONE_VAULT="/absolute/path/to/your/vault"

npx tsx packages/harness/src/cli.ts profile --vault "$SEEKSTONE_VAULT"
npx tsx packages/harness/src/cli.ts bench \
  --queries packages/harness/queries/default.json \
  --stats reports/vault-stats.json
npx tsx packages/harness/src/cli.ts safety --vault "$SEEKSTONE_VAULT"

Переменные окружения стенда: SEEKSTONE_REST_API_KEY (из плагина Local REST API) и SEEKSTONE_REST_URL (по умолчанию https://127.0.0.1:27124).


Поддержка

Seekstone бесплатен и открыт. Если он экономит вам контекст (и деньги), вы можете купить мне кофе.


Лицензия

MIT © Shaq Mughal

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
4dResponse time
2dRelease cycle
36Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Appeared in Searches

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/shaqmughal/seekstone'

If you have feedback or need assistance with the MCP directory API, please join our Discord server