Anki
MCPB · ANKI-MCP.MCPB
Study and manage Anki flashcards via AnkiConnect: quizzes, stats, leeches, bulk edits.
Available components
Last scanned (9 hours ago)
Scores higher than 91% of MCPB servers
Category Education and Research
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. How we score → Why this is hard to score →
Supply Chain Security23
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs were checked across the 105 of 105 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- 32 of 105 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 30 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 3438 tokens (~88/item across 39 items; 35 tools + 4 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 77% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Checks we ran (15)
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Checks we could not complete (1)
These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.
- Malware scan in Supply Chain SecurityNo malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +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.
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +4
- Stability: unverified → 0.23 ▲ functional
- 15 Oct 26 +31
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- First check of Schema quality: fail functional
- First check of Destructive annotations: 100 functional
- First check of Schema quality: pass functional
- First check of Tool coverage: 77 functional
- First check of Schema quality: good functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed mcpb/https://github.com/nietus/anki-mcp/releases/download/v0.2.0/anki-mcp.mcpb
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Dependencies 105 packages
| Packages resolved | 105 |
|---|---|
| Stale | 32 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_bulk ~57
Create many new notes in one call. Duplicates and invalid notes are skipped and reported with the reason. Use dryRun to check before adding.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Preview without changing anything. |
| notes | array | yes | – |
No output schema declared.
No examples provided.
add_card ~105
Create ONE new note. For several notes use add_bulk; to change existing notes use update_note_fields.
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | – | Target deck (default 'Default'). |
| fields | object | yes | Field name → HTML content, e.g. {"Front": "...", "Back": "..."}. Names must match the note type. |
| modelName | string | yes | Note type name (see get_deck_model_info / get_model_names). |
| tags | array | – | – |
No output schema declared.
No examples provided.
add_card_with_audio ~115
Create ONE new note with Azure TTS audio generated from one of its fields.
| Name | Type | Req | Description |
|---|---|---|---|
| audioField | string | yes | Field that receives the [sound:...] tag. |
| deckName | string | – | – |
| fields | object | yes | – |
| language | string | – | Language code, default 'en' (e.g. es, fr, de, ja, zh, pt). |
| modelName | string | yes | – |
| sourceField | string | yes | Field whose text is spoken. |
| tags | array | – | – |
No output schema declared.
No examples provided.
add_cloze_cards ~102
Create cloze notes from text. Either pass 'terms' to hide (each becomes {{c1::}}, {{c2::}}...) or text that already has {{c1::...}} markup.
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | – | – |
| dryRun | boolean | – | Preview without changing anything. |
| items | array | yes | – |
| modelName | string | – | Cloze note type (default 'Cloze'). |
| tags | array | – | – |
No output schema declared.
No examples provided.
add_image ~134
Attach an image to a note field from a URL, a local file path, or base64 data. The image is stored in Anki's media folder.
| Name | Type | Req | Description |
|---|---|---|---|
| data | string | – | Base64-encoded image data. |
| field | string | yes | Field that receives the <img> tag. |
| filename | string | – | Optional file name (needed with 'data' to set the extension). |
| mode | string | – | Append to the field (default) or replace it. |
| noteId | number | yes | – |
| path | string | – | Absolute path of a local image file. |
| url | string | – | – |
No output schema declared.
No examples provided.
answer_cards ~54
Record the user's answers to cards you quizzed them on (1=Again, 2=Hard, 3=Good, 4=Easy). Returns each card's new interval.
| Name | Type | Req | Description |
|---|---|---|---|
| answers | array | yes | – |
No output schema declared.
No examples provided.
bulk_generate_audio ~204
Generate audio for many notes at once (e.g. a whole deck). By default only notes whose audio field is empty are processed.
| Name | Type | Req | Description |
|---|---|---|---|
| audioField | string | yes | Field that receives the [sound:...] tag. |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| language | string | – | Language code, default 'en' (e.g. es, fr, de, ja, zh, pt). |
| limit | number | – | Max notes per call, 1-200 (default 50). Call again for the rest. |
| noteIds | array | – | Note IDs (override filters). |
| overwrite | boolean | – | Also regenerate notes that already have audio (default false). |
| query | string | – | Extra Anki search, ANDed. |
| sourceField | string | yes | Field whose text is spoken. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
bulk_update_notes ~26
Update fields of many existing notes in one call.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | array | yes | – |
No output schema declared.
No examples provided.
create_deck ~39
Create a deck (use '::' for subdecks, e.g. 'Japanese::Verbs').
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | yes | – |
No output schema declared.
No examples provided.
create_model ~56
Create a new note type.
| Name | Type | Req | Description |
|---|---|---|---|
| cardTemplates | array | yes | – |
| css | string | – | – |
| fieldNames | array | yes | – |
| isCloze | boolean | – | Default false. |
| modelName | string | yes | – |
No output schema declared.
No examples provided.
delete_notes ~125
Permanently delete notes (and all their cards). Two steps: call without confirmToken to preview and get a token, show the preview to the user, then call again with the token after they confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmToken | string | – | Token from the preview call. Only valid while the same notes still match. |
| deckName | string | – | Deck (subdecks included). |
| noteIds | array | – | Note IDs (override filters). |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
edit_note_type_field ~103
Add, remove, rename or reposition a field of a note type. 'remove' deletes that field's content from every note of the type.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| fieldName | string | yes | Field to act on (the current name when renaming). |
| index | number | – | For add (optional) and reposition: 0-based position. |
| modelName | string | yes | – |
| newFieldName | string | – | For rename. |
No output schema declared.
No examples provided.
find_and_replace ~174
Find and replace text across notes (plain text or regex), optionally only in some fields. Returns before/after samples; use dryRun to preview.
| Name | Type | Req | Description |
|---|---|---|---|
| caseSensitive | boolean | – | Default false. |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| fields | array | – | Only these fields (default: all). |
| find | string | yes | – |
| noteIds | array | – | Note IDs (override filters). |
| query | string | – | Extra Anki search, ANDed. |
| regex | boolean | – | Treat 'find' as a JavaScript regex (default false). |
| replace | string | yes | Replacement (regex mode supports $1 groups). Empty string deletes. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
find_cards ~136
Search cards with an Anki query and return a page of results. Choose the sections you need to keep output small; use 'fields' when you plan to edit notes.
| Name | Type | Req | Description |
|---|---|---|---|
| include | array | – | Sections to return (default: question, answer). |
| limit | number | – | Page size, 1-100 (default 20). |
| offset | number | – | Number of cards to skip (default 0). |
| query | string | yes | Anki search query, e.g. '"deck:My Deck" tag:verbs -is:suspended'. Empty field: 'Field:'; non-empty: 'Field:_*'. |
No output schema declared.
No examples provided.
find_leeches ~146
Find the user's weakest cards (leech tag or many lapses), ranked by lapses and ease. Good for focused drills or rewriting confusing cards.
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | – | Deck (subdecks included). |
| includeSuspended | boolean | – | Include suspended cards (Anki auto-suspends leeches). Default true. |
| limit | number | – | How many cards to return, 1-50 (default 15). |
| minLapses | number | – | Minimum lapses to count as weak (default 3). |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
get_card_history ~49
Full review log of specific cards (date, button, interval change, time spent), to explain why a card keeps being forgotten.
| Name | Type | Req | Description |
|---|---|---|---|
| cardIds | array | yes | Up to 20 card IDs. |
No output schema declared.
No examples provided.
get_deck_model_info ~43
Which note types a deck uses. Call before adding cards to an existing deck to pick the right modelName and fields.
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | yes | – |
No output schema declared.
No examples provided.
get_deck_names ~15
List all deck names.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_due_cards ~70
Get cards due for review now (learning cards first, then oldest due). Each card includes the interval every button would give (nextIntervals).
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | – | Optional deck to study (subdecks included). |
| num | number | yes | How many cards to return (1-100). |
No output schema declared.
No examples provided.
get_model_details ~28
Fields, card templates and CSS of a note type.
| Name | Type | Req | Description |
|---|---|---|---|
| modelName | string | yes | – |
No output schema declared.
No examples provided.
get_model_names ~18
List all note type (model) names.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_new_cards ~54
Get new, never-studied cards (suspended cards excluded).
| Name | Type | Req | Description |
|---|---|---|---|
| deckName | string | – | Optional deck (subdecks included). |
| num | number | yes | How many cards to return (1-100). |
No output schema declared.
No examples provided.
get_retention_stats ~70
Learning analytics for a deck (subdecks included) over the last N days: true retention (young/mature), reviews per day, average seconds per review.
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Look-back window, 1-365 (default 30). |
| deckName | string | yes | – |
No output schema declared.
No examples provided.
get_study_overview ~67
Today's study plan: new/learning/review counts per deck, cards reviewed today, streak, and 7/30-day review totals. A good first call for a study session.
| Name | Type | Req | Description |
|---|---|---|---|
| deckNames | array | – | Decks to include (default: all top-level decks). |
No output schema declared.
No examples provided.
manage_tags ~168
Tag management: list tags (with a deck/filter it returns tag counts for those notes), add/remove tags on notes, rename a tag, or clear unused tags.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| newTag | string | – | For rename. |
| noteIds | array | – | Note IDs (override filters). |
| oldTag | string | – | For rename. |
| prefix | string | – | For list: only tags starting with this. |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
| tagsToChange | array | – | For add/remove: the tags to add or remove. |
No output schema declared.
No examples provided.
move_cards ~98
Move cards to another deck (created automatically if it doesn't exist).
| Name | Type | Req | Description |
|---|---|---|---|
| cardIds | array | – | Card IDs (override filters). |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
| targetDeck | string | yes | Destination deck name. |
No output schema declared.
No examples provided.
reschedule_cards ~200
Change card scheduling: set a due date (e.g. vacation backlog), forget (reset to new) or relearn. Reversible only via undo, so preview with dryRun on broad filters.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | set_due_date: make cards due on given days; forget: reset to new; relearn: put back into relearning. |
| cardIds | array | – | Card IDs (override filters). |
| days | string | – | For set_due_date: '0' = today, '1' = tomorrow, '3-7' = spread randomly over 3-7 days, suffix '!' also sets the interval (e.g. '1!'). |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
suspend_cards ~151
Deactivate (suspend) cards so they stop appearing in reviews until unsuspend_cards is called. Scheduling (interval, ease, due date) is kept intact. Pass a label when the user will want to resume this exact group later.
| Name | Type | Req | Description |
|---|---|---|---|
| cardIds | array | – | Card IDs (override filters). |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| label | string | – | Name for this pause (e.g. 'hsk5-6'). Tags the notes with paused::<label>. |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
sync ~24
Sync the collection with AnkiWeb (user must be logged in inside Anki).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
undo ~31
Undo the most recent action in Anki (a review, a field edit, a suspend...). One action per call.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
unsuspend_cards ~139
Reactivate (unsuspend) cards with their original scheduling. With a label, resumes exactly the cards paused under it (cards suspended for other reasons stay suspended); list groups with manage_tags { action: 'list', prefix: 'paused' }.
| Name | Type | Req | Description |
|---|---|---|---|
| cardIds | array | – | Card IDs (override filters). |
| deckName | string | – | Deck (subdecks included). |
| dryRun | boolean | – | Preview without changing anything. |
| label | string | – | Resume the group paused under this label. |
| query | string | – | Extra Anki search, ANDed. |
| tags | array | – | Notes with any of these tags. |
No output schema declared.
No examples provided.
update_card_with_audio ~89
Generate audio for ONE existing note from one of its fields.
| Name | Type | Req | Description |
|---|---|---|---|
| audioField | string | yes | Field that receives the [sound:...] tag. |
| language | string | – | Language code, default 'en' (e.g. es, fr, de, ja, zh, pt). |
| noteId | number | yes | – |
| sourceField | string | yes | Field whose text is spoken. |
No output schema declared.
No examples provided.
update_note_fields ~45
Update fields of ONE existing note. For many notes use bulk_update_notes.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | Field name → new HTML content. |
| noteId | number | yes | – |
No output schema declared.
No examples provided.
update_note_type_styling ~35
Replace the CSS of a note type.
| Name | Type | Req | Description |
|---|---|---|---|
| css | string | yes | – |
| modelName | string | yes | – |
No output schema declared.
No examples provided.
update_note_type_templates ~66
Replace the Front/Back HTML of card templates of a note type.
| Name | Type | Req | Description |
|---|---|---|---|
| modelName | string | yes | – |
| templates | object | yes | Template name → {Front, Back}, e.g. {"Card 1": {"Front": "...", "Back": "..."}}. |
No output schema declared.
No examples provided.
How do I install the Anki MCP server?
Anki ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 79f429e01b4abb8af26a23a05900d9aced901a468fa0ffa3a648d675043c7a25; the commands to do that are on this page. If it does not match, do not open it.
mcpb · anki-mcp.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
79f429e01b4abb8af26a23a05900d9aced901a468fa0ffa3a648d675043c7a25
macOS / Linux
echo "79f429e01b4abb8af26a23a05900d9aced901a468fa0ffa3a648d675043c7a25 anki-mcp.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\anki-mcp.mcpb).Hash -eq "79f429e01b4abb8af26a23a05900d9aced901a468fa0ffa3a648d675043c7a25"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the Anki MCP server?
Anki is an MCP server listed in the public MCP registry as io.github.nietus/anki-mcp. Study and manage Anki flashcards via AnkiConnect: quizzes, stats, leeches, bulk edits. This page covers its MCPB bundle (https://github.com/nietus/anki-mcp/releases/download/v0.2.0/anki-mcp.mcpb).
Is the Anki MCP server safe to use?
Anki scores 57 out of 100 on VerifyMCP. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Anki MCP server expose?
Anki exposes 35 tools: get_deck_names, create_deck, get_deck_model_info, get_study_overview, get_retention_stats, and 30 more. Their descriptions and schemas cost roughly 3,036 tokens of context every time the server is loaded.
What licence is the Anki MCP server under?
Anki declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the Anki MCP server?
VerifyMCP ran 15 checks on Anki, covering Known CVEs, Install scripts, Dependency health, Source repository and 11 more. One item could not be completed, a gap on our side rather than a finding about Anki: Malware scan. Endpoint Security and Transport & Reachability do not apply to an MCPB bundle, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.