# io.github.deckbase/deckbase-mcp-server (npm · deckbase-mcp-server)

MCP server for Deckbase - exposes docs, template blocks, and project context

- Trust score: 55/100 (low)
- Change this week: −12
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `deckbase-mcp-server`: 55/100 (this document), [markdown](https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server.md), [page](https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `deckbase-mcp-server`
- Version: `1.0.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 88/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 1 of 1 dependencies flagged as unhealthy (1 deprecated).
- **Provenance & Transparency**: 6/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 98 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2881 tokens (~80/item across 36 items; 35 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 70/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 11% of tool parameters carry a description.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add deckbase-deckbase-mcp-server -- npx -y deckbase-mcp-server
```

### Codex

```bash
codex mcp add deckbase-deckbase-mcp-server -- npx -y deckbase-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "deckbase-deckbase-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "deckbase-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add deckbase-deckbase-mcp-server --command npx --arg -y --arg deckbase-mcp-server
```

### Hermes

```yaml
mcp_servers:
  deckbase-deckbase-mcp-server:
    command: "npx"
    args: ["-y", "deckbase-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "deckbase-deckbase-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "deckbase-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 55, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 54, +14)

- [security improvement] Malware scan: unverified → pass
- [functional regression] Dependency health: 1.00 → 0.00
- [functional improvement] Stability: unverified → 0.20

### 2026-08-01 (score 40, −9)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 49, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 67, +30)

- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: good
- [functional] First check of Schema quality: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 11

### 2026-07-26 (score 37)

First indexed and scored.

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (35)

### `list_docs` (~21 tokens)

List all Markdown documentation files in the Deckbase docs/ folder.

### `read_doc` (~55 tokens)

Read a Deckbase doc by path (e.g. STATE_BASED_SYNC_MOBILE.md or docs/FIRESTORE_FLASHCARDS_MIGRATION.md).

Input parameters:

- `path` (string, required): Doc path or deckbase://docs/<filename>

### `list_template_block_types` (~37 tokens)

List all template block types for create_template. Show the user the list so they can pick multiple in order, then pass block_types.

### `list_block_schemas` (~30 tokens)

JSON shapes for each block type (block definition + value + configJson). For MCP/mobile clients.

### `list_elevenlabs_voices` (~117 tokens)

ElevenLabs TTS voice ids from the Deckbase curated catalog (multilingual; docs/api/ELEVENLABS_VOICES.md). Optional: language (ISO code), gender (female|male), search (substring). Returns languageOptions, filtersApplied, totalVoicesInCatalog.

Input parameters:

- `gender` (string)
- `language` (string): Optional ISO 639 code (e.g. en, uk, ja).
- `search` (string): Optional filter on label, group, id, or language code.

### `list_ai_image_models` (~34 tokens)

List allowed AI text-to-image models for generate_image_for_card model_id (id, label, credits) plus defaults.

### `list_decks` (~44 tokens)

List the user's flashcard decks (deckId, title, description, defaultTemplateId, iconEmoji). iconEmoji is optional deck icon. Requires hosted MCP with API key.

### `list_templates` (~25 tokens)

List card templates (templateId for create_card). Requires hosted MCP with API key.

### `get_template_schema` (~66 tokens)

Template layout: blockIds, side front|back, configJson, create_card hints. Back content → create_card block_text with those blockIds. Hosted MCP. Args: templateId or deckId.

Input parameters:

- `deckId` (string)
- `templateId` (string)

### `create_deck` (~102 tokens)

Create a new flashcard deck. No emoji catalog API—use standard Unicode. Pass icon_emoji/iconEmoji: one emoji matching title/description unless user opts out (hosted MCP only).

Input parameters:

- `description` (string)
- `iconEmoji` (string): Alias for icon_emoji
- `icon_emoji` (string): One emoji; infer from title/description if user did not specify (alias: iconEmoji)
- `title` (string, required)

### `update_deck` (~103 tokens)

Update deck title, description, default template, icon. Pass icon_emoji or iconEmoji as empty string to clear. Requires hosted MCP with API key.

Input parameters:

- `deckId` (string, required)
- `default_template_id` (string)
- `description` (string)
- `iconEmoji` (string): Alias for icon_emoji
- `icon_emoji` (string): Set/clear deck icon (alias: iconEmoji)
- `title` (string)

### `create_card` (~126 tokens)

Create a card from a template. front = main block only; block_text = all blockIds including side back (see get_template_schema). Audio: voice_id or audio_language+audio_gender. Hosted MCP.

Input parameters:

- `audio_gender` (string)
- `audio_language` (string)
- `block_text` (object): blockId→text, including back-face blocks
- `deckId` (string, required)
- `front` (string): Main block text only
- `generate_audio` (boolean)
- `templateId` (string)
- `voice_id` (string)

### `update_card` (~166 tokens)

Merge, append_block_types/blocks, or replace values/blocks_snapshot. Hosted MCP.

Input parameters:

- `append_block_types` (array)
- `append_blocks` (array)
- `audio_gender` (string)
- `audio_language` (string)
- `block_side` (string)
- `block_text` (object)
- `blocks_snapshot` (array)
- `cardId` (string, required)
- `deckId` (string, required)
- `front` (string)
- `insert_after_block_id` (string)
- `insert_before_block_id` (string)
- `insert_index` (integer)
- `keep_position` (boolean)
- `move_block_id` (string)
- `values` (array)
- `voice_id` (string)

### `bulk_update_cards` (~100 tokens)

Bulk merge: same patch (card_ids+front/block_text), or parallel card_ids+texts+block_id or block_ids. Hosted MCP.

Input parameters:

- `block_id` (string)
- `block_ids` (array)
- `block_text` (object)
- `card_ids` (array)
- `deckId` (string, required)
- `front` (string)
- `per_card` (array)
- `texts` (array)

### `bulk_append_blocks` (~137 tokens)

Insert same new empty blocks on many cards; insert_before/after/index + voice for audio. Max 50. Hosted MCP.

Input parameters:

- `append_block_side` (string)
- `append_block_types` (array)
- `append_blocks` (array)
- `audio_gender` (string)
- `audio_language` (string)
- `card_ids` (array, required)
- `deckId` (string, required)
- `dry_run` (boolean)
- `insert_after_block_id` (string)
- `insert_before_block_id` (string)
- `insert_index` (integer)
- `voice_id` (string)

### `bulk_move_block` (~106 tokens)

Move or flip front/back for one block on many cards; block_side, keep_position, insert_*. Max 50. Hosted MCP.

Input parameters:

- `block_side` (string)
- `card_ids` (array, required)
- `deckId` (string, required)
- `insert_after_block_id` (string)
- `insert_before_block_id` (string)
- `insert_index` (integer)
- `keep_position` (boolean)
- `move_block_id` (string)

### `normalize_cards_to_template` (~57 tokens)

Align all cards to current template layout; optional dry_run. Hosted MCP.

Input parameters:

- `card_ids` (array)
- `deckId` (string, required)
- `dry_run` (boolean)
- `template_id` (string)

### `validate_deck_layout` (~35 tokens)

Report template vs card drift. Hosted MCP.

Input parameters:

- `deckId` (string, required)
- `template_id` (string)

### `bulk_set_block_side` (~64 tokens)

Set front/back for one block on many cards. Hosted MCP.

Input parameters:

- `block_side` (string)
- `card_ids` (array, required)
- `deckId` (string, required)
- `dry_run` (boolean)
- `move_block_id` (string)

### `bulk_set_main_sub_blocks` (~110 tokens)

Set main_block_id / sub_block_id on many cards (ids or labels). Hosted MCP.

Input parameters:

- `card_ids` (array, required)
- `deckId` (string, required)
- `dry_run` (boolean)
- `main_block_id` (string)
- `main_block_label` (string)
- `main_semantic_key` (string)
- `sub_block_id` (string)
- `sub_block_label` (string)
- `sub_semantic_key` (string)

### `copy_template_blocks_to_cards` (~70 tokens)

Append template block copies to cards. Hosted MCP.

Input parameters:

- `block_labels` (array)
- `card_ids` (array, required)
- `deckId` (string, required)
- `dry_run` (boolean)
- `template_block_ids` (array)
- `template_id` (string)

### `remove_card_fields` (~72 tokens)

Clear block content on one card; user_confirmed required. Separate from update_card. Hosted MCP.

Input parameters:

- `cardId` (string, required)
- `deckId` (string, required)
- `removeBlockIds` (array)
- `remove_block_ids` (array)
- `user_confirmed` (boolean, required)

### `bulk_remove_card_fields` (~69 tokens)

Clear same blockIds on many cards; user_confirmed required. Hosted MCP.

Input parameters:

- `card_ids` (array, required)
- `deckId` (string, required)
- `removeBlockIds` (array)
- `remove_block_ids` (array)
- `user_confirmed` (boolean, required)

### `delete_card` (~68 tokens)

Soft-delete one card. DESTRUCTIVE. Hosted MCP only. Ask the user first; pass user_confirmed: true only after explicit consent.

Input parameters:

- `cardId` (string, required)
- `deckId` (string, required)
- `user_confirmed` (boolean, required): Must be true after user confirms

### `delete_cards` (~57 tokens)

Soft-delete multiple cards in one deck. Same consent as delete_card. Max 50 per request. Hosted MCP only.

Input parameters:

- `card_ids` (array, required)
- `deckId` (string, required)
- `user_confirmed` (boolean, required)

### `create_cards` (~95 tokens)

Bulk create cards; per-card front + block_text (back blocks same as create_card). Voice defaults + per-card overrides. Max 50. Hosted MCP.

Input parameters:

- `audio_gender` (string)
- `audio_language` (string)
- `cards` (array, required)
- `deckId` (string, required)
- `generate_audio` (boolean)
- `templateId` (string)
- `voice_id` (string)

### `generate_audio_for_card` (~136 tokens)

ElevenLabs TTS: add or replace audio on an existing card’s audio block. Required: deckId, cardId. Pass voice_id OR audio_language + audio_gender (ask user first). Optional block_id, text, replace_existing. Requires hosted MCP with API key.

Input parameters:

- `audio_gender` (string)
- `audio_language` (string)
- `block_id` (string)
- `cardId` (string, required)
- `deckId` (string, required)
- `generate_audio` (boolean)
- `replace_existing` (boolean)
- `text` (string)
- `voice_id` (string)

### `list_image_subject_prompts` (~38 tokens)

Subject starter presets + user-saved subjects (unified_id for generate_image_for_card library_entry_ids). Subscribers only on hosted MCP.

### `list_image_style_prompts` (~59 tokens)

Curated AI image style presets (tags, snippets). Subscribers only on hosted MCP. Optional tag filter. Use style:{id} as library_entry_ids or style_prompt_id.

Input parameters:

- `tag` (string): Optional kebab-case tag filter

### `generate_image_for_card` (~183 tokens)

fal.ai image on card image block (web wizard parity on hosted MCP + FAL_KEY). deckId + cardId required; prompt OR wizard fields; choose model_id via list_ai_image_models. See hosted MCP docs.

Input parameters:

- `block_id` (string)
- `cardId` (string, required)
- `deckId` (string, required)
- `final_prompt` (string)
- `library_entry_ids` (array)
- `media_tags` (array)
- `merge_library_tag_defaults` (boolean)
- `model_id` (string)
- `prompt` (string)
- `reference_image_data_url` (string)
- `reference_image_url` (string)
- `reference_media_id` (string)
- `replace_existing` (boolean)
- `source_block_ids` (array)
- `style_prompt_id` (string)

### `export_deck` (~81 tokens)

Export a deck as JSON (metadata and cards). export_type: full (default) or values_only. Requires hosted MCP with API key.

Input parameters:

- `deckId` (string, required)
- `export_type` (string): Optional: "full" or "values_only"
- `max_cards` (number): Optional; default 2000, max 5000

### `export_cards` (~75 tokens)

Export specific cards by id in one deck (subset). Pass card_ids array (max 200). Same export_type as export_deck. Requires hosted MCP with API key.

Input parameters:

- `cardIds` (array)
- `card_ids` (array)
- `deckId` (string, required)
- `export_type` (string)

### `list_cards` (~89 tokens)

List cards with values and (default) blocksSnapshot per card; slimmer than export_deck. export_type: full (default) or values_only. Requires hosted MCP with API key.

Input parameters:

- `deckId` (string, required)
- `export_type` (string): Optional: "full" or "values_only"
- `max_cards` (number): Optional; default 2000, max 5000

### `create_template` (~144 tokens)

Create a flashcard template (block layout). If layout includes audio: ask the user for voice first, then pass voice_id OR audio_language + audio_gender (same as create_card). Requires hosted MCP with API key.

Input parameters:

- `audio_gender` (string): female | male with audio_language
- `audio_language` (string): ISO 639 with audio_gender when voice_id omitted
- `block_types` (array): Ordered type keys or numeric ids; use list_template_block_types first
- `blocks` (array)
- `description` (string)
- `name` (string, required)
- `voice_id` (string): Curated ElevenLabs voice id when template has audio

### `update_template` (~98 tokens)

Update template metadata and/or block layout. Same voice_id / audio_language + audio_gender rules as create_template. Requires hosted MCP with API key.

Input parameters:

- `audio_gender` (string)
- `audio_language` (string)
- `block_types` (array)
- `blocks` (array)
- `description` (string)
- `name` (string)
- `templateId` (string, required)
- `voice_id` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server#diagnostics

## Score history

- 2026-08-03: 55
- 2026-08-02: 54
- 2026-08-01: 40
- 2026-07-31: 49
- 2026-07-29: 67
- 2026-07-28: 67
- 2026-07-27: 67
- 2026-07-26: 37

## Links

- npm package: https://www.npmjs.com/package/deckbase-mcp-server
- Socket report: https://socket.dev/npm/package/deckbase-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/deckbase-deckbase-mcp-server/deckbase-mcp-server
