Skip to main content
Glama

Anki MCP Server

A Model Context Protocol (MCP) server that enables LLMs to interact with Anki flashcard software through AnkiConnect.

Anki Icon

Features

Tools

  • anki_check_connection - Check whether AnkiConnect is reachable

  • anki_list_decks - List all available Anki decks, optionally with deck IDs

  • anki_create_deck - Create a new Anki deck

  • anki_list_tags - List all tags currently used in the collection

  • anki_add_note_tags - Add tags to one or more notes

  • anki_remove_note_tags - Remove tags from one or more notes

  • anki_create_note - Create a new note

  • anki_batch_create_notes - Create multiple notes at once

  • anki_search_notes - Search for notes using Anki query syntax

  • anki_get_note_info - Get detailed information about a note

  • anki_update_note - Update an existing note's fields and/or tags

  • anki_delete_note - Delete one or multiple notes

  • anki_list_note_types - List all available note types

  • anki_create_note_type - Create a new note type

  • anki_get_note_type_info - Get detailed structure of a note type

  • anki_sync - Trigger AnkiWeb sync; requires {"confirm": true} because a full sync can merge or overwrite local and remote collections. Success means Anki accepted the request, not that AnkiWeb received the data; a blocking dialog in Anki can silently keep the sync queued

Legacy unprefixed tool names such as create_note and list_decks remain callable for existing clients, but new agent integrations should use the anki_* names.

Resources

  • anki://decks/all - Complete list of available decks with deck IDs

  • anki://tags/all - Complete list of tags

  • anki://note-types/all - List of all available note types

  • anki://note-types/all-with-schemas - Detailed structure information for all note types

  • anki://note-types/{modelName} - Detailed structure information for a specific note type

Related MCP server: Anki MCP Server

Prerequisites

  1. Anki installed on your system

  2. AnkiConnect add-on installed in Anki

  3. Node.js 20.11 or newer

Configuration

Install via Desktop Extension (.mcpb)

This repository supports Anthropic Desktop Extensions (MCPB). The easiest way to use this server in Claude Desktop is by installing the packaged .mcpb bundle.

  1. Generate the .mcpb file locally using the provided script:

npm run mcpb
  1. Open Claude Desktop Settings → Extensions and drag the generated .mcpb file in, then click Install.

This validates manifest.json and outputs a .mcpb archive you can install as above. Learn more about Desktop Extensions in Anthropic's announcement: Desktop Extensions: One-click MCP server installation for Claude Desktop.

Usage with Claude Desktop

Add the server to your claude_desktop_config.json:

{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["--yes", "anki-mcp-server"]
    }
  }
}

Using Custom AnkiConnect Port

If your AnkiConnect is running on a different port, you can specify it using the --port parameter:

{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["--yes", "anki-mcp-server", "--port", "8080"]
    }
  }
}

Configuration for Cline

Add the server to your Cline MCP settings file inside VSCode's settings cline_mcp_settings.json

{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["--yes", "anki-mcp-server"]
    }
  }
}

Using Custom AnkiConnect Port

For Cline, you can also specify a custom port:

{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["--yes", "anki-mcp-server", "--port", "8080"]
    }
  }
}

Agent Skills (Claude Code)

Install the Anki skill to give Claude Code built-in knowledge of all Anki tools and workflows:

npx skills add nailuoGG/anki-mcp-server@anki

Once installed, Claude Code will automatically use the skill when you ask it to create flashcards, manage decks, or batch import notes.

Note: Do not use the .mcpb packaged version as the MCP server — it outputs Electron metadata to stdout which breaks the MCP stdio protocol. Use npx -y anki-mcp-server instead.

Development

Packaging a Desktop Extension (.mcpb)

Create a distributable Desktop Extension bundle for Claude Desktop:

npm run mcpb

This will build the project and generate a .mcpb archive from the current repository, validating manifest.json. Test by dragging it into Claude Desktop's Extensions settings. Reference: Desktop Extensions: One-click MCP server installation for Claude Desktop.

Publishing to MCP Registry

