srs-mcp
srs-mcp — интервальное повторение в виде MCP-сервера
Дайте любому агенту, поддерживающему MCP (Claude Code, Claude Desktop или любому другому MCP-хосту), настоящую, правильно планируемую память с интервальным повторением, вместо того чтобы каждый раз вручную заново выводить «что нужно повторить сегодня» из markdown-таблицы. Реализует SM-2 (алгоритм, лежащий в основе Anki/SuperMemo) в виде четырёх вызываемых инструментов, с локальным SQLite-файлом в качестве хранилища. Без аккаунта, без сетевых вызовов, без телеметрии — всё работает на вашей машине.
Статус: прототип, ещё нигде не опубликован. Собран и проверен локально (см. «Как это было проверено» ниже); ещё не установлен никем за пределами этого проекта. Считайте версию 0.2.0 предрелизной.
Зачем это существует
Markdown-чек-листы и таблицы словарного запаса — распространённые способы, которыми люди (и помогающие им агенты) отслеживают, что нужно повторить, но ничто не вычисляет из них реальное расписание — «нужно сегодня» оказывается догадкой, которую каждый раз перечитывают глазами. srs-mcp — недостающий элемент: небольшой настоящий алгоритм планирования, представленный в виде инструментов, чтобы агент мог отслеживать состояние повторения для чего угодно — карточек, вопросов на собеседовании, словарного запаса, вводных тестов — не переписывая SM-2 в промпте.
Related MCP server: FlashLearn
Четыре основных инструмента (бесплатно, без ограничений, навсегда)
Tool | Что делает |
| Добавляет элемент для повторения в указанную тему. Новые элементы становятся доступными сразу. |
| Список элементов, которые нужно повторить сегодня или позже срока. Ответ скрыт до оценки, как при настоящем повторении карточек. |
| Оценивает запоминание по шкале 0–5 (5 = отлично, <3 = провал/сброс). Возвращает следующую дату повторения по SM-2 и правильный ответ. |
| Итоги, количество к повторению сегодня, средний коэффициент лёгкости. |
Получить Pro
Два дополнительных инструмента доступны только по Pro-лицензии — это разделение на бесплатную и платную версии, которое srs-mcp использует вместо подписок или облачного бэкенда:
Tool | Что делает |
| Массовый экспорт/резервное копирование всех ваших данных о повторениях. |
| Прогноз нагрузки повторений — сколько элементов станут доступными в каждый из следующих N дней, чтобы накопление было видно заранее. |
Как конкретно работает лицензирование: srs-mcp подписывает лицензионные ключи с помощью закрытого ключа Ed25519, который никогда не покидает машину сопровождающего; в этом репозитории поставляется только соответствующий открытый ключ (license.py), который может проверить подпись, но не может её подделать. Купите ключ, задайте его как SRS_LICENSE_KEY (переменная окружения) или сохраните в ~/.srs-mcp/license.key, и Pro-инструменты разблокируются — без аккаунта, без проверки связи с домом, работает офлайн. См. license.py для полного механизма и его заявленных ограничений (кратко: это сдерживает случайное копирование, это не DRM — ничто не мешает кому-то вырезать проверку в своей локальной копии открытого Python-файла; см. docstring модуля для честной версии этого компромисса).
Живой ссылки для покупки пока нет. Этот раздел описывает механизм, который создан и протестирован (см. test_license_gate.py), а не работающий магазин. Когда появится процесс покупки, он будет здесь.
Установка
Требуется 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Чтобы использовать его как плагин Claude Code, укажите Claude Code на этот каталог (или, после публикации, на его запись в маркетплейсе) — .claude-plugin/plugin.json и .mcp.json уже настроены; сервер читает SRS_DB_PATH, поэтому данные установки плагина переживают обновления (${CLAUDE_PLUGIN_DATA}/srs.db в Claude Code или расположенный рядом srs.db для прямого/ручного запуска).
Как это было проверено
Не просто «оно импортируется» — реально запущено, по настоящему протоколу MCP:
test_client.pyзапускаетserver.pyкак подпроцесс (так же, как это делает настоящий MCP-хост), проводит полный сеанс add/list/grade/list и независимо перепроверяет полученные строки SQLite вне тестовой среды.test_license_gate.pyзапускает сервер тремя способами (без лицензии, с действительной лицензией, с изменённой лицензией) и подтверждает, чтоexport_items/get_forecastотказывают в случаях 1 и 3 и возвращают реальные данные в случае 2 — доказывая, что проверка лицензии — это настоящий шлюз, а не заглушка.ingest_chinese_vocab.pyиingest_leetcode.py— рабочие идемпотентные скрипты импорта, которые заполняют реальные личные данные (114 элементов китайского словарного запаса, 16 решённых задач LeetCode) из markdown-трекеров этого проекта через реальные вызовыadd_itemMCP, а не прямые записи в SQLite.
Честный разрыв до «готовности к запуску» — без преувеличений
Нет публичного репозитория. Каждый реальный путь распространения (маркетплейс плагинов сообщества Claude Code, релиз на GitHub, листинг в каталоге MCP) требует, чтобы проект был доступен по публичному git-URL. Этот проект существует только локально. Создание такого репозитория (репозиторий GitHub, возможно, аккаунт) выходит за рамки текущей автономии этого проекта без явного разрешения — всё вышеперечисленное подготовлено так, чтобы это было действие «скопировать и отправить», а не задача сборки, как только разрешение будет дано.
Невозможно самостоятельно проверить через
claude plugin validate. В этом окружении разработки нет CLIclaudeили Node/npx. Манифест плагина соответствует схеме, насколько это может подтвердить внимательное чтение документации Anthropic и перекрёстная ссылка на их собственный продакшн-marketplace.json, но не проверен машинно.Нет живого процесса покупки. Механизм лицензирования реален и протестирован; превращение его в реальную продажу требует витрины (Ko-fi, Gumroad или аналогичной), которой пока нет — это шаг создания аккаунта, выходящий за рамки автономии этого проекта без разрешения.
Обеспечение лицензии основано на честности, а не на защите от взлома — по замыслу и по природе поставки читаемого Python — см. раздел «Получить Pro» выше и docstring в
license.py.Нет истории с аутентификацией/мультитенантностью. Один локальный SQLite-файл, один пользователь. Нормально для текущей модели «работает на вашей машине»; потребуется реальная проектная работа, чтобы стать хостируемым/командным продуктом.
Ноль внешнего подтверждения. Никто за пределами этого проекта не устанавливал и не использовал это. Каждое утверждение выше — «это работает, как создано и протестировано», а не «люди этого хотят».
Лицензия
MIT — см. LICENSE. (Механизм лицензионных ключей Pro-уровня отделён от собственной MIT-лицензии кода — см. «Получить Pro» выше.)
Available Tools
6 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| answer | Yes | ||
| question | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | ||
| format | No | json |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| topic | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| quality | Yes |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.2.0- First observed
add_item - First observed
export_items - First observed
get_due_items - First observed
get_forecast - First observed
get_stats - First observed
grade_item
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Agent-native spaced-recall system of record. Deterministic dueAt via remote MCP for Muse/any agent.
Read, write, and conversationally review open-source flashcards through split read/write MCP tools.
- FlipnemOAuthcom.flipnem
Build and study spaced-repetition flashcards with your agent.
Spaced-repetition flashcards your AI writes, quizzes you on by voice, and schedules with FSRS.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.92MIT
- AlicenseNot gradedqualityDmaintenanceLocal Leitner flashcard MCP server enabling AI clients to create decks, manage cards, study with spaced repetition, and track progress.MIT
- 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