Spaced-repetition flashcards your AI writes, quizzes you on by voice, and schedules with FSRS.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Spaced-repetition flashcards you study with your AI. Flash is a small self-hosted server: a web app for your decks and an MCP server that lets Claude, ChatGPT, Grok or any MCP client create cards from what you're learning, quiz you out loud, grade your answers and file the reviews with the FSRS scheduler. One Rust binary, one SQLite file, no accounts anywhere but yours.
The hosted version, with self-serve signup, Google/Apple sign-in and a community deck library, is at flashmemorize.com. iOS and Android apps are on the way and not out yet. This repository is the core it all runs on.
| Today | Study | Connect your AI |
|---|---|---|
![]() | ![]() | ![]() |
Demo decks under the test persona; the conduction diagram is by Madhero88 via Wikimedia Commons, CC BY 3.0.
AnkiConnect is a bridge into the desktop app: it only answers while Anki
is open on that machine, and it speaks Anki's own JSON, not MCP. Flash is
a server. It is reachable from your phone, from a Claude connector, from
Claude Code in a terminal, all at once, and the scheduling lives in the
server so every surface sees the same queue. It imports .apkg decks
whole (cloze, hints, images, audio, LaTeX, typed answers, nested decks)
and exports them back at any time, so trying it costs nothing.
The first boot finds an empty database and logs a one-time link:
Open it, add a passkey or a password, and you are the admin. Every later account is created from Settings β Invite: there is no public signup on a self-hosted Flash, by design.
Without Docker: cargo build --release -p flash-server, then run
target/release/flash-server with the same environment variables. The
binary embeds its templates and static assets; it writes under
FLASH_DATA_DIR, plus short-lived scratch files for an import or export
in the system temp directory (the systemd unit gives it a private one).
Everything Flash writes lives in the flash-data volume (/data in the
container: the SQLite database, media, voice clips), and the image holds
nothing of yours, so a newer image finds your data where the old one
left it. On its first boot a newer version brings the database schema
forward before it listens, one step at a time, each in its own
transaction; /healthz then reports the new version. Migrations only go
forward: take a copy before an upgrade if you may want to return, and do
not start an older image on a volume a newer one has opened. A consistent
copy is the volume with the container stopped:
latest follows every release. ghcr.io/flash-cards/flash:0.3 takes
patch releases only and :0.3.0 never moves; pin one of those in
docker-compose.yml if you would rather choose when to move. What each
version changed is in CHANGELOG.md, and a release that
changes the MCP tools says so there: refresh the connector's tool
definitions in each AI client after that upgrade. Without Docker the
same holds for FLASH_DATA_DIR: keep the directory, replace the binary,
start it.
Flash serves MCP at /mcp (Streamable HTTP) with OAuth 2.1: the client
registers itself, sends you to Flash's login page, and gets a token
scoped to your account.
https://<your host>/mcp. Claude's connectors need a
publicly reachable HTTPS origin, so put Flash behind a reverse proxy
with a certificate, such as Caddy:
and set FLASH_CLIENT_IP_HEADER=x-real-ip so the rate limiters see
each visitor rather than the proxy (see the note under Configuration).
A tunnel (Cloudflare Tunnel, Tailscale Funnel, ngrok) works the same
way if you'd rather not open a port.claude mcp add --transport http flash https://<your host>/mcp.
Claude Code and Claude Desktop run on your own machine, so a LAN address
works for the MCP connection as long as FLASH_BASE_URL matches what
you paste. The web UI itself needs HTTPS or http://localhost: its
session cookie is marked Secure, and a browser drops it over plain http
to any other host (the server says so at boot).Once connected, say "quiz me on my pharmacology deck" and follow along.
The web app at / is where you import decks, edit cards and read your
stats. What the tools take and return, for anyone building a client, is
in the MCP contract.
Everything is an environment variable; the core needs only the first three. Optional groups are all-or-nothing: a partial set is a boot error, an absent set turns the feature off.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/flash)<a href="https://allmcps.com/mcp/flash"><img src="https://allmcps.com/api/badge/flash?style=directory" alt="Flash on AllMCPs" /></a>