About anki
Anki is a skill for creating and managing flashcards through the `anki-mcp-server` integration. It guides workflows for decks, notes, tags, and searches in Anki.
Key features
- 01Create single or batch notes
- 02Manage decks and tags
- 03Search and inspect notes
- 04Check note types and fields
- 05Update and delete notes
Use cases
- 01Turn study material into flashcards
- 02Organize notes into hierarchical decks
- 03Find and revise existing cards
MCP support
Uses the `anki-mcp-server` MCP integration to access Anki. The skill describes tools for creating, searching, and managing decks and notes.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ nailuogg/ anki-mcp-server --skill ankiAfter installing, type/ankiin Claude Code to confirm it loaded.
Details
From the project READMEAnki MCP Server Skill
Create and manage Anki flashcards through the anki-mcp-server MCP integration.
Prerequisites
- Anki desktop app is running
- AnkiConnect addon installed (default port 8765)
- MCP server configured in Claude:
{
"mcpServers": {
"anki": {
"command": "npx",
"args": ["-y", "anki-mcp-server"]
}
}
}
Note: Do not use the
.mcpbpackaged version — it outputs Electron metadata to stdout which breaks the MCP stdio protocol.
Quick Reference
| Goal | Tool | Key Args |
|---|---|---|
| Check connection | anki_check_connection | — |
| List all decks | anki_list_decks | — |
| Create deck | anki_create_deck | name |
| List all tags | anki_list_tags | — |
| Add note tags | anki_add_note_tags | noteId or noteIds, tags |
| Remove note tags | anki_remove_note_tags | noteId or noteIds, tags |
| Create one note | anki_create_note | type, deck, fields |
| Batch create notes | anki_batch_create_notes | notes[] (10–20 per batch) |
| Search notes | anki_search_notes | query (Anki syntax), limit, offset |
| Get note details | anki_get_note_info | noteId |
| Update note | anki_update_note | id, fields, tags |
| Delete note | anki_delete_note | noteId or noteIds |
| List note types | anki_list_note_types | — |
| Get field names | anki_get_note_type_info | modelName |
Legacy unprefixed tool names still work, but prefer the anki_* tools for new workflows.
Core Workflows
From text/notes → Flashcards
- Call
anki_list_decksto confirm target deck (create if needed) - Call
anki_get_note_type_infoto confirm field names for the chosen type - Extract knowledge points — one concept per card
- Call
anki_batch_create_notes(10–20 notes per call, max 50)
Minimum information principle: Each card tests exactly one thing.
Note Types
| Type | Fields | Use For |
|---|---|---|
Basic | Front, Back | Definitions, facts, Q&A |
Cloze | Text with {{c1::deletion}} | Fill-in-the-blank, sequences |
Always call anki_get_note_type_info first when using custom note types — field names vary.
Batch Create Example
{
"notes": [
{
"type": "Basic",
"deck": "Programming::Python",
"fields": {
"Front": "What does list comprehension look like in Python?",
"Back": "[expr for item in iterable if condition]"
},
"tags": ["python", "syntax"]
},
{
"type": "Cloze",
"deck": "Programming::Python",
"fields": {
"Text": "In Python, {{c1::def}} defines a function and {{c2::return}} sends back a value."
},
"tags": ["python", "basics"]
}
],
"allowDuplicate": false,
"stopOnError": false
}
Search Syntax
deck:Python # Cards in Python deck
tag:重要 is:due # Due cards tagged "重要"
is:new # Unseen cards
note:Basic # Cards using Basic note type
"exact phrase" # Exact text match
Tags
Use anki_list_tags to inspect existing tags. For metadata-only changes, prefer anki_add_note_tags and anki_remove_note_tags; use anki_update_note only when replacing the full tag list.
Deck Naming
Use :: for hierarchy: Language::English::Vocabulary, CS::Algorithms::Sorting
Common Mistakes
| Mistake | Fix |
|---|---|
Not calling anki_get_note_type_info first | Always check field names before creating notes with custom types |
| Batches > 50 notes | Split into multiple calls of 10–20 |
Using .mcpb file | Use npx -y anki-mcp-server instead |
| Anki not running | Start Anki, verify AnkiConnect is active |
| Wrong field names | Field names are case-sensitive — use anki_get_note_type_info to verify |