Skip to main content
Glama

srs-mcp — repetición espaciada, como servidor MCP

Dale a cualquier agente compatible con MCP (Claude Code, Claude Desktop o cualquier otro host MCP) una memoria de repetición espaciada real y correctamente programada, en lugar de volver a derivar "qué vence hoy" de una tabla de markdown a mano cada sesión. Implementa SM-2 (el algoritmo detrás de Anki/SuperMemo) como cuatro herramientas invocables, respaldadas por un archivo SQLite local. Sin cuenta, sin llamadas de red, sin telemetría: todo se ejecuta en tu máquina.

Estado: prototipo, aún no publicado en ningún sitio. Construido y verificado localmente (ver "Cómo se ha verificado" más abajo); aún no instalado por nadie fuera de este proyecto. Trata la versión 0.2.0 como pre-lanzamiento.

Por qué existe esto

Las listas de verificación en Markdown y las tablas de vocabulario son formas comunes en que las personas (y los agentes que las ayudan) hacen seguimiento de qué repasar, pero nada calcula un horario real a partir de ellas: "vence hoy" termina siendo una suposición, releída a ojo cada vez. srs-mcp es la pieza que falta: un pequeño algoritmo de programación real expuesto como herramientas, para que un agente pueda hacer seguimiento del estado de repaso de cualquier cosa — tarjetas, preguntas de entrevista, vocabulario, cuestionarios de incorporación — sin reimplementar SM-2 en un prompt.

Related MCP server: FlashLearn

Las cuatro herramientas principales (gratis, ilimitadas, para siempre)

Tool

Qué hace

add_item(topic, question, answer)

Añade un elemento de repaso bajo un tema. Los nuevos elementos vencen de inmediato.

get_due_items(topic="", limit=10)

Lista los elementos que vencen hoy o están atrasados. La respuesta se oculta hasta que se califica, como en un repaso de tarjetas real.

grade_item(item_id, quality)

Califica el recuerdo de 0 a 5 (5 = perfecto, <3 = fallo/reinicio). Devuelve la próxima fecha de vencimiento mediante SM-2 y la respuesta correcta.

get_stats(topic="")

Totales, cantidad que vence hoy, factor de facilidad promedio.

Obtén Pro

Dos herramientas adicionales están restringidas detrás de una licencia Pro: esta es la división gratis/de pago que srs-mcp usa en lugar de suscripciones o un backend alojado:

Tool

Qué hace

export_items(topic="", format="json"|"csv")

Exportación/backup masivo de todos tus datos de repaso.

get_forecast(topic="", days=30)

Pronóstico de carga de repaso: cuántos elementos vencen en cada uno de los próximos N días, para que un acumulamiento sea visible antes de que ocurra.

Cómo funciona la licencia, concretamente: srs-mcp firma las claves de licencia con una clave privada Ed25519 que nunca sale de la máquina del mantenedor; este repositorio incluye solo la clave pública correspondiente (license.py), que puede verificar una firma pero no falsificarla. Compra una clave, configúrala como SRS_LICENSE_KEY (variable de entorno) o guárdala en ~/.srs-mcp/license.key, y las herramientas Pro se desbloquean: sin cuenta, sin verificación de conexión, funciona sin conexión. Consulta license.py para el mecanismo completo y sus limitaciones declaradas (versión corta: esto disuade la copia casual, no es DRM; nada impide que alguien parchee la verificación en su propia copia local de un archivo Python de código abierto; consulta el docstring del módulo para la versión honesta de esta compensación).

Aún no existe un enlace de compra en vivo. Esta sección describe el mecanismo, que está construido y probado (ver test_license_gate.py), no una tienda funcional. Cuando exista un flujo de compra, irá aquí.

Instalación

Requiere Python 3.11+.

git clone <repo-url>   # not yet public — see status note above
cd srs-mcp
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/srs-mcp       # runs the server on stdio

Para usarlo como plugin de Claude Code, apunta Claude Code a este directorio (o, una vez publicado, a su listado en el marketplace): .claude-plugin/plugin.json y .mcp.json ya están configurados; el servidor lee SRS_DB_PATH para que los datos de una instalación de plugin sobrevivan a las actualizaciones (${CLAUDE_PLUGIN_DATA}/srs.db bajo Claude Code, o un srs.db co-ubicado para una ejecución directa/manual).

Cómo se ha verificado

