deckbase

Turn any study material into flashcards by chatting with AI.

Community: Submitted by a user or imported; check the owner before granting accessOnlineAPI key requiredGlobalFreeRead-only

What it can do

  • List Docs: List Markdown files in docs/public/. Only docs in that folder are exposed. Use list_docs to see available filenames, then read_doc to fetch one.
  • Read Doc: Read a doc from docs/public/ by path. Only docs in that folder are served. Use list_docs first to see available filenames (e.g. MCP.md).
  • List Template Block Types: List all Deckbase template block types (keys, numeric ids, labels, category). Use this so the user can choose multiple block types in order; then pass that list as block_typ

What data it sees

Do you need an account

An API key from the service settings is required

Turn any study material into flashcards by chatting with AI. Paste notes, URLs, or upload PDFs — Deckbase MCP generates question-and-answer flashcards with spaced repetition scheduling. Full Anki import/export support: migrate your existing decks or export to Anki anytime. Syncs directly to your Deckbase library.

Server tool list (35)

Raw names from tools/list. Only developers need these.

list_docsList Markdown files in docs/public/. Only docs in that folder are exposed. Use list_docs to see available filenames, then read_doc to fetch one.
read_docRead a doc from docs/public/ by path. Only docs in that folder are served. Use list_docs first to see available filenames (e.g. MCP.md).
list_template_block_typesList all Deckbase template block types (keys, numeric ids, labels, category). Use this so the user can choose multiple block types in order; then pass that list as block_types to create_template. **Quiz blocks:** category `quiz` — keys `quizMultiSelect` (8), `quizSingleSelect` (9), `quizTextAnswer` (10). Use these when the user wants multiple-choice or typed-answer quizzes, not only `header1`+`hiddenText`. For JSON shapes and required `configJson` per type, call **list_block_schemas** before create_template. Works in local stdio and hosted MCP.
list_block_schemasReturn JSON structure for each block type: typical blocksSnapshot entry, matching value entry, and **configJson** fields. **Quiz types (`quizSingleSelect`, `quizMultiSelect`, `quizTextAnswer`) require a correct `configJson` on the block** (options, correct answer(s), etc.) — read this response before create_template/create_card with quiz blocks. Same for image/audio. Use when building or parsing cards. Works in local stdio and hosted MCP. Real examples: export_deck.
list_elevenlabs_voicesList ElevenLabs TTS voice ids (group, label, id, gender, language) from the Deckbase curated catalog for generate_audio_for_card voice_id and template audio block defaultVoiceId. Optional filters: language (ISO 639 code), gender (female|male), search (substring on label/group/id). Response includes voices (filtered), totalVoicesInCatalog, filtersApplied, languageOptions (code+name for all languages), defaultVoiceIdFromEnv, serverFallbackVoiceId, source, optional note, docsUrl.
list_ai_image_modelsList allowed AI text-to-image models for generate_image_for_card model_id (id, label, credits) plus defaults. Use this to ask the user to choose a model before generating images.
list_decksList the user's flashcard decks (deckId, title, description, defaultTemplateId, iconEmoji). iconEmoji is optional Unicode emoji for deck list/header; omit/null when unset. Requires hosted MCP with API key. Use with list_templates before create_card.
list_templatesList the user's card templates (templateId, name, description). Requires hosted MCP with API key. Use when create_card needs an explicit templateId (deck has no defaultTemplateId). If the list is empty, use create_template first. After the user picks a template, call get_template_schema for exact blockIds and JSON shapes.
get_template_schemaAfter the user selects a template, returns exact JSON for that template: each blockId, type, label, configJson, category, plus `side` per block (**"front"** = shown first in study; **"back"** = after the learner flips the card), valuesExample, and create_card hints. **Back-side text:** fill `block_text` in create_card with those blockIds (same as front blocks). **If any block has type quiz*, use the returned configJson and hints so answers/options match the template.** Requires hosted MCP. Pass templateId from list_templates, or deckId only to use the deck’s default template.
create_deckCreate a new flashcard deck for the user. Requires hosted MCP with API key. Returns deckId and icon fields for create_card. **Deck icon:** There is no Deckbase emoji list to fetch—use any standard Unicode emoji (one grapheme). Unless the user asked for no icon or a specific emoji, pass `icon_emoji` (or `iconEmoji`) with one emoji that fits the deck title and optional description. Omit only if the user wants no icon or the topic is too vague.
update_deckUpdate an existing deck’s title, description, default template id, and/or deck icon emoji. Requires hosted MCP with API key. Pass only fields to change. To clear the deck icon, pass icon_emoji or iconEmoji as empty string.
update_cardUpdate an existing card’s content. Requires hosted MCP with API key. **Merge:** `front` / `block_text` (only listed blockIds change). **Preview lines:** optional **`main_block_id`** / **`sub_block_id`** (which blocks drive deck list + study preview; ids must exist on this card’s layout). **Append new blocks:** `append_block_types` or `append_blocks`. **Move one block:** `move_block_id` + **insert_** options (same as append; omit = end). **Face:** optional **`block_side`** `front`|`back` on the moved block after placement; **`keep_position`:** `true` with **`block_side`** only flips front/back without reordering (no insert_*). New blockIds from append are **`appendedBlockIds`**. Audio: `voice_id` or `audio_language`+`audio_gender`. **Do not mix** `move_block_id` or append with `values` / `blocks_snapshot` / `remove_block_ids`. **Field clearing:** **`remove_card_fields`**. **Replace (advanced):** full `values` / `blocks_snapshot` without append/move.
bulk_update_cards**Merge-only** bulk updates (max 50 cards). **Does not add new blocks** — use **bulk_append_blocks** first. **Does not clear fields** — **bulk_remove_card_fields**. **Modes:** (1) **Same patch for every card:** `card_ids` + `front` and/or `block_text` and/or **`main_block_id` / `sub_block_id`** (preview/main sub fields for list & study). (2) **Different text per card:** `card_ids` + `texts` + `block_id` or `block_ids`, or **`block_label`**. (3) Legacy **per_card** rows. For label-based main/sub on many cards use **bulk_set_main_sub_blocks**.
bulk_append_blocksInsert **new empty blocks** on many cards (max 50). **Layout-only** — no `front` / `block_text` (use **bulk_update_cards** after). Same block definitions and **insert position** on every card: `append_block_types` or `append_blocks`; **insert_before_block_id**, **insert_after_block_id**, or **insert_index** (0 = before first block; omit = end). Audio blocks: `voice_id` or `audio_language`+`audio_gender`. Response includes **appendedBlockIds** for a follow-up merge. Requires top-level **card_ids** (no per_card).
bulk_move_blockMove **one existing block** on **many** cards (max 50) or flip its **front/back** face. **Layout-only** — no `front` / `block_text`. Optional **`block_side`** `front`|`back` (applied after move). **`keep_position`:** `true` with **`block_side`** flips face only (no `insert_*`). Same **`insert_*`** as **update_card** when reordering. Omit all `insert_*` to move to end. Requires **card_ids** + **move_block_id**.
normalize_cards_to_templateRewrite each card’s layout + values to match the **current template** (block ids, order, side). Migrates content by label+type. Use when template and cards drifted. Optional **card_ids** to subset; **dry_run** to preview without writes. Hosted MCP.
validate_deck_layoutNon-destructive report: missing/extra blocks vs template, side/order issues, duplicate label groups across cards. Hosted MCP.
bulk_set_block_sideSet **front**/**back** for one **move_block_id** on many **card_ids** (explicit; same as bulk_move_block + keep_position). Optional **dry_run**. Hosted MCP.
bulk_set_main_sub_blocksSet **main_block_id** and/or **sub_block_id** (deck preview / study sub line) on many cards. **Ids:** pass **main_block_id** / **sub_block_id** (same for every card; null clears). **Labels:** pass **main_block_label** / **sub_block_label** with optional **main_semantic_key** / **sub_semantic_key** to resolve each field per card (same pattern as bulk_update_cards by label). Optional **dry_run**. Hosted MCP.
copy_template_blocks_to_cardsAppend **copies** of template blocks (new UUIDs per card) via **template_block_ids** or **block_labels**. Supports **insert_***, **append_block_side**, **dry_run**. Hosted MCP.
remove_card_fieldsClear content for specific blocks on **one** card (text empty; quiz selections cleared; image/audio media cleared). **Separate from update_card** — use this only when the user wants to remove field content, not merge new text. **DESTRUCTIVE** to those fields. Requires hosted MCP. **user_confirmed** must be true after the user explicitly agrees to clear these blockIds.
bulk_remove_card_fieldsClear the **same** blockIds on **many** cards in one deck. **Separate from bulk_update_cards** — merge and field removal are not mixed. **DESTRUCTIVE** to content in those blocks. Max 50 cards per request. **user_confirmed** must be true after the user explicitly agrees.
delete_cardSoft-delete one flashcard (sets is_deleted; same as app trash). **DESTRUCTIVE.** Requires hosted MCP. **You MUST ask the human for explicit confirmation before calling.** The server refuses unless `user_confirmed` is exactly true — only set it after the user clearly agreed to delete this card (e.g. they answered yes to a confirmation prompt). Never infer consent.
delete_cardsSoft-delete multiple cards in one deck (same rules as delete_card). **Ask the user to confirm the exact card IDs before calling.** Refuses unless user_confirmed is true. Max 50 cards per request. Response lists deleted ids and per-id errors if any fail.
create_cardCreate a new card from a template’s block layout. Requires hosted MCP with API key. Required: deckId. If templateId is omitted, uses the deck’s default template (defaultTemplateId from list_decks); if the deck has none, pass templateId from list_templates. If no templates exist, create_template first. **Front vs back:** Templates can place blocks on the front (shown first) and/or back (after flip). `front` fills only the template’s **main** block (see get_template_schema `mainBlockId`). **Put answer or back-face text in `block_text`** keyed by each block’s `blockId`, including blocks whose `side` is `"back"`. Call get_template_schema for blockIds and `side`. **Templates with quiz blocks:** call get_template_schema first; fill values per block (quiz options/answers per configJson). When generate_audio is true (default) and the template has an audio block, ask the user for voice settings, then pass voice_id from list_elevenlabs_voices OR pass audio_language (ISO 639) and audio_gender (female|male). Set generate_audio: false to skip TTS. Validation: block_text keys must be template blockIds; required text blocks must be non-empty; if the template has any text blocks, at least one must have non-empty content (via front and/or block_text).
create_cardsBulk create cards in one deck using the same template resolution and validation as create_card (deck default or explicit templateId). Requires hosted MCP. Same front/back rules as create_card: use block_text per card for back-side blockIds from get_template_schema. For templates with quiz blocks, follow get_template_schema / list_block_schemas for each card’s values shape. Pass cards: array of objects, each with optional front, block_text, generate_audio, voice_id, audio_language, audio_gender (per-card). Optional top-level voice_id, audio_language, audio_gender, and generate_audio apply to the whole batch when not set per card. Max 50 cards per request. If one card fails, earlier cards may already exist in Firestore.
generate_audio_for_cardGenerate ElevenLabs TTS audio and attach it to an existing card’s audio block (updates values.mediaIds). Requires hosted MCP with API key. Required: deckId, cardId. Ask the user for voice settings, then pass voice_id from list_elevenlabs_voices OR pass audio_language (ISO 639) and audio_gender (female|male). If the card has multiple audio blocks, pass block_id. Optional text overrides the spoken script; otherwise source text is resolved like create_card. If the block already has media, pass replace_existing: true to regenerate. Same TTS/storage/subscription limits as create_card.
list_image_subject_promptsList subject starter presets for AI image generation (unified_id, label, prompt, tags) plus the user’s saved subjects from Firestore. Same sources as the web wizard. Subscribers only in production. Pass unified_id values as library_entry_ids on generate_image_for_card (with list_image_style_prompts unified ids: subject:… / style:…).
list_image_style_promptsList curated style presets for AI image generation (id, label, description, snippet, tags). Same catalog as the web app. Subscribers only. Optional tag (kebab-case, e.g. vocabulary, anime, physics) filters presets. Use unified_id style:… with generate_image_for_card library_entry_ids, or style_prompt_id for legacy single-snippet merge.
generate_image_for_cardGenerate an AI image (fal.ai) and attach it to an existing card’s image block — **web wizard parity**: optional source_block_ids (default = image block defaultSourceBlockId + card mainBlockId like the dashboard), library_entry_ids (unified subject:… / style:… from list_image_subject_prompts + list_image_style_prompts), final_prompt (review string; overrides merge), legacy prompt + style_prompt_id (simple T2I), reference_media_id / reference_image_url / reference_image_data_url (Nano Banana edit; credits use edit model), media_tags, merge_library_tag_defaults. Requires deckId, cardId, and at least one of: prompt, final_prompt, source_block_ids, or library_entry_ids. Choose model_id from list_ai_image_models. FAL_KEY + subscription + image credits.
export_deckExport a deck (metadata + cards). Requires hosted MCP with API key. **file_format** (default json): json = full payload in the tool response; csv | xlsx | apkg = small marker JSON for the Deckbase assistant UI to download that file type (ask the user which format they want if unclear). For csv/xlsx/apkg the server uses export_type full internally. Excel and Anki may require Pro/VIP in production (same as dashboard). Large decks may be truncated; check truncated.
export_cardsExport **only** the given cards in a deck (same per-card JSON shape as **export_deck**, plus `notFound` / `skippedWrongDeck` for bad ids). Use when the user wants a subset file or backup. **file_format** works like **export_deck** (json default; csv/xlsx/apkg only in the web AI assistant). Requires hosted MCP with API key.
list_cardsList cards in a deck with **values** and (when export_type is full) **blocksSnapshot** per card — same per-card shape as **export_deck**, without repeating full deck metadata. Use for read/edit flows when you only need card payloads. Requires hosted MCP with API key. Default export_type is full.
create_templateCreate a flashcard template (block layout for new cards). Requires hosted MCP with API key. Call **list_template_block_types** first so the user can pick block types; pass the ordered selection as block_types. **When the user wants quizzes (multiple choice, single choice, or typed answer):** include `quizMultiSelect`, `quizSingleSelect`, or `quizTextAnswer` (or numeric ids 8–10) in block_types, and call **list_block_schemas** first so each quiz block gets a valid **configJson** (questions, choices, correct answer(s)). Do not default to only header1+hiddenText if the user asked for quiz/MCQ behavior. **If block_types or blocks includes audio (type audio / 7): you MUST NOT call this tool until the user has chosen a default TTS voice.** Ask: which language accent and gender (or exact voice from list_elevenlabs_voices), then pass voice_id OR audio_language + audio_gender (same rules as create_card). Do not silently omit voice when the layout includes audio. Alternatively pass full blocks with configJson.defaultVoiceId on each audio block, or omit both block_types and blocks for default Question + Answer only.
update_templateUpdate an existing template’s name, description, block layout (blocks or block_types), main/sub block ids, and/or default voice for audio blocks. Set each block’s `side` to "front" or "back". Requires hosted MCP. When adding or changing **quiz** blocks, use **list_block_schemas** for configJson shapes (same as create_template). Omit blocks and block_types to keep layout; version increments when anything changes. If the layout includes audio without defaultVoiceId, ask the user for voice settings first, then pass voice_id or audio_language + audio_gender (same as create_template).