mkrech/anki-mcp-server
If you are the rightful owner of anki-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
Anki MCP Server is a Model Context Protocol server that facilitates interaction between LLMs and Anki flashcard software using AnkiConnect.
Anki MCP Server
A Model Context Protocol (MCP) server that enables LLMs to interact with Anki flashcard software through AnkiConnect.
Features
Tools
list_decks- List all available Anki deckscreate_deck- Create a new Anki deckcreate_note- Create a new note (Basic or Cloze)batch_create_notes- Create multiple notes at oncesearch_notes- Search for notes using Anki query syntaxget_note_info- Get detailed information about a noteupdate_note- Update an existing notedelete_note- Delete a notelist_note_types- List all available note typescreate_note_type- Create a new note typeget_note_type_info- Get detailed structure of a note type
Resources
anki://decks/all- Complete list of available decksanki://note-types/all- List of all available note typesanki://note-types/all-with-schemas- Detailed structure information for all note typesanki://note-types/{modelName}- Detailed structure information for a specific note type
Prerequisites
- Anki installed and running
- AnkiConnect add-on installed in Anki
Installation
Development Installation
# Clone the repository
git clone <repository-url>
cd anki-tutor
# Create virtual environment and install
uv venv
uv pip install -e ".[dev]"
Usage with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"anki": {
"command": "uv",
"args": ["run", "anki-mcp-server"]
}
}
}
Using Custom AnkiConnect Port
{
"mcpServers": {
"anki": {
"command": "uv",
"args": ["run", "anki-mcp-server", "--port", "8080"]
}
}
}
Usage Examples
Create a Basic Card
"Create an Anki card in the 'Default' deck:
Front: What is the capital of France?
Back: Paris"
Create a Cloze Card
"Create a cloze card in the 'Programming' deck:
In Python, {{c1::list comprehensions}} provide a concise way to create {{c2::lists}}."
Batch Create Cards
"Create 5 vocabulary cards for Spanish in the 'Spanish' deck from this list:
- hello: hola
- goodbye: adiós
- thank you: gracias
- please: por favor
- you're welcome: de nada"
Workflow: PDF to Anki Pipeline
This project supports a complete pipeline for converting educational PDFs into Anki flashcards:
Phase 1: PDF Processing
PDF → Docling Raw JSON → Intermediate JSON
Step 1: Convert PDF to Docling Raw
- Uses Docling DocumentConverter to extract document structure
- Preserves sections, tables, images, formulas, and hierarchy
- Output:
*_docling.jsonand*_docling.mdfiles - Location:
data/input/intermediate/docling_raw/
Step 2: Convert to Intermediate Format
- Transforms Docling output into structured sections
- Extracts hierarchy, metadata, and content relationships
- Output:
*.jsonfiles with standardized structure - Location:
data/input/intermediate/
Phase 2: Flashcard Generation & Import
Intermediate JSON → LLM via MCP → Anki (via AnkiConnect)
Step 3: Generate Flashcards via LLM
The LLM analyzes intermediate JSON content and generates flashcards with a proven distribution:
- 55% Cloze cards - Fill-in-the-blank for definitions, formulas, concepts
- 30% KPRIM cards - Four statements with True/False evaluation
- 10% Multiple Choice - Multiple correct answers possible
- 5% Single Choice - One correct answer
Step 4: Batch Import to Anki
- Create deck structure via
create_decktool - Import cards in batches of 10-12 via
batch_create_notes - Use
allow_duplicate=trueparameter when encountering similar cards - Generate import report in
data/progress/directory
Complete Example
1. Source: data/input/pdfs/pgm/exams/midterm-exam.pdf
2. Convert to Docling Raw:
→ data/input/intermediate/docling_raw/midterm-exam_docling.json
→ data/input/intermediate/docling_raw/midterm-exam_docling.md
3. Convert to Intermediate:
→ data/input/intermediate/midterm-exam.json
4. Generate & Import:
→ LLM analyzes content
→ Generates 50 cards (28 Cloze, 15 KPRIM, 5 MC, 2 SC)
→ Creates deck: PGM::MidtermExam
→ Imports in 5 batches (10-12 cards each)
5. Report:
→ data/progress/midterm-exam-import-report.md
Best Practices
Batch Import Strategy:
- Process 10-12 cards per batch for optimal reliability
- Monitor success rates and adjust if needed
- Use
allow_duplicate=truefor KPRIM cards with similar patterns
Quality Tracking:
- Generate detailed import reports after each session
- Track card distribution, coverage, and success rates
- Store reports in
data/progress/for reference
Card Distribution:
- Maintain 55/30/10/5 split for comprehensive learning
- Balance theoretical knowledge (Cloze) with application (KPRIM/MC/SC)
- Cover all major topics from source material
Development
Running Tests
pytest
Code Quality
# Format code
ruff format .
# Lint code
ruff check .
# Auto-fix issues
ruff check --fix .
Running Locally
# Default port (8765)
uv run anki-mcp-server
# Custom port
uv run anki-mcp-server --port 8080
# With debug logging
uv run anki-mcp-server --log-level DEBUG
Architecture
client.py- AnkiConnect API wrapper (anti-corruption layer)tools.py- MCP tool handlers for all Anki operationsresources.py- MCP resource handlers with cachingserver.py- Main MCP server implementation__main__.py- CLI entry point
Troubleshooting
"Failed to connect to Anki"
- Ensure Anki is running
- Verify AnkiConnect add-on is installed
- Check AnkiConnect is listening on the correct port (default: 8765)
- Restart Anki and try again
"Deck not found"
- Create the deck manually in Anki first, or
- Use the
create_decktool before creating notes
"Note type not found"
- Use
list_note_typesto see available types - Use
get_note_type_infoto see required fields - Ensure field names match exactly (case-sensitive)
License
MIT License