No solo "importa": realmente ejecutado, sobre el protocolo MCP real:

  • test_client.py lanza server.py como subproceso (de la misma manera que lo hace un host MCP real), ejecuta una sesión completa de añadir/listar/calificar/listar, y re-verifica de forma independiente las filas SQLite resultantes fuera del entorno de prueba.

  • test_license_gate.py lanza el servidor de tres maneras (sin licencia, licencia válida, licencia manipulada) y confirma que export_items / get_forecast se niegan en los casos 1 y 3 y devuelven datos reales en el caso 2, lo que demuestra que la verificación de licencia es una puerta real, no una operación nula.

  • ingest_chinese_vocab.py e ingest_leetcode.py son scripts de ingesta idempotentes y funcionales que siembran datos personales reales (114 elementos de vocabulario chino, 16 problemas de LeetCode completados) desde los rastreadores de markdown de este proyecto mediante llamadas MCP reales a add_item, no escrituras directas a SQLite.

Brecha honesta para "listo para lanzar" — sin redondear

  1. Sin repositorio público. Cada ruta de distribución real (el marketplace de plugins comunitarios de Claude Code, un release de GitHub, un listado en un directorio de MCP) necesita que esto sea accesible en una URL de git pública. Este proyecto es solo local. Crear eso (un repositorio de GitHub, posiblemente una cuenta) está fuera de la autonomía actual de este proyecto sin una autorización explícita: todo lo anterior está preparado para que sea una acción de copiar y empujar, no una tarea de construcción, una vez que se dé.

  2. No se puede auto-validar contra claude plugin validate. No hay CLI de claude ni Node/npx disponible en este entorno de desarrollo. El manifiesto del plugin es conforme al esquema en la medida en que una lectura cuidadosa de la documentación de Anthropic y la referencia cruzada con su propio marketplace.json de producción pueden confirmar, no validado por máquina.

  3. No hay flujo de compra en vivo. El mecanismo de licencia es real y probado; convertirlo en una venta real necesita una tienda (Ko-fi, Gumroad o similar) que aún no existe: eso es un paso de creación de cuenta, fuera de la autonomía de este proyecto sin una autorización.

  4. La aplicación de la licencia se basa en la honestidad, no es a prueba de manipulaciones, por diseño y por la naturaleza de distribuir Python legible: ver la sección "Obtén Pro" arriba y el docstring de license.py.

  5. Sin historia de autenticación/multi-tenant. Un solo archivo SQLite local, un solo usuario. Está bien para el modelo actual de "se ejecuta en tu máquina"; necesitaría un diseño real para convertirse en un producto alojado/para equipos.

  6. Cero validación externa. Nadie fuera de este proyecto ha instalado o usado esto. Cada afirmación anterior es "esto funciona tal como está construido y probado", no "la gente quiere esto".

Licencia

MIT — ver LICENSE. (El mecanismo de clave de licencia del nivel Pro es separado de la licencia MIT del propio código — ver "Obtén Pro" arriba.)

Available Tools

6 tools
add_itemA

Add a new spaced-repetition item (e.g. a LeetCode problem, a Chinese vocab word, an interview question) under a topic. New items are due immediately.

NameRequiredDescriptionDefault
topicYes
answerYes
questionYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose a key behavioral fact: new items are due immediately. However, it does not mention side effects, permissions required, reversibility, or what happens if the topic doesn't exist. The single behavioral note is valuable but insufficient for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence immediately states the action and provides useful examples, and the second adds a critical behavioral note. Every word earns its place, and the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It omits what the tool returns, how errors are surfaced, whether there are constraints on topic or content, and any side effects on related data. For a create operation, this is a notable gap that could mislead an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It hints at parameter meanings through examples ('LeetCode problem', 'under a topic') but does not explicitly define 'topic', 'question', or 'answer'. While some semantics are implied, the description does not fully explain each parameter's purpose or format, leaving gaps that the schema cannot fill.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Add), a specific resource (spaced-repetition item) with concrete examples (LeetCode problem, vocab word, interview question), and the container (under a topic). It is clearly distinct from the sibling tools, which handle retrieval, grading, stats, export, and forecasting. An agent can immediately tell this tool is for creating a new item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case unambiguous: it is for adding new items. While it does not explicitly name alternatives or say 'use this instead of X', the action of adding is clearly differentiated from the sibling tools (e.g., grade_item, get_due_items). This provides clear context with no explicit exclusions, which fits a score of 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_itemsA

