Skip to main content
Glama

obsidian-mcp-server

MCP-сервер (Model Context Protocol) для учебного Vault в Obsidian. Предоставляет Claude доступ к поиску заметок, содержимому заметок, созданию карточек в формате Decks и планированию обучения из плагина Lerntracker.

Python, MCP SDK 2.x, транспорт stdio.

Цель

Раньше логика была реализована в двух плагинах Obsidian:

  • Decks (сторонний плагин) отображает карточки, но не создаёт их — карточки писались вручную.

  • Lerntracker (собственный плагин) управляет учебным прогрессом и учебным планом, но сознательно не распределяет материал по дням автоматически.

Этот сервер закрывает оба пробела: Claude может создавать карточки прямо в существующем формате файлов и вычислять учебный план, который записывается обратно в data.json плагина Lerntracker.

Related MCP server: Nexus MCP for Obsidian

Установка

cd ~/Projects/obsidian-mcp-server
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Конфигурация

Оба пути берутся из переменных окружения — ничего не захардкожено.

Переменная

По умолчанию

Значение

OBSIDIAN_VAULT_PATH

~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Sem_4

Корень Vault

LERNTRACKER_DATA_PATH

$OBSIDIAN_VAULT_PATH/.obsidian/plugins/lerntracker/data.json

База данных Lerntracker

Значение по умолчанию для пути Vault подходит для Obsidian, синхронизируемого через iCloud; для другой настройки достаточно задать OBSIDIAN_VAULT_PATH.

Путь Lerntracker можно настраивать отдельно, потому что Vault-ы Obsidian могут быть вложенными: если в подпапке находится ещё один Vault, у него есть собственная data.json. По умолчанию указывается на файл главного Vault.

Инструменты

Инструмент

Действие

search_notes(query, limit=20)

Ищет без учёта регистра в именах файлов и содержимом. Совпадения имён получают больший вес; возвращает путь + фрагменты текста. Только чтение

get_note(path)

Возвращает полное содержимое заметки. Только чтение

create_flashcard(front, back, note_path, deck="")

Записывает. Добавляет карточку в конец <Kurs>/Flashcards/<deck>.md

generate_summary(note_path)

Подготавливает заметку в структурированном виде. Только чтение

save_summary(note_path, summary)

Записывает. Создаёт <Kurs>/Zusammenfassungen/<Notiz>.md

generate_study_plan(courses, deadlines, hours_per_subtopic=1.5, dry_run=False)

Записывает. Распределяет открытые подтемы по дням и вносит их в data.json

Все схемы генерируются SDK из аннотаций типов и docstring-ов — в коде нет написанного вручную JSON-схемы.

Формат карточек

create_flashcard записывает ровно тот формат, который используют существующие карточки в Vault (заголовок-абзац), дополненный вики-ссылкой на источник:

---
tags: [decks]
---

## Was ist ein Signal?

Eine zeitabhängige, messbare physikalische Größe.

Quelle: [[01_Physikalische_Schicht]]

Целевой файл определяется по папке курса исходной заметки; deck переопределяет имя файла. Если файл не существует, он создаётся с tags: [decks]. Карточка с идентичной лицевой стороной пропускается, а не создаётся дважды.

Прогресс Decks хранится в базе данных SQLite, а не в Markdown-файлах. Сервер её не трогает — история FSRS остаётся нетронутой.

Почему generate_summary сам не обобщает

У сервера нет языковой модели. Он возвращает заметку в структурированном виде (структура, показатели, полный текст); краткое содержание пишет модель на стороне клиента — то есть Claude Desktop. Затем оно сохраняется с помощью save_summary. Это обычное распределение ролей в MCP: сервер предоставляет контекст и выполняет действия, а модель формулирует.

Если бы сервер должен был вместо этого сам обобщать, ему пришлось бы вызывать Anthropic-API и понадобился бы собственный API-Key.

Логика учебного плана