This server is automatically published to the MCP Registry when a new version is released. The publishing process includes:

  1. Automated CI/CD: GitHub Actions automatically publishes to both NPM and MCP Registry on successful releases

  2. Schema Validation: The server.json file is validated against the MCP schema before publishing

  3. Version Synchronization: Versions are kept in sync between package.json, manifest.json, and server.json

  4. Comprehensive Testing: Multi-version Node.js testing, linting, and validation before publishing

  5. Beta Support: Automated beta releases for testing new features

Manual Validation

You can validate the MCP server configuration locally:

npm run validate-mcp

This will download the latest MCP schema and validate your server.json file.

Manual Publishing

If you need to publish manually, you can use the MCP Publisher CLI:

# Install MCP Publisher
curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.1.0/mcp-publisher_1.1.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
chmod +x mcp-publisher
sudo mv mcp-publisher /usr/local/bin/

# Login to MCP Registry
mcp-publisher login github-oidc

# Publish to MCP Registry
mcp-publisher publish

Setup

  1. Install dependencies:

npm install
  1. Build the server:

npm run build
  1. For development with auto-rebuild:

npm run watch

Testing

Run the test suite:

npm test

This executes unit tests for MCP tool schemas, structured tool results, note creation, search/update/delete workflows, and error handling. These tests use mocked AnkiConnect clients; use MCP Inspector with a running Anki instance for manual integration checks.

MCP Evaluations

Read-only agent evaluation assets live in evals/. Load the fixture into a disposable Anki profile, then run the XML questions against the MCP server to verify that agents can discover decks, tags, note type schemas, resources, and structured tool results.

Debugging

Since MCP servers communicate over stdio, we recommend using the MCP Inspector:

npm run inspector

This provides a browser-based interface for:

  • Monitoring MCP messages

  • Testing tool invocations

  • Viewing server logs

  • Debugging communication issues

Example Usage

  1. Create a new deck:

Create a new Anki deck called "Programming"
  1. Add a basic card:

Create an Anki card in the "Programming" deck with:
Front: What is a closure in JavaScript?
Back: A closure is the combination of a function and the lexical environment within which that function was declared.
  1. Add a cloze deletion card:

Create a cloze card in the "Programming" deck with:
Text: In JavaScript, {{c1::const}} declares a block-scoped variable that cannot be {{c2::reassigned}}.
  1. Delete a single note:

Delete note ID 1234567890
  1. Delete multiple notes at once:

Delete note IDs 1234567890, 9876543210, and 1122334455
  1. Add tags to notes:

Add tags "review" and "mcp" to note IDs 1234567890 and 9876543210

Contributing

  1. Fork the repository

  2. Create your feature branch

  3. Run tests: npm test

  4. Submit a pull request

Star History

Star History Chart

Credits

Icon courtesy of macOS Icons

License

MIT License - see LICENSE file for details

Available Tools

16 tools
anki_add_note_tagsAdd Tags To Anki NotesA
Idempotent

Use when the user wants to add one or more tags to existing notes for organization. Do not use when the user wants to remove tags (use anki_remove_note_tags) or update note content (use anki_update_note). Safety: confirm before adding tags to a large number of notes.

Inputs: tags (required), noteId, noteIds. Returns: tags, noteIds, success, operation, +1 more

anki_batch_create_notesBatch Create Anki NotesA

Use when the user wants to create multiple study cards at once (2–50 notes). Prefer this over repeated anki_create_note calls. Returns per-note success and error details. Safety: ask the user to confirm before creating a large batch of notes.

Inputs: notes (required), stopOnError, allowDuplicate. Returns: total, failed, results, successful

anki_check_connectionCheck Anki ConnectionA
Read-only

Check whether AnkiConnect is reachable and return the API version.

Inputs: no named parameters. Returns: version, connected

anki_create_deckCreate Anki DeckB
Idempotent

Create an Anki deck by name.

Inputs: name (required). Returns: name, deckId

anki_create_noteCreate Anki NoteA

Use when the user wants to create a single new study card (note) in an existing deck. Creates user study content — not a schema change. Do not use when the user only wants to inspect existing notes, decks, tags, or note types. To define a new note structure, use anki_create_note_type instead. Call anki_get_note_type_info first for custom fields. For multiple notes, use anki_batch_create_notes. Safety: confirm with the user before creating notes if intent is unclear.

