Skip to main content

Agent-agnostic MCP server for spaced-repetition learning (FSRS). Add cards, review what's due, grade recall — no Anki GUI required.

Project description

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)
  • 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, 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.

Project details


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.1.0.tar.gz (86.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.1.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for srs_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0e8646bb5a5ffaf5ea0286d5b6de4abdb2ce04013c59381bc42bdeff2cdbdd48
MD5 0676f550b135777248fac9c0bbc3a200
BLAKE2b-256 73ca241d703aad688257fc91d6a0a5c17a4a3f4f87606843d52616779425a973

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for srs_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 355f436a2ce9156bc9836d008d979a495f060ae9d303bfbb5b7780035fec258b
MD5 9afdf216b24485d2768d3f53fbb60e28
BLAKE2b-256 3db42619e20862ad3ef9a64414a439a7111a65050c574ec718bb331522083537

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page