[Pro] Export items (id, topic, question, answer, interval_days, repetitions, ease_factor, due_date, created_at) as json or csv text, optionally filtered to one topic. Requires a valid Pro license (see README's "Get Pro" section) -- this is the free/Pro split's first concrete gate: the 4 core tools stay free and unlimited forever, bulk export/backup is part of the paid tier. Without a valid license, returns an upgrade message instead of data, not an error the caller has to guess the meaning of.

NameRequiredDescriptionDefault
topicNo
formatNojson

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does well: it states the Pro license requirement and explicitly explains that an invalid license yields an upgrade message rather than a confusing error. It does not mention rate limits or pagination, but the license-gate behavior is the most important non-obvious trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core function is front-loaded, and the license explanation is useful context rather than filler, but the free/Pro split commentary is slightly longer than strictly necessary. Overall it is well-organized and each sentence contributes to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates by listing the exact returned fields, formats, filtering option, and license failure mode. Minor gaps remain, such as whether the topic filter is exact-match or case-sensitive, but the definition is complete enough for an agent to use it correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains both parameters: 'topic' as an optional filter and 'format' as json or csv text. That is sufficient to invoke correctly, though exact enum values or default behavior are not restated in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the exact operation ('Export items'), the fields returned, the supported formats (json/csv), and the optional topic filter. This clearly distinguishes it from siblings like add_item and get_due_items, which are about adding or retrieving due items rather than exporting the whole collection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: this is the paid-tier bulk export/backup tool, optionally scoped to one topic, while the 4 core tools remain free. It does not explicitly name sibling alternatives or when not to use them, but the positioning and verb make the use case evident enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_due_itemsA

List items due for review today (or overdue), optionally filtered to one topic. Returns id, topic, question (answer withheld until grade_item is called, same as a real flashcard review).

NameRequiredDescriptionDefault
limitNo
topicNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavior disclosure. It explicitly states that the answer is withheld until grade_item is called, and that overdue items are included. It does not mention rate limits or auth, but for a read-only list operation this is adequate and adds notable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary purpose is front-loaded, and the answer-withheld detail is placed logically at the end. Every word earns its place; the structure is clean and immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema or annotations, the description covers purpose, scope, filters, and return fields (id, topic, question). The only significant gap is the undefined 'limit' parameter semantics, but overall it provides enough for an agent to call correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain both parameters. It explains the 'topic' filter explicitly ('optionally filtered to one topic') but does not mention 'limit' at all. The limit parameter has a default but no description, leaving its behavior (e.g., maximum number of items, pagination) undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), names the resource ('items due for review'), and states scope ('today (or overdue)') plus an optional filter ('one topic'). It clearly distinguishes from siblings like add_item, grade_item, get_stats, and export_items, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to see due items) and mentions that answers are withheld until grade_item is called, giving a hint about downstream steps. However, it does not explicitly compare with get_forecast or state when not to use this tool, leaving some routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forecastA

[Pro] Review-load forecast: how many items become due on each of the next N days, optionally filtered to one topic. Lets a user see an upcoming pile-up before it happens instead of discovering it the day of -- a real planning feature, not a gate for its own sake. Requires a valid Pro license, same as export_items.

NameRequiredDescriptionDefault
daysNo
topicNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral load. It discloses the Pro license requirement (a key constraint) and specifies the output nature (counts per day, not a list of items). It also implies read-only behavior without saying so explicitly. This adds meaningful context beyond the name, though it doesn't discuss error handling or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core functionality is front-loaded, the value proposition is concise, and the license note is a necessary addition. Every sentence earns its place; it is well-structured and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (2 optional params, no output schema), the description covers the essential aspects: purpose, parameters, and a key constraint (license). It clearly implies the return shape (counts per day). It does not contrast with get_due_items explicitly, but the purpose is distinct enough. Minor gaps like pagination or error behavior are acceptable for this complexity, so a 4 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description is responsible for explaining the parameters. It does so effectively: 'next N days' maps to the 'days' parameter and 'optionally filtered to one topic' maps to 'topic'. It clarifies their roles without repeating schema types. It does not explicitly mention defaults, but those are present in the schema, so the description adds value beyond the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a clear purpose: providing a forecast of how many items become due per day over a horizon, with optional topic filtering. It explicitly distinguishes from siblings like get_due_items by framing it as a proactive planning feature ('see an upcoming pile-up before it happens'). The verb+resource is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers a concrete usage context ('lets a user see an upcoming pile-up before it happens') and implies it is for planning rather than immediate action. It does not explicitly name alternatives or exclusions, but the scenario is clear enough. The license prerequisite is highlighted. Missing explicit 'when not to use' or direct sibling comparison, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsA

