Skip to main content
Glama
anki-mcp
by yama662607

anki-mcp

npm version CI License: MIT

MCP server for safe, review-first Anki authoring built on official Anki concepts: profile, deck, note type, note, card, tag, and media.

It is designed for agents that need to inspect existing Anki structure, create or revise note types, add notes, preview the real Anki rendering, and only then release cards into study.

The package was renamed from anki-mcps to @yama662607/anki-mcp. The CLI command is now anki-mcp.

Why this exists

  • avoid custom abstractions on top of Anki's own data model

  • keep note creation review-first by suspending new cards until they are accepted

  • let agents learn from existing decks and note types before writing new content

  • keep note type changes additive-safe and validate them before apply

Related MCP server: Anki MCP Server

Features

  • deck and note discovery for example-driven authoring

  • additive-safe note type authoring with dryRun=true by default

  • lightweight note type linting with structured errors and warnings before apply

  • direct note creation with modelName, deckName, fields, and tags

  • review-first isolation by suspending new cards until the user keeps them

  • optimistic conflict detection for update_note

  • batch add/delete note operations with stable per-item outcomes

  • local media import for audio and image fields

  • frozen v1 contract resource at anki://contracts/v1/tools

Requirements

  • Node.js 22+

  • Anki with AnkiConnect enabled

  • optional: the anki-connect-extension add-on for read-only native preview instead of edit-dialog fallback

Quick start

  1. Install @yama662607/anki-mcp from npm.

  2. Start Anki with AnkiConnect enabled.

  3. Add the MCP server to your client.

  4. Ask the agent to run get_runtime_status first.

  5. Use the review-first flow: add_note -> open_note_preview -> update_note or set_note_cards_suspended(false).

For a first-time setup guide, see 5-minute quick start.

Dependency model

  • AnkiConnect is required for real Anki usage

  • anki-connect-extension is optional and provides a read-only native preview path

  • without the extension, open_note_preview falls back to opening the edit dialog

  • in ANKI_GATEWAY_MODE=memory, neither dependency is required because the server is running in test mode

Installation

From npm

npm install -g @yama662607/anki-mcp

From source

npm install
npm run build

Running

As a local command

anki-mcp

From source

npm run dev

MCP client setup

Codex

Official Codex setup is codex mcp add or ~/.codex/config.toml.

Add the server with the CLI:

codex mcp add anki-mcp \
  --env ANKI_CONNECT_URL=http://127.0.0.1:8765 \
  --env ANKI_ACTIVE_PROFILE=default \
  -- anki-mcp

Equivalent ~/.codex/config.toml entry:

[mcp_servers.anki-mcp]
command = "anki-mcp"

[mcp_servers.anki-mcp.env]
ANKI_ACTIVE_PROFILE = "default"
ANKI_CONNECT_URL = "http://127.0.0.1:8765"

Claude-style clients

Some MCP clients use mcpServers JSON instead.

{
  "mcpServers": {
    "anki-mcp": {
      "command": "anki-mcp",
      "env": {
        "ANKI_CONNECT_URL": "http://127.0.0.1:8765",
        "ANKI_ACTIVE_PROFILE": "default"
      }
    }
  }
}

Environment

  • ANKI_CONNECT_URL default: http://127.0.0.1:8765

  • ANKI_ACTIVE_PROFILE optional fallback for read tools

  • ANKI_MCP_DB_PATH default: user state directory (~/Library/Application Support/anki-mcp/anki-mcp.sqlite on macOS, %LOCALAPPDATA%\anki-mcp\anki-mcp.sqlite on Windows, $XDG_STATE_HOME/anki-mcp/anki-mcp.sqlite or ~/.local/state/anki-mcp/anki-mcp.sqlite on Linux)

  • ANKI_GATEWAY_MODE=memory for deterministic local tests without Anki

ANKI_MCP_DB_PATH is the internal SQLite path used for idempotency and operational metadata. DRAFT_DB_PATH is still accepted as a backward-compatible fallback.

