Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Anki

MCPB · ANKI-MCP.MCPB

Study and manage Anki flashcards via AnkiConnect: quizzes, stats, leeches, bulk edits.

Available components

+3 this week 57 Trust /100

Last scanned (9 hours ago)

Scores higher than 91% of MCPB servers

Category Education and Research

Trust breakdown (7 categories)

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
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
What we tested

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 →

Changelog

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
Diagnostics

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 →

MCP tools · 35 exposed · ~3,036 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
dryRunboolean–Preview without changing anything.
notesarrayyes–

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.

NameTypeReqDescription
deckNamestring–Target deck (default 'Default').
fieldsobjectyesField name → HTML content, e.g. {"Front": "...", "Back": "..."}. Names must match the note type.
modelNamestringyesNote type name (see get_deck_model_info / get_model_names).
tagsarray––

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.

NameTypeReqDescription
audioFieldstringyesField that receives the [sound:...] tag.
deckNamestring––
fieldsobjectyes–
languagestring–Language code, default 'en' (e.g. es, fr, de, ja, zh, pt).
modelNamestringyes–
sourceFieldstringyesField whose text is spoken.
tagsarray––

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.

NameTypeReqDescription
deckNamestring––
dryRunboolean–Preview without changing anything.
itemsarrayyes–
modelNamestring–Cloze note type (default 'Cloze').
tagsarray––

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.

NameTypeReqDescription
datastring–Base64-encoded image data.
fieldstringyesField that receives the <img> tag.
filenamestring–Optional file name (needed with 'data' to set the extension).
modestring–Append to the field (default) or replace it.
noteIdnumberyes–
pathstring–Absolute path of a local image file.
urlstring––

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.

NameTypeReqDescription
answersarrayyes–

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.

NameTypeReqDescription
audioFieldstringyesField that receives the [sound:...] tag.
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
languagestring–Language code, default 'en' (e.g. es, fr, de, ja, zh, pt).
limitnumber–Max notes per call, 1-200 (default 50). Call again for the rest.
noteIdsarray–Note IDs (override filters).
overwriteboolean–Also regenerate notes that already have audio (default false).
querystring–Extra Anki search, ANDed.
sourceFieldstringyesField whose text is spoken.
tagsarray–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.

NameTypeReqDescription
notesarrayyes–

No output schema declared.

No examples provided.

create_deck ~39

Create a deck (use '::' for subdecks, e.g. 'Japanese::Verbs').

NameTypeReqDescription
deckNamestringyes–

No output schema declared.

No examples provided.

create_model ~56

Create a new note type.

NameTypeReqDescription
cardTemplatesarrayyes–
cssstring––
fieldNamesarrayyes–
isClozeboolean–Default false.
modelNamestringyes–

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.

NameTypeReqDescription
confirmTokenstring–Token from the preview call. Only valid while the same notes still match.
deckNamestring–Deck (subdecks included).
noteIdsarray–Note IDs (override filters).
querystring–Extra Anki search, ANDed.
tagsarray–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.

NameTypeReqDescription
actionstringyes–
fieldNamestringyesField to act on (the current name when renaming).
indexnumber–For add (optional) and reposition: 0-based position.
modelNamestringyes–
newFieldNamestring–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.

NameTypeReqDescription
caseSensitiveboolean–Default false.
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
fieldsarray–Only these fields (default: all).
findstringyes–
noteIdsarray–Note IDs (override filters).
querystring–Extra Anki search, ANDed.
regexboolean–Treat 'find' as a JavaScript regex (default false).
replacestringyesReplacement (regex mode supports $1 groups). Empty string deletes.
tagsarray–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.

NameTypeReqDescription
includearray–Sections to return (default: question, answer).
limitnumber–Page size, 1-100 (default 20).
offsetnumber–Number of cards to skip (default 0).
querystringyesAnki 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.

NameTypeReqDescription
deckNamestring–Deck (subdecks included).
includeSuspendedboolean–Include suspended cards (Anki auto-suspends leeches). Default true.
limitnumber–How many cards to return, 1-50 (default 15).
minLapsesnumber–Minimum lapses to count as weak (default 3).
querystring–Extra Anki search, ANDed.
tagsarray–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.

NameTypeReqDescription
cardIdsarrayyesUp 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.

NameTypeReqDescription
deckNamestringyes–

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).

NameTypeReqDescription
deckNamestring–Optional deck to study (subdecks included).
numnumberyesHow 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.

NameTypeReqDescription
modelNamestringyes–

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).

NameTypeReqDescription
deckNamestring–Optional deck (subdecks included).
numnumberyesHow 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.

NameTypeReqDescription
daysnumber–Look-back window, 1-365 (default 30).
deckNamestringyes–

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.

NameTypeReqDescription
deckNamesarray–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.

NameTypeReqDescription
actionstringyes–
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
newTagstring–For rename.
noteIdsarray–Note IDs (override filters).
oldTagstring–For rename.
prefixstring–For list: only tags starting with this.
querystring–Extra Anki search, ANDed.
tagsarray–Notes with any of these tags.
tagsToChangearray–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).

NameTypeReqDescription
cardIdsarray–Card IDs (override filters).
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
querystring–Extra Anki search, ANDed.
tagsarray–Notes with any of these tags.
targetDeckstringyesDestination 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.

NameTypeReqDescription
actionstringyesset_due_date: make cards due on given days; forget: reset to new; relearn: put back into relearning.
cardIdsarray–Card IDs (override filters).
daysstring–For set_due_date: '0' = today, '1' = tomorrow, '3-7' = spread randomly over 3-7 days, suffix '!' also sets the interval (e.g. '1!').
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
querystring–Extra Anki search, ANDed.
tagsarray–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.

NameTypeReqDescription
cardIdsarray–Card IDs (override filters).
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
labelstring–Name for this pause (e.g. 'hsk5-6'). Tags the notes with paused::<label>.
querystring–Extra Anki search, ANDed.
tagsarray–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' }.

NameTypeReqDescription
cardIdsarray–Card IDs (override filters).
deckNamestring–Deck (subdecks included).
dryRunboolean–Preview without changing anything.
labelstring–Resume the group paused under this label.
querystring–Extra Anki search, ANDed.
tagsarray–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.

NameTypeReqDescription
audioFieldstringyesField that receives the [sound:...] tag.
languagestring–Language code, default 'en' (e.g. es, fr, de, ja, zh, pt).
noteIdnumberyes–
sourceFieldstringyesField 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.

NameTypeReqDescription
fieldsobjectyesField name → new HTML content.
noteIdnumberyes–

No output schema declared.

No examples provided.

update_note_type_styling ~35

Replace the CSS of a note type.

NameTypeReqDescription
cssstringyes–
modelNamestringyes–

No output schema declared.

No examples provided.

update_note_type_templates ~66

Replace the Front/Back HTML of card templates of a note type.

NameTypeReqDescription
modelNamestringyes–
templatesobjectyesTemplate name → {Front, Back}, e.g. {"Card 1": {"Front": "...", "Back": "..."}}.

No output schema declared.

No examples provided.

Install

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 bundle

Check 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.

Common questions

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.