generate_study_plan распределяет каждую открытую подтему по конкретным дням:

  1. Курсы сортируются по дате экзамена — сначала самый ранний.

  2. Конец обучения = examDate − bufferDays; буферные дни остаются свободными для повторения.

  3. Учебные дни берутся из settings.weeklyHours (0 = воскресенье … 6 = суббота). Дни с 0 часов и все blockedDates пропускаются.

  4. Каждая подтема требует hours_per_subtopic (по умолчанию 1,5 ч) и помещается в самый ранний день с остаточной ёмкостью. Если она не помещается в один день, она разбивается на несколько дней — плагин поддерживает несколько dates.

  5. Уже отмеченные подтемы и те, у которых уже есть dates, остаются нетронутыми.

  6. То, что уже не помещается до конца обучения, сообщается как предупреждение, а не молча отбрасывается.

Перед каждой операцией записи рядом с файлом создаётся резервная копия (data.backup-<Zeitstempel>.json); запись происходит атомарно через временный файл. dry_run=True только показывает план.

После записи в Obsidian нажмите Cmd+R, чтобы плагин перезагрузился.

Ресурсы

URI

Содержимое

vault://structure

Дерево папок Vault с количеством заметок в каждой папке

note://{+path}

Содержимое отдельной заметки, только чтение

Шаблон намеренно использует {+path} (Reserved Expansion) вместо {path}. Обычные переменные шаблонов не сопоставляют слэши — с {path} любая заметка во вложенной папке молча не была бы найдена, а в Vault практически каждая заметка лежит в папке курса.

Локальное тестирование с помощью MCP Inspector

Inspector запускается через CLI SDK и открывает веб-интерфейс, в котором инструменты и ресурсы можно вызывать по отдельности. Для него нужны npx (Node.js) и uv.

source .venv/bin/activate && mcp dev main.py

Команда выводит URL вида http://localhost:6274 (с добавленным сессионным токеном). Откройте в браузере, слева нажмите Connect, затем:

  • Вкладка ToolsList Tools → выберите инструмент, введите аргументы, Run Tool

  • Вкладка ResourcesList Resources → нажмите vault://structure

  • Для шаблонного ресурса введите URI напрямую, по образцу note://<Kursordner>/Flashcards/<Datei>.md

С другим Vault:

OBSIDIAN_VAULT_PATH="$HOME/Pfad/zu/deinem/Vault" mcp dev main.py

Чтобы попробовать записывающие инструменты, стоит использовать одноразовый Vault:

OBSIDIAN_VAULT_PATH=/tmp/testvault mcp dev main.py

Подключение к Claude Desktop

Файл конфигурации: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "obsidian-vault": {
      "command": "/Users/DEIN_NAME/Projects/obsidian-mcp-server/.venv/bin/python",
      "args": ["/Users/DEIN_NAME/Projects/obsidian-mcp-server/main.py"],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/Users/DEIN_NAME/Pfad/zu/deinem/Vault"
      }
    }
  }
}

Важно: используйте абсолютные пути~ и $HOME здесь не раскрываются. В качестве command укажите Python из venv: Claude Desktop запускает сервер без активированного окружения, простой "python3" не нашёл бы пакет mcp.

Если файл уже существует, просто вставьте запись "obsidian-vault" в существующий объект mcpServers. Затем полностью закройте Claude Desktop и запустите заново; сервер появится в меню инструментов поля ввода.

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

Каждый путь из вызова Tool или Resource проверяется относительно Vault: абсолютные пути и обход через .. отклоняются, а итоговый путь должен находиться внутри OBSIDIAN_VAULT_PATH. .obsidian, .git, .trash, .claude и node_modules исключены из поиска и перечисления структуры — иначе результаты переполнят бандлы плагинов.

save_summary не перезаписывает существующий файл, create_flashcard не создаёт дублирующую карточку, а generate_study_plan делает резервную копию data.json перед записью.

Протестировано

С mcp 2.0.0 на Python 3.14 проверены: схемы Tool, шаблоны Resource, stdio-рукопожатие с настоящим ClientSession, защита путей, а также записывающие инструменты на одноразовом Vault (включая разбиение на несколько дней, заблокированные дни, дни недели с нулевым количеством часов и случай переполнения).

Лицензия

MIT — см. LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (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

  • A
    license
    Not graded
    quality
    A
    maintenance
    Turns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.
    173,522
    150
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Bridges Obsidian vaults with MCP-compatible AI tools, enabling read/write/search of notes, task management, and vault operations through 34 tools and prompt templates.
    34
    57
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.

  • Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…

  • Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only

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/MzaKhn/obsidian-mcp-server'

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