srs-mcp
srs-mcp
Servidor MCP agnóstico de agente para aprendizaje con repetición espaciada — sin GUI de Anki, sin Xvfb, sin AnkiConnect. Trae tu propio agente; esto trae la caja de tarjetas + el programador.
Envuelve FSRS (el Programador de Repetición Espaciada Libre, el mismo algoritmo que usa el Anki moderno) alrededor de un pequeño almacén SQLite, para que un agente pueda crear tarjetas, ver lo que está pendiente y registrar el recuerdo — completamente sin interfaz gráfica.
¿Por qué no Anki sin interfaz?
Manejar la aplicación de escritorio de Anki sin interfaz significa Qt + un framebuffer virtual (Xvfb) + el complemento AnkiConnect — frágil y acoplado a versiones. El paquete PyPI anki puede manejar una colección real .anki2 sin GUI si necesitas interoperar con el Anki de tu teléfono. Pero si solo quieres repetición espaciada detrás de una API, no necesitas Anki en absoluto: FSRS es una biblioteca, y este servidor son ~200 líneas alrededor de ella.
Related MCP server: anki-mcp
Herramientas
add_card(front, back) -> {card_id, due}— crea y programa una tarjeta. Manténbackcorto — una palabra o frase; una tarjeta que no puedas calificar en segundos es una nota, no una tarjeta de memoriadue_cards(q=None, limit=20) -> [{card_id, front, back, deck, due}]— lo que está pendiente ahora, opcionalmente limitado a un tema (q="horace")grade_card(card_id, rating) -> {card_id, rating, next_due, reps}— registra el recuerdo (again/hard/good/easy, o 1-4)edit_card(card_id, front=None, back=None)— edita el contenido en su lugar; el programa se conserva (corrige errores tipográficos / acorta una respuesta larga en lugar de duplicar)suspend_card(card_id)/unsuspend_card(card_id)— archiva una tarjeta (se conserva con su historial, se elimina de la cola de pendientes) / la restauralist_cards(q=None, limit=50)— vista general independientemente de la fecha de vencimientodelete_card(card_id)— elimina una (reinicio / limpieza)stats(deck=None) -> {total, due_now, suspended, reviews, decks}
Encontrar tarjetas: búsqueda, no mazos
Las tarjetas se encuentran buscando su texto — due_cards(q="horace") — en lugar de archivarlas en mazos de antemano. Nada escribe el campo deck ya; pon el tema en la propia tarjeta ("Horace, Odes 1.11: …") y seguirá siendo localizable.
Los mazos eran una etiqueta de un solo valor, texto libre, coincidencia exacta, sin programación por mazo adjunta, así que no compraban nada que una búsqueda no haga, y costaban precisión: en el mazo donde se midió esto, los agentes habían inventado diez nombres para Horace en cinco convenciones de separador, así que el mejor deck="Horace" posible devolvía 20 de 97 tarjetas de Horace mientras que q="horac" devuelve 89 — incluidas las mal archivadas bajo Talks. La columna y el filtro deck= en due_cards/list_cards/stats permanecen para tarjetas etiquetadas por versiones anteriores. Ver plans/002-decks.md.
El bucle de repaso: due_cards → pregunta al usuario con front → comprueba contra back → grade_card. FSRS calcula la próxima fecha de vencimiento a partir de la calificación.
Ejecutar
uv sync
# HTTP (default; for Railway / remote agents)
PORT=8000 uv run srs-mcp
# or stdio (local agent)
MCP_TRANSPORT=stdio uv run srs-mcpAlmacenamiento
Dos backends, elegidos al inicio:
Postgres (mazo compartido) — establece
SRS_DATABASE_URL(oDATABASE_URL) a una cadena de conexión de Postgres (por ejemplo, una base de datos Neon). Cada despliegue que apunte a la misma URL lee/escribe un mazo compartido, así que puedes añadir y repasar tarjetas desde cualquier lugar (local, Railway, etc.). Los ids de tarjetas de FSRS son grandes, así que la columnacards.card_idesBIGINTen Postgres. Requiere la dependenciapsycopg(ya declarada).SQLite (respaldo) — cuando no se establece ningún
*DATABASE_URL, las tarjetas viven en un archivo SQLite enSRS_DB(por defecto./srs.db). Un solo host / sin conexión. En una configuración SQLite-en-Railway, monta un volumen en/datay manténSRS_DB=/data/srs.dbpara que la caja sobreviva a los redespliegues.
El esquema es idéntico (tabla cards) y se crea automáticamente en el primer uso.
Maintenance
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
- AlicenseBqualityCmaintenanceEnables AI assistants to manage Anki flashcard decks and cards through natural language, supporting deck creation, card additions (basic and cloze types), and review queue management.682MIT
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to interact with Anki flashcard collections, including deck management, note search, viewing contents, and editing fields.16MIT
- AlicenseNot gradedqualityCmaintenanceA lightweight MCP server that adds spaced-repetition flashcards (SM-2) to AI assistants, storing data locally in SQLite and enabling card creation, review, and scheduling.MIT
- AlicenseNot gradedqualityCmaintenanceProvides a privacy-first adaptive review engine with local SQLite storage, enabling item creation, due review retrieval, grading, and statistics via MCP tools.MIT
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Voice-led, FSRS-scheduled flashcards from YouTube, PDFs, web, or text. Auto-graded quizzes.
Persistent memory for AI agents. Search, store, and recall across sessions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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