Enables creation and management of Anki flashcard decks, including creating basic and cloze deletion cards, updating existing cards, managing tags, searching notes using Anki's query language, and viewing deck contents through AnkiConnect.
Anki MCP - Enhanced Anki Integration for Claude
An enhanced MCP server that enables AI assistants like Claude to interact with Anki flashcard decks through the Model Context Protocol (MCP).
Based on: jasperket/clanki
Features
Core Features (from original clanki)
Create and manage Anki decks
Create basic flashcards with front/back content
Create cloze deletion cards
Update existing cards and cloze deletions
Add and manage tags
View deck contents and card information
Full integration with AnkiConnect
Enhancements Added
๐ Card Search Tool: Search for existing notes using Anki's query language with customizable result limits
๐งช Unit Testing: Comprehensive test suite using Vitest for reliability
๐๏ธ Modular Architecture: Refactored code with extracted utility functions (
ankiUtils.ts) for better maintainability๐ Bug Fixes: Fixed deck name handling to properly support special characters and spaces
Prerequisites
Anki installed and running
AnkiConnect plugin installed in Anki
Node.js 16 or higher
Installation
Clone this repository:
Install dependencies:
Build the project:
Setup
Make sure Anki is running and the AnkiConnect plugin is installed and enabled
Configure Claude for Desktop to use the server by editing
claude_desktop_config.json:
Replace /absolute/path/to/clanki with the actual path to your clanki installation.
Available Tools
create-deck
Creates a new Anki deck
Parameters:
name: Name for the new deck
create-card
Creates a new basic flashcard in a specified deck
Parameters:
deckName: Name of the deck to add the card tofront: Front side content of the cardback: Back side content of the cardtags: (Optional) Array of tags for the card
create-cloze-card
Creates a new cloze deletion card in a specified deck
Parameters:
deckName: Name of the deck to add the card totext: Text containing cloze deletions using {{c1::text}} syntaxbackExtra: (Optional) Extra information to show on the back of the cardtags: (Optional) Array of tags for the card
update-card
Updates an existing basic flashcard
Parameters:
noteId: ID of the note to updatefront: (Optional) New front side contentback: (Optional) New back side contenttags: (Optional) New tags for the card
update-cloze-card
Updates an existing cloze deletion card
Parameters:
noteId: ID of the note to updatetext: (Optional) New text with cloze deletionsbackExtra: (Optional) New extra information for the backtags: (Optional) New tags for the card
search-cards โญ NEW
Search for existing notes using Anki's query language
Parameters:
query: Anki search query (e.g.,deck:MyDeck tag:biology,is:due,tag:important)limit: (Optional) Maximum number of notes to return (defaults to all matches, capped at 100)
Example queries:
deck:MyDeck tag:biology- Find all biology cards in MyDeckis:due- Find all cards due for reviewadded:7- Find cards added in the last 7 daystag:important rated:1- Find important cards rated 1 star
Development
To modify or extend the server:
Make changes to
src/index.tsorsrc/ankiUtils.tsRun tests with
npm testto ensure everything worksRebuild with
npm run buildDebug with
npx @modelcontextprotocol/inspector node build/index.js
Running Tests
This project includes a comprehensive test suite using Vitest:
What's Different from Original Clanki?
This fork adds several enhancements over jasperket/clanki:
Card Search: New
search-cardstool allows you to find existing cards using Anki's powerful query syntaxBetter Code Organization: Utility functions extracted to
ankiUtils.tsmodule with proper TypeScript typesTest Coverage: Unit tests ensure code reliability and make future changes safer
Bug Fixes: Deck names with spaces and special characters now work correctly
Developer Experience: Testing infrastructure makes it easier to contribute and extend
License
ISC
Credits
Original project: jasperket/clanki
Enhanced by: liuyixin-louis