Model Context Protocol (MCP) server enabling AI assistants (Claude, GPT-4, Gemini, etc.) to interact with Anki flashcards through AnkiConnect.
npm install mcp-server-anki 


δΈζζζ‘£ | English
A Model Context Protocol (MCP) server that bridges Anki with AI tools, enabling intelligent flashcard management and learning assistance.
> π‘ Compatibility: This server works with any MCP-compatible AI tool including Claude Code, Cline, Zed AI, and more. We use Claude Code as an example in this documentation, but the setup process is similar for other tools.
- π Deck Management: Get deck lists, view deck statistics
- π Card Search: Search cards using Anki's advanced query syntax
- β Smart Creation: Create and manage Anki cards with AI assistance
- βοΈ Card Editing: Update existing card fields and content
- ποΈ Card Deletion: Delete unwanted cards and notes
- π Data Analysis: Get learning statistics and progress information
- π§ Template Management: View and use different note types
1. Anki Desktop - Download Anki
2. AnkiConnect Plugin - Install in Anki (Code: 2055492159)
3. Node.js - Version 16 or higher
4. MCP-compatible AI Tool - Such as:
- Claude Code
- Cline
- Zed AI
- Any other tool supporting MCP
In Anki:
1. Tools β Add-ons β Get Add-ons
2. Enter code: 2055492159
3. Restart Anki
> The following examples use Claude Code, but the configuration is similar for other MCP-compatible tools.
#### Option A: Using Command Line
``bashFor Claude Code
claude mcp add anki -- npx mcp-server-anki
#### Option B: Manual Configuration
Add the server to your MCP client's configuration file:
`json
{
"mcp": {
"servers": {
"anki": {
"command": "npx",
"args": ["mcp-server-anki"]
}
}
}
}
`π Usage Guide
$3
1. Start Anki - Ensure Anki is running with AnkiConnect enabled
2. Start MCP Server - Automatically started by Claude Code
3. Use AI Tools - Interact with Anki through Claude Code
$3
`
User: Show me the learning progress for my "English Vocabulary" deckClaude: I'll check the statistics for your "English Vocabulary" deck...
[Calls get_deck_stats tool]
User: Create a new English word card for "ephemeral"
Claude: I'll create this word card for you...
[Calls add_note tool]
`π οΈ Available Tools
| Tool Name | Description | Parameters |
|-----------|-------------|------------|
|
get_deck_names | Get all deck names | None |
| get_cards_in_deck | Get cards from a specific deck | deckName |
| get_deck_stats | Get deck statistics | deckName |
| search_cards | Search cards | query |
| add_note | Add new note | deckName, modelName, fields, tags |
| update_note | Update existing note fields | noteId, fields |
| get_note_info | Get detailed note information | noteId |
| delete_notes | Delete one or more notes | noteIds |
| get_models | Get all note types | None |
| get_model_fields | Get note type fields | modelName |ποΈ Project Structure
`
mcp-server-anki/
βββ src/
β βββ index.ts # MCP server entry point
β βββ ankiConnect.ts # AnkiConnect API client
β βββ tools/ # MCP tool definitions
β βββ deckTools.ts # Deck-related tools
β βββ cardTools.ts # Card-related tools
β βββ noteTools.ts # Note-related tools
βββ dist/ # Compiled JavaScript
βββ package.json
βββ tsconfig.json
βββ README.md
`π§ Development
$3
`bash
Development mode (watch for changes)
npm run devProduction build
npm run build
`$3
`
Claude Code (MCP Client) ββ Anki MCP Server ββ AnkiConnect ββ Anki Desktop
`π API Documentation
$3
Get a list of all deck names.Returns:
`json
["Default", "English Vocabulary", "Programming"]
`$3
Search cards using Anki query syntax.Parameters:
-
query: Anki query string (e.g., deck:English is:due)Query Syntax Examples:
-
deck:DeckName - Specific deck
- tag:TagName - By tag
- is:due - Due cards
- is:new - New cards
- added:7 - Cards added in last 7 days$3
Add a new note to Anki.Parameters:
-
deckName: Target deck name
- modelName: Note type (e.g., "Basic", "Cloze")
- fields: Field content object
- tags: Tag array (optional)Example:
`json
{
"deckName": "English Vocabulary",
"modelName": "Basic",
"fields": {
"Front": "ephemeral",
"Back": "lasting for a very short time"
},
"tags": ["vocabulary", "adjective"]
}
`$3
Update fields of an existing note.Parameters:
-
noteId: The ID of the note to update
- fields: Object with field names and new valuesExample:
`json
{
"noteId": 1234567890,
"fields": {
"Back": "lasting for an extremely short time"
}
}
`$3
Get detailed information about a specific note.Parameters:
-
noteId: The ID of the note to queryReturns:
`json
{
"noteId": 1234567890,
"modelName": "Basic",
"fields": {
"Front": "ephemeral",
"Back": "lasting for a very short time"
},
"tags": ["vocabulary", "adjective"]
}
`$3
Delete one or more notes.Parameters:
-
noteIds: Array of note IDs to deleteExample:
`json
{
"noteIds": [1234567890, 9876543210]
}
`π§ Building from Source
If you want to contribute or customize the server:
`bash
Clone the repository
git clone https://github.com/here-tunan/mcp-server-anki.git
cd mcp-server-ankiInstall dependencies
npm installBuild TypeScript
npm run build
`To use your local build with Claude Code, configure it with:
`json
{
"mcp": {
"servers": {
"anki": {
"command": "node",
"args": ["/path/to/mcp-server-anki/dist/index.js"]
}
}
}
}
`π€ Contributing
Issues and Pull Requests are welcome!
π License
Apache License
π Links
- Anki Official
- AnkiConnect Documentation
- Model Context Protocol
- Claude Code
β FAQ
Q: AnkiConnect connection failed?
A: Ensure Anki is running and AnkiConnect plugin is installed and enabled. Default port is 8765.
Q: How to customize note types?
A: After creating custom note types in Anki, use
get_models and get_model_fields` tools to view available fields.Q: Mobile support?
A: Currently only supports desktop Anki due to AnkiConnect dependency.
---
Made with β€οΈ for Anki learners and AI enthusiasts