Core workflow

  1. Verify setup with get_runtime_status.

  2. Discover existing structure with list_decks, list_note_types, get_note_type_schema, search_notes, and get_notes.

  3. Create missing decks with ensure_deck.

  4. Create or revise note types with upsert_note_type(dryRun=true) and inspect result.validation.

  5. Add review-pending content with add_note or add_notes_batch.

  6. Inspect the real Anki rendering with open_note_preview (the extension path uses a read-only native previewer, not a live editor dialog).

  7. After user feedback, call update_note, delete_note, or set_note_cards_suspended(suspended=false).

Media workflow

  1. import_media_asset

  2. Insert returned asset.fieldValue into the target note field

  3. add_note or update_note

  4. open_note_preview

Main docs

License

MIT

Available Tools

16 tools
add_noteAdd NoteB

Create a review-pending note directly from deck, note type, fields, and tags.

Inputs: fields (required), deckName (required), modelName (required), profileId (required), +3 more.

add_notes_batchAdd Notes BatchA

Create multiple review-pending notes with stable per-item outcomes.

Inputs: items (required), profileId (required).

delete_noteDelete NoteA
Destructive

Delete a note directly by note ID. Idempotent when already missing.

Inputs: noteId (required), profileId (required).

delete_notes_batchDelete Notes BatchB
Destructive

Delete multiple notes with stable per-item outcomes.

Inputs: items (required), profileId (required).

ensure_deckEnsure DeckA

Create a deck if missing. Safe and idempotent.

Inputs: deckName (required), profileId (required).

get_notesGet NotesA
Read-only

Read concrete note fields and metadata by note ID.

Inputs: noteIds (required), profileId.

get_note_type_schemaGet Note Type SchemaA
Read-only

Inspect fields, templates, CSS, and field bindings for one note type.

Inputs: modelName (required), profileId.

get_runtime_statusGet Runtime StatusA
Read-only

Report whether AnkiConnect is reachable and whether preview can use the optional extension path.

Inputs: profileId.

import_media_assetImport Media AssetA

Import a local audio or image file into Anki media and return an Anki-ready field value.

Inputs: localPath (required), profileId (required), mediaKind, preferredFilename.

list_decksList DecksA
Read-only

List available Anki decks using official hierarchical deck names.

Inputs: profileId.

list_note_typesList Note TypesB
Read-only

Return available Anki note types with field and template summaries.

Inputs: profileId.

open_note_previewOpen Note PreviewA
Read-only

Open the existing note in Anki Browser preview for human review.

Inputs: noteId (required), profileId.

search_notesSearch NotesA
Read-only

Search existing notes by Anki query, note type, deck, or tag filters.

Inputs: tags, limit, query, deckNames, +2 more.

set_note_cards_suspendedSet Note Cards SuspendedB

Suspend or unsuspend all cards generated from one note.

Inputs: noteId (required), profileId (required), suspended (required).

update_noteUpdate NoteA

Update note fields or tags with optimistic mod-timestamp conflict detection.

Inputs: noteId (required), profileId (required), expectedModTimestamp (required), tags, +1 more.

upsert_note_typeUpsert Note TypeA

Dry-run by default. Create or update a note type with additive-safe constraints.

Inputs: fields (required), modelName (required), profileId (required), templates (required), +3 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action. The batch variants (add_notes_batch, delete_notes_batch) are clearly differentiated from their singular counterparts by name and description, and get_note_type_schema vs list_note_types are distinct in detail level.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_noun pattern (e.g., list_decks, ensure_deck, add_note, delete_notes_batch). The use of 'batch' suffix is uniform and predictable.

    Tool Count4/5

    At 16 tools, the count is slightly above the typical 3-15 range, but each tool covers a meaningful aspect of Anki management (decks, note types, notes, media, runtime). The batch operations and preview tool add breadth without feeling redundant.

    Completeness4/5

    The tool surface provides robust CRUD for notes (add/get/update/delete/batch/suspend) and reasonable coverage for note types (list/get/upsert). Missing operations like deck deletion or note type deletion are minor gaps that can be worked around, but do not severely hinder typical Anki workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers