Skip to main content

srs-mcp

Agent-agnostic MCP server for spaced-repetition learningno Anki GUI, no Xvfb, no AnkiConnect. Bring your own agent; this brings the card box + the scheduler.

It wraps FSRS (the Free Spaced Repetition Scheduler, the same algorithm modern Anki uses) around a tiny SQLite store, so an agent can author cards, see what's due, and record recall — entirely headless.

Why not headless Anki?

Driving the Anki desktop app headless means Qt + a virtual framebuffer (Xvfb) + the AnkiConnect add-on — brittle and version-coupled. The anki PyPI package can drive a real .anki2 collection GUI-less if you need interop with your phone's Anki. But if you just want spaced repetition behind an API, you don't need Anki at all: FSRS is a library, and this server is ~200 lines around it.

Tools

  • add_card(front, back, deck="default") -> {card_id, due} — author + schedule a card
  • due_cards(deck=None, limit=20) -> [{card_id, front, back, deck, due}] — what's due now
  • grade_card(card_id, rating) -> {card_id, rating, next_due, reps} — record recall (again/hard/good/easy, or 1-4)
  • edit_card(card_id, front=None, back=None, deck=None) — edit content in place; schedule is preserved (fix typos / add context instead of duplicating)
  • suspend_card(card_id) / unsuspend_card(card_id) — shelve a card (kept with its history, removed from the due queue) / restore it
  • list_cards(deck=None, limit=50) — overview regardless of due date
  • delete_card(card_id) — remove one (reset / cleanup)
  • stats(deck=None) -> {total, due_now, suspended, reviews, decks}

The review loop: due_cards → quiz the user with front → check against backgrade_card. FSRS computes the next due date from the rating.

Run

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

Storage

Two backends, chosen at startup:

  • Postgres (shared deck) — set SRS_DATABASE_URL (or DATABASE_URL) to a Postgres connection string (e.g. a Neon DB). Every deployment that points at the same URL reads/writes one shared deck, so you can add and review cards from anywhere (local, Railway, etc.). FSRS card ids are large, so the cards.card_id column is BIGINT on Postgres. Requires the psycopg dependency (already declared).
  • SQLite (fallback) — when no *DATABASE_URL is set, cards live in a SQLite file at SRS_DB (default ./srs.db). Single-host / offline. In a SQLite-on-Railway setup, mount a volume at /data and keep SRS_DB=/data/srs.db so the box survives redeploys.

The schema is identical (table cards) and auto-created on first use.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

srs_mcp-0.2.1.tar.gz (87.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

srs_mcp-0.2.1-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file srs_mcp-0.2.1.tar.gz.

File metadata

  • Download URL: srs_mcp-0.2.1.tar.gz
  • Upload date:
  • Size: 87.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.17

File hashes

Hashes for srs_mcp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 c100263966f3204e2566feb99590d45bd32af98bf7489a9e6f39ea80b76829fc
MD5 ab7034c0a9df34df420b8c5f3a214e39
BLAKE2b-256 04cc0dadf36d83f2ee36d57472515cd0b0f34cf41cc4c022fbce09fddca64182

See more details on using hashes here.

File details

Details for the file srs_mcp-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: srs_mcp-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.17

File hashes

Hashes for srs_mcp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cbb6dfd10394b3d0d16190935f32e632df48aca60566bad194cae97ef1cf9a66
MD5 38e018a8456a776b565a1355dd6b0d92
BLAKE2b-256 8f1197d7bb8dfa8ae884473b9535c78dd5452e5a99b0fb7c9c7746c28e7bafec

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page