Summary stats: total items, how many due today, average ease factor, optionally scoped to one topic.

NameRequiredDescriptionDefault
topicNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must shoulder the full burden of behavioral disclosure. It does state the specific output metrics (total items, due today count, average ease factor) and the optional scoping, but it does not explicitly confirm the operation is read-only, nor does it mention any side effects, error conditions, or response format. The description gives partial behavioral context but is not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the purpose ('Summary stats:') then enumerates the outputs and the optional scoping. There is no wasted phrasing or repetition; each segment earns its place. It is appropriately concise and well-structured for rapid parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with one optional parameter, and the description covers its primary outputs and the scoping option. It lacks an explicit statement of read-only behavior and the exact output shape, but given the tool's simplicity and the absence of an output schema, the description provides sufficient context for an agent to invoke it correctly. The main gap is the unstated read-only guarantee, which is minor because the function's name and description strongly imply it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one optional parameter 'topic' with zero description coverage. The description adds meaning by explaining that the tool is 'optionally scoped to one topic', directly addressing the parameter's purpose and optionality. It does not specify the default behavior when omitted or acceptable topic formats, but given the single simple parameter and the description's acknowledgment, it compensates well for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it provides summary statistics (total items, number due today, average ease factor) with optional topic scoping. This distinguishes it from sibling tools like get_due_items (which likely lists individual due items) and get_forecast (which projects future trends). The verb 'get' plus the resource 'stats' is explicit and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates this tool is for summary statistics, implying use when an aggregate overview is needed rather than detailed item lists. However, it does not explicitly name alternative tools or state when not to use it, leaving the agent to infer the appropriate context from the purpose. Clear context is provided, but no exclusions or comparisons to siblings are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grade_itemA

Grade recall quality for an item just reviewed (0-5: 0 = total blackout, 3 = correct with effort, 5 = perfect instant recall) and return the newly computed next-due date, plus the correct answer for confirmation. Uses SM-2 scheduling.

NameRequiredDescriptionDefault
item_idYes
qualityYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It usefully discloses the 0-5 quality scale, SM-2 scheduling, and the returned next-due date/correct answer. However, it does not explicitly state whether the grade is persisted or how the item's scheduling state is updated, which is a meaningful side-effect gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the action, then efficiently packs the scale, return values, and algorithm into the remainder. There is no filler or redundant repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers the invocation context, the grading scale, the scheduling algorithm, and the key return values. Minor gaps remain around exact output format and whether the grade permanently mutates stored state, but the description is largely sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the key parameter 'quality' with concrete anchors (0, 3, 5) and ties 'item_id' to the item being reviewed. It does not give explicit numeric bounds/validation for quality, but the 0-5 range is clearly communicated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Grade recall quality') and names the resource ('an item just reviewed'), then explains the grading scale and what the tool returns. This clearly distinguishes it from sibling tools like add_item or get_due_items, which perform different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for an item just reviewed' gives clear contextual guidance on when to call this tool. It does not explicitly name alternatives or exclusions, but none of the sibling tools perform the same grading function, so the usage context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.2.0
    • First observedadd_item
    • First observedexport_items
    • First observedget_due_items
    • First observedget_forecast
    • First observedget_stats
    • First observedgrade_item

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool serves a clearly distinct purpose: adding items, fetching due items, grading recall, viewing stats, exporting data, and forecasting workload. There is no overlap or ambiguity in their intended actions.

Naming Consistency5/5

Every tool follows a consistent verb_noun pattern (add_item, get_due_items, grade_item, get_stats, export_items, get_forecast), making it easy to infer the action and target. No mixed conventions or vague verbs.

Tool Count5/5

With 6 tools, the server is well-scoped for a spaced-repetition system, covering the core workflows (add, review, stats, export, forecast) without unnecessary bloat or excessive granularity.

Completeness4/5

The tool surface covers the primary lifecycle (add, review, stats, export, forecast) well, but lacks direct update and delete operations for items. Export tools can serve as a workaround, so the gap is minor.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables agents to perform spaced-repetition learning with FSRS scheduling, including adding cards, reviewing due cards, and grading recall, using a headless SQLite or Postgres backend.
    9
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local Leitner flashcard MCP server enabling AI clients to create decks, manage cards, study with spaced repetition, and track progress.
    MIT