Skip to main content
Glama

srs-mcp

Агент-независимый MCP-сервер для интервального повторениябез GUI Anki, без Xvfb, без AnkiConnect. Берите своего агента; этот сервер даёт карточки + планировщик.

Он оборачивает FSRS (Free Spaced Repetition Scheduler, тот же алгоритм, что использует современный Anki) вокруг крошечного хранилища SQLite, так что агент может создавать карточки, видеть, что подлежит повторению, и записывать результаты — полностью без головы.

Почему не headless Anki?

Управлять десктопным приложением Anki без головы означает Qt + виртуальный фреймбуфер (Xvfb) + аддон AnkiConnect — хрупко и привязано к версиям. Пакет anki из PyPI может управлять настоящей коллекцией .anki2 без GUI, если нужна совместимость с Anki на телефоне. Но если вам просто нужны интервальные повторения за API, Anki вообще не нужен: FSRS — это библиотека, а этот сервер — около 200 строк вокруг неё.

Related MCP server: anki-mcp

Инструменты

  • add_card(front, back) -> {card_id, due} — создать и запланировать карточку. Держите back коротким — слово или фраза; карточка, которую нельзя оценить за секунды, — это заметка, а не флеш-карточка

  • due_cards(q=None, limit=20) -> [{card_id, front, back, deck, due}] — что подлежит повторению сейчас, опционально суженное по теме (q="horace")

  • grade_card(card_id, rating) -> {card_id, rating, next_due, reps} — записать результат (again/hard/good/easy или 1-4)

  • edit_card(card_id, front=None, back=None) — изменить содержимое на месте; расписание сохраняется (исправьте опечатки / сократите длинный ответ вместо дублирования)

  • suspend_card(card_id) / unsuspend_card(card_id) — отложить карточку (сохраняется с её историей, убирается из очереди повторений) / восстановить её

  • list_cards(q=None, limit=50) — обзор независимо от даты повторения

  • delete_card(card_id) — удалить одну (сброс / очистка)

  • stats(deck=None) -> {total, due_now, suspended, reviews, decks}

Поиск карточек: поиск, а не колоды

Карточки находятся поиском по их текстуdue_cards(q="horace") — а не раскладыванием по колодам заранее. Поле deck больше ничем не заполняется; помещайте тему в саму карточку («Horace, Odes 1.11: …») — и она останется находимой.

Колоды были однозначным, свободно-текстовым, точным совпадением без привязки к расписанию, так что они не давали ничего, чего не даёт поиск, и стоили точности: на колоде, на которой это измерялось, агенты придумали десять имён для Горация в пяти соглашениях о разделителях, так что лучший возможный deck="Horace" возвращал 20 из 97 карточек Горация, тогда как q="horac" возвращает 89 — включая те, что ошибочно лежат в Talks. Колонка и фильтр deck= в due_cards/list_cards/stats остаются для карточек, помеченных старыми версиями. См. plans/002-decks.md.

Цикл повторения: due_cards → опросите пользователя с front → сверьте с backgrade_card. FSRS вычисляет следующую дату повторения по оценке.

Запуск

uv sync
# HTTP (default; for Railway / remote agents)
PORT=8000 uv run srs-mcp
# or stdio (local agent)
MCP_TRANSPORT=stdio uv run srs-mcp

Хранилище

Два бэкенда, выбираются при запуске:

  • Postgres (общая колода) — установите SRS_DATABASE_URL (или DATABASE_URL) в строку подключения Postgres (например, Neon DB). Каждое развёртывание, указывающее на тот же URL, читает/пишет одну общую колоду, так что можно добавлять и повторять карточки откуда угодно (локально, Railway и т.д.). ID карточек FSRS большие, поэтому колонка cards.card_idBIGINT в Postgres. Требуется зависимость psycopg (уже объявлена).

  • SQLite (запасной) — если *DATABASE_URL не задан, карточки живут в файле SQLite по пути SRS_DB (по умолчанию ./srs.db). Один хост / офлайн. В настройке SQLite-on-Railway смонтируйте том в /data и держите SRS_DB=/data/srs.db, чтобы колода пережила передеплои.

Схема идентична (таблица cards) и создаётся автоматически при первом использовании.

A
license - permissive license
A
quality
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

View all related MCP servers

Related MCP Connectors

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/klutometis/srs-mcp'

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