Memora MCP
Memora MCP
Claude Desktop에서 바로 모든 대화를 인터랙티브 학습 세션으로 바꿔보세요. Claude에게 덱을 만들어 달라고 하면 카드를 생성하고, 이를 인라인 리뷰로 렌더링하여 클릭하며 학습할 수 있습니다: 플래시카드 뒤집기, 객관식 퀴즈 풀기, 빈칸 채우기(cloze) 완성하기. 모든 답변은 간격 반복(spaced-repetition) 일정에 반영되며, 학습 결과는 Claude에게 다시 전달되어 틀린 내용을 집중적으로 복습할 수 있습니다.
Keywords: Model Context Protocol, MCP server, MCP Apps, Claude Desktop, flashcards, quizzes, spaced repetition, SRS, FSRS, Anki alternative.
MCP Apps 확장(SEP-1865) 기반으로 구축되었습니다: 핵심 MCP 사양 2025-11-25 + Apps 확장 2026-01-01.
기능
세 가지 학습 방식, 모두 인라인으로 렌더링되며 동일한 방식으로 채점됩니다:
플래시카드: 클릭하여 뒤집은 후 알았어요 / 몰랐어요로 평가합니다.
객관식 퀴즈: 보기 중 하나를 선택하면 정답/오답이 즉시 표시됩니다.
빈칸 채우기(Cloze): 카드 앞면에
[...]로 빈칸을 작성하면 해당 용어가 숨겨지고, 클릭 시 정답이 드러납니다.
간격 반복: 모든 평가는 카드별 FSRS 일정(ts-fsrs)을 업데이트하므로, 약한 카드는 더 자주 다시 나타나고 복습 대상 카드가 우선 표시됩니다. *"오늘 복습할 카드는 뭐야?"*라고 물어보면 전체 덱의 복습 요약을 확인할 수 있습니다.
카테고리로 정리: 덱 이름에 ::를 사용하여 중첩 구조를 만들 수 있습니다(예: LLM::Attention). 카테고리 트리를 탐색하거나, 동일한 트리를 마인드 맵으로 시각화하고, 전체 하위 분기를 하나의 세션으로 묶어 학습할 수 있습니다. 퀴즈 덱은 배지로 표시됩니다.
덱 관리: 채팅을 떠나지 않고도 덱과 카드를 생성, 추가, 편집, 이름 변경, 삭제할 수 있습니다. 덱 생성 시 reverse 옵션을 전달하면 각 카드의 역방향(뒤집힌) 카드도 함께 만들어져 어휘 학습에 유용합니다.
JSON 기반: 덱은 data/decks.json에 저장되며, 모든 호출 시 실시간으로 읽힙니다. 직접 편집하거나 Claude에게 맡길 수 있습니다. 데이터베이스나 외부 서비스가 필요 없습니다.
Related MCP server: EduChain MCP Server
도구
review_deck과 study만 인라인 플립카드 UI를 열며, 나머지 도구는 모두 텍스트 요약을 반환하므로 채팅에서 편집하거나 생성해도 더 이상 위젯이 튀어나오지 않습니다.
도구 | 기능 |
| 덱 하나를 복습합니다(세션당 복습 대상 카드 수 제한). |
| 카테고리 전체 하위 트리를 하나의 세션으로 묶어 복습합니다(세션당 카드 수 제한). |
| 플래시카드 또는 빈칸 채우기(cloze) 카드를 생성합니다. |
| 객관식 문제를 생성합니다. |
| 복습 결과를 기록하고 카드의 FSRS 일정을 업데이트합니다(UI에서 호출). |
| 전체 덱의 복습 대상 카드 요약을 제공하고, 반복적으로 틀린 카드(3회 이상)를 표시합니다. |
| 카드의 앞면 및/또는 뒷면을 수정합니다. |
| 카드를 더 작은 단위로 분할하거나, 이해도를 테스트하는 방식으로 다시 작성하는 것을 제안합니다. |
| 사용자가 제안을 승인한 후 개선된 카드를 저장합니다. |
| 방금 겪은 문제(버그, 틀린 문제)를 초안 카드로 변환합니다. |
| 사용자가 초안을 승인한 후 캡처된 카드를 저장합니다. |
| 덱 이름을 변경합니다(카테고리 트리에서도 이동). |
| 카드 하나를 삭제합니다. |
| 덱 전체를 삭제합니다. |
카드 생성은 Memora의 품질 규칙(원자적 단일 개념 카드, 1~5단어 답변, 능동 회상, 모호함 없음, 답안 누출 없음, 정의 암기보다 적용 우선)을 따르며, 이는 Wozniak의 지식 형성의 20가지 규칙에 기반합니다. 새 카드는 작성 시 검토되어 플래그가 표시되지만(차단되지는 않음) Claude가 수정할 수 있습니다.
작동 방식 (MCP Apps)
도구는 ui:// 리소스를 선언합니다. Claude가 도구를 호출하면 호스트(Claude Desktop)가 해당 리소스를 가져와 샌드박스 iframe에서 HTML을 렌더링하고, 도구 결과를 UI에 전달하며, UI는 JSON-RPC를 통해 호스트와 통신합니다(카드 채점 및 진행 상황을 모델에 보고).
빠른 시작
사전 요구 사항
Node.js 20.11+
Claude Desktop에 연결
Settings > Developer > Edit Config를 열고 mcpServers에 Memora를 추가하세요:
{
"mcpServers": {
"memora": {
"command": "npx",
"args": ["-y", "@servation/memora-mcp", "--stdio"]
}
}
}그런 다음 Claude Desktop을 완전히 종료(시스템 트레이에서)하고 다시 실행하세요. memora가 Settings > Developer 아래에 나타나며, 몇 가지 샘플 덱이 미리 로드되어 있습니다.
덱은 ~/.memora/decks.json에 저장됩니다(MEMORA_DECKS 환경 변수로 경로 변경 가능). 파일을 직접 편집하거나 Claude에게 관리하게 할 수 있습니다.
git clone https://github.com/Servation/memora-mcp.git
cd memora-mcp
npm install
npm run build빌드된 엔트리 파일의 절대 경로를 config에 지정하세요(덱은 리포지토리의 data/decks.json에 저장됩니다):
{
"mcpServers": {
"memora": {
"command": "node",
"args": ["C:\\path\\to\\memora-mcp\\dist\\main.js", "--stdio"]
}
}
}Claude Desktop에서 사용해 보기
review my World Capitals deck— 내 World Capitals 덱 복습하기make me a deck of 10 Spanish travel phrases— 스페인어 여행 표현 10개로 덱 만들기make a reversible deck of 10 Spanish words— 스페인어 단어 10개로 양방향(역방향 포함) 덱 만들기make a fill-in-the-blank deck about the water cycle— 물의 순환에 관한 빈칸 채우기 덱 만들기quiz me with 10 multiple-choice questions on the solar system— 태양계에 관한 객관식 문제 10개로 퀴즈 내기turn what we just discussed into a deck called "Photosynthesis"— 방금 논의한 내용을 "Photosynthesis"라는 덱으로 만들기study my LLM category— 내 LLM 카테고리 학습하기what's due today?— 오늘 복습할 카드 요약 보기
기술 스택
서버: TypeScript,
@modelcontextprotocol/sdk및@modelcontextprotocol/ext-apps, stdio 전송(Streamable HTTP도 지원).UI: React + Vite,
vite-plugin-singlefile로 단일 인라인 HTML 파일로 번들.스케줄링:
ts-fsrs(FSRS).런타임: 빌드 후 일반
node만 있으면 됩니다(bun이나 tsx 불필요).
덱 형식
{
"Deck Name": [
{ "front": "Capital of France?", "back": "Paris" }
]
}설치 시
~/.memora/decks.json에 저장됩니다(소스에서 실행 시data/decks.json).MEMORA_DECKS로 경로를 재정의할 수 있습니다.매 호출 시 실시간으로 읽힙니다(mtime 캐시).
create_deck,create_quiz,grade_card는 원자적으로 파일에 기록합니다.퀴즈 카드는
"options": ["...", "..."]를 추가하며,back이 정답입니다.빈칸 채우기(cloze) 카드는 앞면에
[...]로 빈칸을 표기하고, 숨겨진 용어를back에 기록합니다.복습을 진행하면 카드에
due날짜와 FSRSsrs블록이 추가됩니다. 이 필드가 없는 카드는 새 카드로 간주됩니다.유효한 JSON이어야 합니다. 그렇지 않으면 서버가 내장 기본 덱으로 대체합니다.
프로젝트 구조
memora-mcp/
├── server.ts # MCP tools + the ui:// resource
├── decks.ts # data model, decks.json storage, result builder
├── scheduling.ts # FSRS scheduling + review ordering
├── main.ts # entry: stdio (Claude Desktop) or Streamable HTTP
├── mcp-app.html # UI entry HTML (bundled by Vite)
├── src/
│ ├── mcp-app.tsx # review orchestrator (flip / quiz / cloze, grade -> model)
│ ├── deck-lib.tsx # tree, mind map, card list, quiz/cloze views, helpers
│ ├── mcp-app.module.css
│ └── global.css # host theme variable fallbacks (light/dark)
├── data/decks.json # editable decks, read live
├── media/ # README images
├── vite.config.ts # single-file bundle config
└── tsconfig*.json개발
npm run dev # vite watch (UI) plus tsx server on http://localhost:3001/mcp
npm run typecheck # tsc --noEmit빠른 로컬 반복을 위해 ext-apps 리포지토리의 MCP Apps 참조 호스트(basic-host)에서 앱을 실행할 수도 있습니다.
로드맵
백로그는 TODO.md를 참조하세요: npm + MCP Registry 배포, 크로스 클라이언트 호스팅(Streamable HTTP), 파싱 및 스케줄링 테스트, 실제 화면 캡처 데모 GIF.
라이선스
Available Tools
10 toolscreate_deckCreate DeckA
Create (or extend) a flashcard deck from cards you generate based on the user's request or the current conversation, then display it for review. Use "::" in deck_name to nest under a category (e.g. "LLM::Attention"). The deck persists to data/decks.json.
Follow Memora's card-quality rules (based on Wozniak's '20 Rules of Formulating Knowledge'). The front is the prompt/question, the back is the answer:
Minimum information (atomic): each card tests exactly one fact or concept. Split complex material into several simple cards; never ask for lists or paragraph answers.
Concise answers: the back is ideally 1-5 words (a name, date, term, or single concept), never a sentence or paragraph.
Active recall: make the front a specific question (not 'Explain X'), or a cloze deletion: write the blank as "[...]" in the front and the hidden term as the back (e.g. front "The Transformer was introduced in [...].", back "2017").
Unambiguous: each front must point to exactly one correct answer.
Set reverse=true to also add the back->front version of each non-cloze card (useful for vocabulary or term/definition pairs that should be drilled both ways).
| Name | Required | Description | Default |
|---|---|---|---|
| cards | Yes | Flashcards generated from the user's request or the conversation. | |
| append | No | If true and the deck already exists, append to it; otherwise replace/create. | |
| reverse | No | If true, also add the reverse (back -> front) of each non-cloze card. | |
| deck_name | Yes | Name for the deck to create or add to ("::" nests it). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: persistence to data/decks.json, card-quality rules, and the effect of append (replace vs. append) and reverse. It also details the nesting behavior with '::'.
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 well-structured with front-loaded purpose and detailed rules. It is slightly verbose due to card-quality rules, but every sentence is justified for correct usage.
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 tool's complexity with 4 parameters and custom card-quality rules, the description is complete. It covers creation, extension, nesting, card formatting, and the effect of parameters. The presence of an output schema covers return values.
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 100%, so baseline is 3. The description adds significant value by explaining deck_name nesting with '::', detailed card-quality rules (not in schema), and the reverse parameter. It does not add much to append parameter but overall enhances understanding.
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 it creates or extends a flashcard deck from cards generated based on user request or conversation. It distinguishes itself from siblings like create_quiz and study by focusing on deck creation and extending.
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 provides explicit guidance on when to use the tool: 'from cards you generate based on the user's request or the current conversation.' It also explains the append and reverse parameters for extension. However, it does not explicitly mention when not to use it or alternatives like edit_card.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quizCreate QuizA
Create (or extend) a multiple-choice quiz deck from questions you generate based on the user's request or the conversation, then display it for review. Use "::" in deck_name to nest under a category. Persists to data/decks.json and is reviewed like flashcards with spaced repetition.
Each question: a clear, specific prompt; 3 to 4 concise options with exactly ONE correct answer and plausible (not obviously wrong) distractors. The answer must match one of the options exactly.
| Name | Required | Description | Default |
|---|---|---|---|
| append | No | If true and the deck exists, append; otherwise replace/create. | |
| deck_name | Yes | Name for the quiz deck to create or add to ("::" nests it). | |
| questions | Yes | Multiple-choice questions you generate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses persistence to data/decks.json, display for review, and spaced repetition. However, it does not explain the behavior of the 'append' parameter (whether it replaces or extends) beyond implying both are possible.
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 concise paragraphs; first sentence captures main purpose, second paragraph details question requirements. No unnecessary sentences, efficiently structured.
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?
Covers creation, display, persistence, and question requirements. Output schema exists so return values are covered. Missing explicit handling of 'append' behavior, but overall sufficient for an AI agent to use 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 coverage is 100%, baseline 3. Description adds value by explaining deck_name nesting ('::') and providing detailed formatting rules for questions (clear prompt, 3-4 options, one correct answer, plausible distractors), which goes beyond schema.
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 clearly states the verb 'create (or extend)' and resource 'multiple-choice quiz deck', distinguishing it from sibling tool 'create_deck' by specifying it's for quiz decks with automated question generation based on user request.
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?
Description indicates when to use (user wants a quiz), how to structure deck names ('::' nesting), and question formatting rules. It does not explicitly exclude alternatives but provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_cardDelete CardA
Delete a single card from a deck, identified by its front text. Refuses to delete a deck's last card (delete the deck instead).
| Name | Required | Description | Default |
|---|---|---|---|
| front | Yes | The card's front text (identifies the card). | |
| deck_name | Yes | Deck the card belongs to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses the refusal to delete the last card, which is a key behavioral trait. However, it does not mention other aspects like permissions or irreversibility, though 'delete' implies destructiveness.
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, no unnecessary words. First sentence states core purpose, second adds critical constraint. Efficient and well-structured.
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 tool with full schema coverage and an existing output schema, the description is complete. It covers parameters, behavior, and usage limitations.
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 100% and description adds no new parameter meaning beyond what the schema already provides. The mention of 'front text' is redundant with schema 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?
Description clearly states the verb 'delete' and resource 'card' with precise identification by front text. Unambiguous and distinguishes from sibling tools like delete_deck and edit_card.
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?
Explicitly says when not to use (last card) and provides alternative (delete_deck). This is direct usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_deckDelete DeckA
Delete a deck and all its cards. Refuses to delete the only remaining deck.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | Yes | Deck to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that deletion affects both deck and cards, and that it refuses to delete the last deck. This adequately conveys destructive behavior and a key exception.
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, direct, and front-loaded with the core action and a critical constraint. No unnecessary words.
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 tool with one parameter and no output schema, the description covers the essential functionality (delete deck and cards) and a key constraint (refusing to delete the only deck), making it sufficiently complete.
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?
There is only one parameter, 'deck_name,' with schema description 'Deck to delete.' The tool description does not add additional meaning beyond the schema. With 100% schema coverage, baseline score 3 is appropriate.
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 deletes a deck and all its cards, distinguishing it from sibling tools like 'delete_card' (single card) and 'rename_deck' (rename only).
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 provides a clear constraint: 'Refuses to delete the only remaining deck,' which guides when not to use it. However, it does not explicitly state when to use this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
due_todayDue TodayA
Summarize what is due to review right now across all decks: per-deck and total due/new counts. Pull-based (call it to see the summary); it does not appear on its own.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | |
| decks | Yes | |
| totalDue | Yes | |
| totalNew | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool is pull-based and non-automatic, but does not disclose whether it is a read-only operation or any other behavioral traits.
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 short, front-loaded sentences. Each sentence adds value: the first states the purpose, the second clarifies usage behavior. No waste.
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 zero parameters and an output schema, the description fully covers what the tool does and how it behaves. It is complete for a summary tool.
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?
There are no parameters, so the baseline is 4. The description does not add parameter information, but none is needed.
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 verb 'Summarize' and the resource 'what is due to review right now across all decks', specifying the output as per-deck and total due/new counts. This distinguishes it from sibling tools like review_deck or create_deck.
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 notes that the tool is pull-based and does not appear on its own, providing clear context for when to call it. However, it does not explicitly compare it to alternatives like review_deck or study, though the distinction is implied by the summary nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_cardEdit CardA
Edit a card's front and/or back in a deck, identified by its current front text, then re-render the deck. Keep edits within Memora's card-quality rules (atomic, concise 1-5 word answers, unambiguous).
| Name | Required | Description | Default |
|---|---|---|---|
| front | Yes | The card's CURRENT front text (identifies the card to edit). | |
| new_back | No | New back text. Omit to keep the current back. | |
| deck_name | Yes | Deck the card belongs to. | |
| new_front | No | New front text. Omit to keep the current front. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions re-rendering the deck and identification by current front text, but does not detail side effects, permissions, or error conditions.
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 concise sentences; front-loaded with the action and resource, followed by essential quality constraints. No wasted words.
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?
Despite having an output schema, the description lacks information on error handling, mutability, or prerequisites. For a tool with 4 parameters and required fields, it provides minimum viable completeness.
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 100%, so parameters are well-documented. Description adds value by clarifying that the 'front' parameter identifies the card and that edits apply to front and/or back, but does not substantially extend schema meaning.
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 that the tool edits a card's front and/or back, identified by its current front text, and distinguishes it from sibling tools like delete_card. It uses a specific verb-resource combination.
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 provides guidelines on card-quality rules but does not explicitly specify when to use this tool vs alternatives (e.g., create_deck, delete_card) or mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grade_cardGrade CardA
Record a spaced-repetition review result for a single card and update its FSRS schedule in data/decks.json. Called by the flip-card UI; not for direct model use.
| Name | Required | Description | Default |
|---|---|---|---|
| front | Yes | The card's front text (identifies the card). | |
| correct | Yes | Whether the user got the card right. | |
| deck_name | Yes | Deck the card belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses file update behavior but lacks details on idempotency, error handling, or what happens if the card doesn't exist.
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, front-loaded, with no unnecessary words. Every sentence adds value.
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?
Covers purpose, usage boundary, and key behavior. Lacks mention of preconditions like card existence, but given UI usage and simplicity, it is mostly complete.
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 100%, so baseline is 3. The description adds meaning by explaining that the result is a spaced-repetition review that updates the FSRS schedule, providing context beyond the schema descriptions.
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 action (record review result and update FSRS schedule), the resource (single card, data/decks.json), and distinguishes from sibling tools by specifying it's for a single card and called by the flip-card UI, not for direct model use.
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 it is called by the flip-card UI and not for direct model use, providing clear context. However, it does not explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_deckRename DeckA
Rename a deck, preserving its cards and schedules. Use "::" in the new name to move it under a category. Fails if a deck with the new name already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | Yes | New deck name ("::" nests it under a category). | |
| deck_name | Yes | Current deck name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses preservation of cards/schedules and failure condition, but does not mention other aspects like authentication, rate limits, or idempotency.
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 concise sentences: action+"preservation", formatting tip, failure condition. No fluff, front-loaded key information.
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 rename operation with a description and output schema, it is fairly complete. Could mention return value but not essential.
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 100% with clear descriptions. The description adds useful context about using '::' for category nesting, which goes beyond the schema.
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 it renames a deck, preserving cards and schedules. This is specific and distinct from siblings like create_deck or delete_deck.
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 provides clear context (rename operation) and mentions a failure condition (new name exists). However, it does not explicitly guide when to use this versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_deckReview DeckA
Return the flashcards of a single Memora deck and display them as an interactive flip-card review (due cards first). Available decks: "Geography::World Capitals", "Geography::Rivers", "Science::Solar System", "Language::Spanish Basics". Deck names use "::" to form a category tree; use the study tool to review a whole category. Decks are read live from data/decks.json.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_name | No | Deck to review. Omit or pass an unknown name to get the first available deck. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the data source ('read live from data/decks.json') and hints at read-only behavior by stating it 'returns' and 'displays' flashcards. No destructive actions are implied, adding needed transparency.
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 concise with 4 sentences, each adding necessary information: purpose, available decks, comparison to sibling, and data source. No redundant or vague language.
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 tool's simplicity (1 optional parameter, no nested objects, no annotations) and the existence of an output schema, the description covers all needed context: what it does, which decks exist, how to use the parameter, and where data comes from. No gaps.
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 100%, so baseline is 3. The description adds extra value by listing available deck names (making selection easier) and explaining the fallback behavior when the deck name is omitted or invalid, which the schema does not cover.
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 function: returning flashcards of a single deck and displaying them as an interactive review, prioritizing due cards. It lists specific available decks and distinguishes from the sibling 'study' tool by noting that 'study' reviews a whole category, while 'review_deck' is for a single deck.
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 explicitly mentions an alternative tool ('study' for whole categories) and explains default behavior when the deck name is omitted or unknown. It does not explicitly state when not to use this tool, but the guidance is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studyStudy CategoryA
Study every card under a category node of the deck tree. Deck names use "::" to nest (e.g. "LLM::Attention"); studying a node reviews all decks at or under that path, merged and shuffled into one session. Omit path to study all decks. Each card stays attributed to its source deck.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Category path, e.g. "LLM" or "LLM::Attention". Omit to study all decks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deck | Yes | |
| cards | Yes | |
| count | Yes | |
| dueCount | Yes | |
| newCount | Yes | |
| quizDecks | No | |
| availableDecks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses merging, shuffling, and attribution behavior. Could explicitly state non-destructive nature, but current detail is adequate.
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?
Four sentences, front-loaded main purpose, efficient. Minor redundancy (e.g., 'merged and shuffled' could be assumed from 'study'). Still well-structured.
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 single optional parameter, output schema exists (reducing need for return value description), and context signals show low complexity. Description covers behavior sufficiently for effective use.
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 100%, and description adds value by explaining path format ('::' nesting) and the effect of omission. Enhances schema meaning.
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 verb 'study' and resource 'cards under a category node', explains nesting with '::', and distinguishes from siblings like 'review_deck' by focusing on category vs. single deck.
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?
Describes when to omit path (study all decks) and that studying a node covers all subdecks. Does not explicitly mention when not to use vs. specific sibling tools, but context is clear enough.
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.
10 tool updates
v0.1.1- First observed
create_deck - First observed
create_quiz - First observed
delete_card - First observed
delete_deck - First observed
due_today - First observed
edit_card - First observed
grade_card - First observed
rename_deck - First observed
review_deck - First observed
study
TDQS
Scored across 10 tools
Each tool targets a distinct action: deck/quiz creation, card/deck deletion, editing, renaming, reviewing single decks or categories, grading, and summary. No two tools have overlapping purposes; descriptions clearly differentiate them.
Most tools follow a verb_noun pattern (create_deck, delete_card, etc.), but 'due_today' is a noun phrase and 'study' is a bare verb, breaking the consistency. This mix could confuse an agent predicting tool names.
10 tools is well-scoped for a flashcard/quiz application. Each tool serves a necessary function in the creation, management, review, and scheduling lifecycle without being excessive or sparse.
The tool set covers CRUD operations, review, and scheduling. However, there is no tool to list all decks or view cards without triggering a review session, which is a minor gap that could hinder agent workflows.
Maintenance
Related MCP Connectors
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.
- EngrAmoOAuthapp.engramo
Create and study EngrAmo spaced-repetition flashcards from your AI client.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that integrates Claude with Anki flashcards, allowing users to review due cards and create new flashcards directly through conversation.1413MIT
- AlicenseAqualityDmaintenanceIntegrates EduChain's educational content generation capabilities with Claude Desktop, enabling creation of multiple-choice questions, comprehensive lesson plans, and flashcards for any educational topic.31MIT
- AlicenseNot gradedqualityNot gradedmaintenanceConnects Claude to Anki flashcard software via AnkiConnect, enabling users to review due cards, create flashcards, and manage spaced repetition learning through natural language conversations.MIT
- AlicenseCqualityBmaintenanceFlashcard AI - MCP server providing AI-powered tools and automation by MEOK AI Labs46 npm90 PyPIMIT