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.0.tar.gz (87.3 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.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for srs_mcp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0cb095aff01b1c084285c51bbc44ef13e4bc17c137e3a79808e7d8192c1054c5
MD5 01d497d1c225d85fae56ccd9d8352d00
BLAKE2b-256 65274018d8b7c6a6e50ce3aae78dfdf9f251022eac68b7209a2ecbd4caa23d76

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for srs_mcp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc244809879e10e2a3f607f93c78d21da0c74fae6b499761ac13dd284add9d78
MD5 9c14feb064a799cdb2bb7a3f286bf0e9
BLAKE2b-256 b4688162a27f99736ff3d359f9d3d9265b1b04894e00631f78556caec61801ea

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

0.2.1

2 files

This release

0.2.0 This release

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