deckbase
Turn any study material into flashcards by chatting with AI.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетНужен API-ключГлобальныйБесплатноТолько чтение
Что умеет
- 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
Какие данные видит
Нужен ли аккаунт
Нужен API-ключ из настроек сервиса
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.
Список инструментов сервера (35)
Технические названия из tools/list. Нужны только разработчикам.
| 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_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_schemas | Return 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_voices | List 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_models | List 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_decks | List 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_templates | List 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_schema | After 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_deck | Create 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_deck | Update 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_card | Update 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_blocks | Insert **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_block | Move **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_template | Rewrite 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_layout | Non-destructive report: missing/extra blocks vs template, side/order issues, duplicate label groups across cards. Hosted MCP. |
| bulk_set_block_side | Set **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_blocks | Set **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_cards | Append **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_fields | Clear 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_fields | Clear 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_card | Soft-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_cards | Soft-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_card | Create 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_cards | Bulk 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_card | Generate 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_prompts | List 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_prompts | List 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_card | Generate 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_deck | Export 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_cards | Export **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_cards | List 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_template | Create 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_template | Update 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). |