Inputs: deck (required), type (required), fields (required), tags, +1 more. Returns: deck, noteId, modelName

anki_create_note_typeCreate Anki Note TypeA

Use when the user wants to define a new note schema/model with custom fields and card templates. Modifies the Anki collection structure — not for creating study content. Do not use when the user wants to create notes (use anki_create_note) or inspect an existing note type (use anki_get_note_type_info). Safety: confirm with the user before creating a new note type, as this changes the collection schema.

Inputs: name (required), fields (required), templates (required), css. Returns: fields, success, modelName, templates

anki_delete_noteDelete Anki NotesA
DestructiveIdempotent

Use when the user explicitly asks to permanently delete one or more notes. Do not use when the user only wants to inspect, search, or update notes. Safety: always confirm with the user before deleting any note — this action is irreversible.

Inputs: noteId, noteIds. Returns: noteIds, success, deletedCount

anki_get_note_infoGet Anki Note InfoA
Read-only

Get detailed information for one note ID.

Inputs: noteId (required). Returns: tags, fields, noteId, modelName

anki_get_note_type_infoGet Anki Note Type InfoA
Read-only

Use when inspecting a note type before creating or updating notes, especially for non-standard models. Returns fields and card templates. Call this before anki_create_note when using a custom note type. Do not use when the user wants to create notes or modify a note type.

Inputs: modelName (required), includeCss. Returns: css, fields, modelName, templates

anki_list_decksList Anki DecksA
Read-only

List all available Anki decks, optionally with deck IDs.

Inputs: includeIds. Returns: count, decks, deckIds

anki_list_note_typesList Anki Note TypesA
Read-only

List all available Anki note types/models.

Inputs: no named parameters. Returns: count, noteTypes

anki_list_tagsList Anki TagsA
Read-only

List all tags currently used in the Anki collection.

Inputs: no named parameters. Returns: tags, count

anki_remove_note_tagsRemove Tags From Anki NotesA
DestructiveIdempotent

Use when the user wants to remove specific tags from one or more existing notes. Do not use when the user wants to add tags (use anki_add_note_tags) or clear all tags (use anki_update_note with an empty tags array). Safety: confirm with the user before removing tags, as this modifies note metadata.

Inputs: tags (required), noteId, noteIds. Returns: tags, noteIds, success, operation, +1 more

anki_search_notesSearch Anki NotesA
Read-only

Search notes with Anki query syntax and return paginated note details.

Inputs: query (required), limit, offset. Returns: limit, notes, query, total, +3 more

anki_syncSync AnkiA

Request AnkiWeb sync. Requires {"confirm": true}: without it the call is refused, because a full sync can merge or overwrite local and remote collections. Success means Anki accepted the request, not that AnkiWeb completed it.

Inputs: confirm. Returns: message, success

anki_update_noteUpdate Anki NoteA
DestructiveIdempotent

Use when the user wants to edit the fields or replace the tags of an existing note. Do not use when the user only wants to inspect note content (use anki_get_note_info) or delete it (use anki_delete_note). Safety: confirm with the user before overwriting note content.

Inputs: noteId (required), tags, fields. Returns: noteId, success, updatedTags, updatedFields

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 16 tools

    Disambiguation4/5

    Each tool targets a distinct resource+action, and descriptions explicitly say when NOT to use a tool (e.g. update vs inspect vs delete notes), which strongly aids selection. Minor potential confusion exists between anki_create_note/anki_batch_create_notes and anki_list_note_types/anki_get_note_type_info, but the descriptions disambiguate these well.

    Naming Consistency5/5

    All 16 tools consistently follow anki_<verb>_<noun> snake_case (get_note_info, list_decks, create_note, add_note_tags, remove_note_tags). The pattern is predictable throughout with no stylistic deviations.

    Tool Count4/5

    16 tools is at the upper end of the comfortable range but each earns its place across notes, decks, tags, and note types. Slightly heavy, but not excessive for a full collection-management surface.

    Completeness4/5

    Strong coverage: notes have create/batch-create/get/update/delete/search, plus deck and tag management, note-type inspection/creation, sync, and connection check. Minor gaps remain (no deck delete/rename, no note-type update/delete, no single-note get by search shortcut), but core workflows are covered.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers