Skip to main content
Glama

anki-mcp

MCP server that exposes Anki as tools for Claude and other LLM clients. Powered by AnkiConnect.

Create notes, search your collection, review due cards, manage decks, track retention — all from your LLM client.

Prerequisites

  1. Anki must be running on the local machine.

  2. AnkiConnect add-on must be installed: Anki → Tools → Add-ons → Get Add-ons → code 2055492159.

    • Default port: 8765. Do not change it.

  3. Node.js 18+.

Related MCP server: Anki MCP Server

Quick start

npm install
npm run build   # tsc → dist/
npm start       # stdio transport

Development (no build step):

npm run dev     # tsx src/index.ts

Claude Desktop integration

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "anki": {
      "command": "node",
      "args": ["/absolute/path/to/anki_mcp/dist/index.js"]
    }
  }
}

Available tools

Tool

Description

create_notes

Create Basic or Cloze notes. Supports batch.

search_notes

Search with Anki browser syntax. Returns up to limit notes (default 50). Field search: Front:*keyword*.

update_note

Edit note fields in place by note ID. Preserves all card scheduling data.

add_tags

Add tags to notes by note ID. Supports :: hierarchy.

remove_tags

Remove tags from notes by note ID.

delete_notes

Delete notes by ID (also deletes associated cards).

move_notes

Move notes to another deck (resolves note IDs → card IDs internally).

create_deck

Create deck or subdeck (Parent::Child::Grandchild).

list_decks

List all decks with due/new/learn counts.

get_due_cards

Get cards due for review in a deck (default limit 20, max 100). Returns due field.

submit_answer

Record answer for a card: 1=Again, 2=Hard, 3=Good, 4=Easy.

reschedule_cards

Postpone cards by N days. days=0 = due today.

suspend_cards

Suspend (hide) or unsuspend cards. Never scheduled but not deleted.

forget_cards

Reset cards to new state. Wipes scheduling; preserves note content and tags.

get_insights

Retention stats, overdue count, mature/young cards for a deck or all decks.

sync

Trigger AnkiWeb sync.

AnkiConnect conventions

  • ID types: Note IDs and card IDs are different namespaces. Never pass note IDs where card IDs are expected.

  • Deck names: Use :: for hierarchy. Double-quotes in deck names must be escaped (\").

  • Search syntax: Anki browser syntax — is:due, is:new, prop:due<0 (overdue), deck:"Name", tag:foo, nid:123.

  • Error handling: All AnkiConnect failures throw AnkiConnectError(action, message). MCP SDK surfaces these to the client as tool errors.

Architecture

src/
  ankiconnect.ts      — HTTP client, branded ID types, AnkiConnectError
  tools/
    notes.ts          — create / search / update / delete / move notes + tag management
    decks.ts          — create / list / delete decks
    study.ts          — get due cards / submit answer / reschedule / suspend / forget
    insights.ts       — retention stats
  index.ts            — McpServer wiring (registerTool), stdio transport

Performance notes

  • search_notes: always pass a narrow query + explicit limit to avoid large payloads.

  • get_insights on large collections calls cardsInfo in 500-card chunks sequentially; expect ~1s per 500 cards.

  • get_insights without a deck argument fans out cardReviews to every deck — adds one request per deck.

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/luiz-santos-it/anki-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server