# io.github.arielbk/anki-mcp (npm · @arielbk/anki-mcp)

MCP server for integrating with Anki flashcards through conversational AI

- Trust score: 59/100 (low)
- Change this week: +47
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-08

## Components

- npm · `@arielbk/anki-mcp`: 59/100 (this document), [markdown](https://verifymcp.io/servers/arielbk-anki-mcp/arielbk-anki-mcp.md), [page](https://verifymcp.io/servers/arielbk-anki-mcp/arielbk-anki-mcp)

## Channel facts

- Registry: `npm`
- Package: `@arielbk/anki-mcp`
- Version: `0.3.2`
- 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-08.

- **Supply Chain Security**: 98/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.
  - 33 of 109 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 76 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 27/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (poor).
  - Tool/resource definitions use about 2597 tokens (~26/item across 98 items; 91 tools + 7 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 43/100
  - Stability observed for 13 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 33/100
  - 0% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add arielbk-anki-mcp -- npx -y @arielbk/anki-mcp
```

### Codex

```bash
codex mcp add arielbk-anki-mcp -- npx -y @arielbk/anki-mcp
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add arielbk-anki-mcp --command npx --arg -y --arg @arielbk/anki-mcp
```

### Hermes

```yaml
mcp_servers:
  arielbk-anki-mcp:
    command: "npx"
    args: ["-y", "@arielbk/anki-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "arielbk-anki-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@arielbk/anki-mcp"
      ]
    }
  }
}
```

## 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-08 (score 59, +1)

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

### 2026-08-07 (score 58, +4)

- [security improvement] Known CVEs: partial → pass
- [functional] Dependency health: partial → 0.86

### 2026-08-05 (score 54, +2)

- [security improvement] CVE-2026-69207 no longer affects this package
- [security improvement] Known CVEs: fail → partial

### 2026-08-04 (score 52, +3)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail
- [functional improvement] Stability: unverified → 0.30

### 2026-08-02 (score 49, +37)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → poor
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 12, −4)

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

### 2026-07-30 (score 16, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 34)

First indexed and scored.

## MCP tools (91)

### `create_deck` (~20 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to create

### `delete_decks` (~38 tokens)

Input parameters:

- `deckNames` (array, required): Array of deck names to delete
- `deleteCards` (boolean): Whether to delete the cards in the decks as well

### `change_deck` (~37 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to move
- `targetDeck` (string, required): Name of the target deck to move cards to

### `clone_deck_config` (~39 tokens)

Input parameters:

- `newConfigName` (string, required): Name for the new cloned configuration
- `sourceConfigId` (number, required): ID of the deck configuration to clone from

### `remove_deck_config` (~22 tokens)

Input parameters:

- `configId` (number, required): ID of the deck configuration to remove

### `save_deck_config` (~20 tokens)

Input parameters:

- `config` (object, required): Complete deck configuration object to save

### `set_deck_config` (~38 tokens)

Input parameters:

- `configId` (number, required): ID of the configuration to apply
- `deckNames` (array, required): Array of deck names to apply the configuration to

### `answer_cards` (~16 tokens)

Input parameters:

- `answers` (array, required): Array of card answers

### `find_cards` (~19 tokens)

Input parameters:

- `query` (string, required): Anki search query to find cards

### `get_cards_info` (~22 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get information for

### `check_cards_due` (~20 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to check

### `check_cards_suspended` (~21 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to check

### `suspend_cards` (~19 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to suspend

### `unsuspend_cards` (~21 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to unsuspend

### `check_card_suspended` (~19 tokens)

Input parameters:

- `cardId` (number, required): Card ID to check

### `forget_cards` (~19 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to forget

### `relearn_cards` (~21 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to relearn

### `set_cards_due_date` (~43 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to set due date for
- `days` (string, required): Number of days from today (can be negative for past dates)

### `get_cards_ease_factors` (~26 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get ease factors for

### `set_cards_ease_factors` (~46 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to set ease factors for
- `easeFactors` (array, required): Array of ease factors (must match the length of cardIds)

### `get_cards_intervals` (~45 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get intervals for
- `complete` (boolean): If true, returns all intervals; if false, returns only the most recent

### `get_cards_mod_time` (~24 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get modification time for

### `cards_to_notes` (~23 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get note IDs for

### `set_card_specific_values` (~52 tokens)

Input parameters:

- `cardId` (number, required): Card ID to modify
- `keys` (array, required): Array of card property keys to modify
- `newValues` (array, required): Array of new values (must match the length of keys)

### `add_note` (~79 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to add the note to
- `fields` (object, required): Object with field names as keys and field content as values
- `modelName` (string, required): Name of the note model/type (e.g., "Basic", "Cloze")
- `tags` (array): Array of tags to add to the note

### `add_notes` (~17 tokens)

Input parameters:

- `notes` (array, required): Array of notes to add

### `update_note` (~53 tokens)

Input parameters:

- `fields` (object): Object with field names as keys and new field content as values
- `noteId` (number, required): ID of the note to update
- `tags` (array): Array of tags to set for the note

### `delete_notes` (~19 tokens)

Input parameters:

- `noteIds` (array, required): Array of note IDs to delete

### `add_tags_to_notes` (~37 tokens)

Input parameters:

- `noteIds` (array, required): Array of note IDs to add tags to
- `tags` (string, required): Space-separated string of tags to add

### `remove_tags_from_notes` (~37 tokens)

Input parameters:

- `noteIds` (array, required): Array of note IDs to remove tags from
- `tags` (string, required): Space-separated string of tags to remove

### `replace_tags_in_notes` (~48 tokens)

Input parameters:

- `noteIds` (array, required): Array of note IDs to replace tags in
- `replaceWithTag` (string, required): Tag to replace with
- `tagToReplace` (string, required): Tag to replace

### `find_notes` (~49 tokens)

Input parameters:

- `includeInfo` (boolean): Whether to include detailed note information
- `limit` (number): Maximum number of notes to return detailed info for
- `query` (string, required): Anki search query to find notes

### `can_add_notes` (~18 tokens)

Input parameters:

- `notes` (array, required): Array of notes to validate

### `clear_unused_tags` (~6 tokens)

### `remove_empty_notes` (~6 tokens)

### `create_model` (~82 tokens)

Input parameters:

- `cardTemplates` (array, required): Array of card templates with Front and Back content
- `css` (string): Custom CSS styling for the model
- `inOrderFields` (array, required): Array of field names in order
- `isCloze` (boolean): Whether the model should be a cloze type
- `modelName` (string, required): Name of the model to create

### `find_and_replace_in_models` (~84 tokens)

Input parameters:

- `back` (boolean, required): Whether to search in back templates
- `css` (boolean, required): Whether to search in CSS
- `fieldText` (string, required): Text to find
- `front` (boolean, required): Whether to search in front templates
- `modelName` (string, required): Name of the model to search in
- `replaceText` (string, required): Text to replace with

### `model_field_add` (~47 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field to add
- `index` (number, required): Position to insert the field (0-based)
- `modelName` (string, required): Name of the model

### `model_field_remove` (~32 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field to remove
- `modelName` (string, required): Name of the model

### `model_field_rename` (~47 tokens)

Input parameters:

- `modelName` (string, required): Name of the model
- `newFieldName` (string, required): New name for the field
- `oldFieldName` (string, required): Current name of the field

### `model_field_reposition` (~48 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field to reposition
- `index` (number, required): New position for the field (0-based)
- `modelName` (string, required): Name of the model

### `model_field_set_description` (~42 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field
- `index` (number, required): Index of the field
- `modelName` (string, required): Name of the model

### `model_field_set_font` (~42 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field
- `font` (string, required): Font name to set
- `modelName` (string, required): Name of the model

### `model_field_set_font_size` (~44 tokens)

Input parameters:

- `fieldName` (string, required): Name of the field
- `fontSize` (number, required): Font size to set
- `modelName` (string, required): Name of the model

### `model_template_add` (~30 tokens)

Input parameters:

- `modelName` (string, required): Name of the model
- `template` (required): Template object with Front and Back content

### `model_template_remove` (~32 tokens)

Input parameters:

- `modelName` (string, required): Name of the model
- `templateName` (string, required): Name of the template to remove

### `model_template_rename` (~47 tokens)

Input parameters:

- `modelName` (string, required): Name of the model
- `newTemplateName` (string, required): New name for the template
- `oldTemplateName` (string, required): Current name of the template

### `model_template_reposition` (~48 tokens)

Input parameters:

- `index` (number, required): New position for the template (0-based)
- `modelName` (string, required): Name of the model
- `templateName` (string, required): Name of the template to reposition

### `update_model_styling` (~33 tokens)

Input parameters:

- `css` (string, required): New CSS styling for the model
- `modelName` (string, required): Name of the model

### `update_model_templates` (~35 tokens)

Input parameters:

- `modelName` (string, required): Name of the model
- `templates` (object, required): Object mapping template names to their Front/Back content

### `card_reviews` (~36 tokens)

Input parameters:

- `deck` (string, required): Name of the deck to get reviews for
- `startID` (number, required): Latest unix time not included in the result

### `get_collection_stats_html` (~23 tokens)

Input parameters:

- `wholeCollection` (boolean, required): Whether to get stats for the whole collection

### `get_latest_review_id` (~24 tokens)

Input parameters:

- `deck` (string, required): Name of the deck to get latest review ID for

### `get_num_cards_reviewed_by_day` (~10 tokens)

### `get_num_cards_reviewed_today` (~9 tokens)

### `get_reviews_of_cards` (~23 tokens)

Input parameters:

- `cardIds` (array, required): Array of card IDs to get reviews for

### `insert_reviews` (~18 tokens)

Input parameters:

- `reviews` (array, required): Array of review tuples to insert

### `gui_add_cards` (~70 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to add the note to
- `fields` (object, required): Object with field names as keys and field content as values
- `modelName` (string, required): Name of the note model/type
- `tags` (array): Array of tags to add to the note

### `gui_answer_card` (~35 tokens)

Input parameters:

- `ease` (number, required): Ease rating: 1 (Again), 2 (Hard), 3 (Good), 4 (Easy)

### `gui_browse` (~30 tokens)

Input parameters:

- `query` (string, required): Search query to browse cards
- `reorderCards` (object): Optional reordering configuration

### `gui_check_database` (~6 tokens)

### `gui_current_card` (~6 tokens)

### `gui_deck_browser` (~7 tokens)

### `gui_deck_overview` (~24 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to view overview for

### `gui_deck_review` (~22 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to start reviewing

### `gui_edit_note` (~20 tokens)

Input parameters:

- `noteId` (number, required): ID of the note to edit

### `gui_exit_anki` (~7 tokens)

### `gui_import_file` (~20 tokens)

Input parameters:

- `filePath` (string, required): Path to the file to import

### `gui_select_card` (~20 tokens)

Input parameters:

- `cardId` (number, required): ID of the card to select

### `gui_select_note` (~20 tokens)

Input parameters:

- `noteId` (number, required): ID of the note to select

### `gui_selected_notes` (~6 tokens)

### `gui_show_answer` (~6 tokens)

### `gui_show_question` (~6 tokens)

### `gui_start_card_timer` (~7 tokens)

### `gui_undo` (~6 tokens)

### `delete_media_file` (~20 tokens)

Input parameters:

- `filename` (string, required): Name of the media file to delete

### `get_media_dir_path` (~7 tokens)

### `get_media_files_names` (~30 tokens)

Input parameters:

- `pattern` (string, required): Pattern to match media file names (e.g., "*.jpg", "*audio*")

### `retrieve_media_file` (~20 tokens)

Input parameters:

- `filename` (string, required): Name of the media file to retrieve

### `store_media_file` (~77 tokens)

Input parameters:

- `data` (string): Base64-encoded data of the file
- `deleteExisting` (boolean): Whether to delete existing file with same name
- `filename` (string, required): Name to save the media file as
- `path` (string): Local file path to read from
- `url` (string): URL to download the file from

### `api_reflect` (~33 tokens)

Input parameters:

- `actions`: List of action names to reflect, or null for all
- `scopes` (array, required): Scopes to reflect

### `export_package` (~47 tokens)

Input parameters:

- `deckName` (string, required): Name of the deck to export
- `filePath` (string, required): Path where to save the exported package
- `includeSched` (boolean): Whether to include scheduling information

### `get_active_profile` (~6 tokens)

### `get_profiles` (~5 tokens)

### `import_package` (~20 tokens)

Input parameters:

- `filePath` (string, required): Path to the package file to import

### `load_profile` (~19 tokens)

Input parameters:

- `profileName` (string, required): Name of the profile to load

### `multi` (~57 tokens)

Input parameters:

- `actions` (array, required): Array of AnkiConnect actions to execute in sequence. Example: [{"action": "createDeck", "params": {"deck": "My Deck"}}, {"action": "addNote", "params": {"note": {...}}}]

### `reload_collection` (~5 tokens)

### `request_permission` (~5 tokens)

### `sync` (~4 tokens)

### `get_version` (~5 tokens)

## Diagnostics

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

## Score history

- 2026-08-08: 59
- 2026-08-07: 58
- 2026-08-06: 54
- 2026-08-05: 54
- 2026-08-04: 52
- 2026-08-03: 49
- 2026-08-02: 49
- 2026-08-01: 12
- 2026-07-31: 12
- 2026-07-30: 16
- 2026-07-28: 34
- 2026-07-27: 34

## Links

- npm package: https://www.npmjs.com/package/@arielbk/anki-mcp
- Socket report: https://socket.dev/npm/package/@arielbk/anki-mcp
- Repository: https://github.com/arielbk/anki-mcp
- Changelog RSS feed: https://verifymcp.io/servers/arielbk-anki-mcp/arielbk-anki-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/arielbk-anki-mcp/arielbk-anki-mcp.json
- HTML version of this page: https://verifymcp.io/servers/arielbk-anki-mcp/arielbk-anki-mcp
