Skip to main content
Glama

AnkiMCP-Server (Add-on)

Ein Anki-Add-on, das deine Sammlung über das Model Context Protocol (MCP) für KI-Assistenten zugänglich macht.

Was ist das?

Der AnkiMCP-Server führt einen lokalen MCP-Server innerhalb von Anki aus, wodurch KI-Assistenten wie Claude mit deiner Karteikartensammlung interagieren können. Dies ermöglicht KI-gestützte Lernsitzungen, das Erstellen von Karten und die Verwaltung der Sammlung.

Teil des ankimcp.ai-Projekts.

Related MCP server: Anki MCP Server

Hinweis zum ersten Start

Beim ersten Start lädt dieses Add-on pydantic_core (~2 MB) von PyPI herunter. Dies ist erforderlich, da pydantic_core plattformspezifische Binärdateien (Windows/macOS/Linux) enthält, die nicht in einer einzelnen Add-on-Datei gebündelt werden können.

Funktionen

  • Lokaler HTTP-Server – Läuft standardmäßig unter http://127.0.0.1:3141/

  • MCP-Protokoll – Kompatibel mit jedem MCP-Client (Claude Desktop, etc.)

  • Auto-Start – Der Server startet automatisch, wenn Anki geöffnet wird

  • Tunnel-freundlich – Funktioniert mit Cloudflare Tunnel, ngrok, etc.

  • Plattformübergreifend – Funktioniert unter macOS, Windows und Linux (x64 und ARM)

Installation

Über AnkiWeb (empfohlen)

  1. Öffne Anki und gehe zu Extras → Add-ons → Add-ons herunterladen...

  2. Gib den Code ein: 124672614

  3. Starte Anki neu

Über GitHub Releases

  1. Lade anki_mcp_server.ankiaddon von den Releases herunter

  2. Doppelklicke zum Installieren oder verwende Extras → Add-ons → Aus Datei installieren...

  3. Starte Anki neu

NixOS

Mit Flakes (empfohlen)

Füge den Flake-Input hinzu und verwende das vorgefertigte Paket:

# flake.nix
{
  inputs.anki-mcp.url = "github:ankimcp/anki-mcp-server-addon";

  outputs = { nixpkgs, anki-mcp, ... }: {
    # Option A: Standalone — Anki with the addon pre-installed
    environment.systemPackages = [
      anki-mcp.packages.${system}.default
    ];

    # Option B: Composable with other addons via overlay
    nixpkgs.overlays = [ anki-mcp.overlays.default ];
    environment.systemPackages = [
      (pkgs.anki.withAddons [ pkgs.ankiAddons.anki-mcp-server ])
    ];
  };
}

Ohne Flakes

# configuration.nix
{ pkgs, ... }:
let
  python3 = pkgs.python3;

  ankiMcpPythonDeps = python3.withPackages (ps: with ps; [
    mcp pydantic pydantic-settings starlette uvicorn anyio httpx websockets
  ]);

  anki-mcp-server = pkgs.anki-utils.buildAnkiAddon (finalAttrs: {
    pname = "anki-mcp-server";
    version = "0.13.0";
    src = pkgs.fetchFromGitHub {
      owner = "ankimcp";
      repo = "anki-mcp-server-addon";
      rev = "v${finalAttrs.version}";
      hash = ""; # nix will tell you the correct hash on first build
    };
    sourceRoot = "${finalAttrs.src.name}/anki_mcp_server";
  });

  ankiWithMcp = pkgs.anki.withAddons [ anki-mcp-server ];

  ankiWrapped = pkgs.symlinkJoin {
    name = "anki-with-mcp";
    paths = [ ankiWithMcp ];
    nativeBuildInputs = [ pkgs.makeWrapper ];
    postBuild = ''
      wrapProgram $out/bin/anki \
        --prefix PYTHONPATH ':' "${ankiMcpPythonDeps}/${python3.sitePackages}"
    '';
  };
in
{
  environment.systemPackages = [ ankiWrapped ];
}

Verwendung

Der Server startet automatisch, wenn du Anki öffnest. Überprüfe den Status über Extras → AnkiMCP Server Settings...

Verbindung mit Claude Desktop

Erfordert ein installiertes Node.js. Füge dies zu deiner Claude Desktop-Konfiguration hinzu (~/Library/Application Support/Claude/claude_desktop_config.json unter macOS):

{
  "mcpServers": {
    "anki": {
      "command": "npx",
      "args": ["mcp-remote", "http://127.0.0.1:3141"]
    }
  }
}

Hinweis: Claude Desktop unterstützt nativ keine HTTP-Server in seiner JSON-Konfiguration – mcp-remote überbrückt die Verbindung via stdio.

Verbindung mit Claude Code

claude mcp add anki --transport http http://127.0.0.1:3141/

Konfiguration

Bearbeitung über Ankis Extras → Add-ons → AnkiMCP Server → Konfiguration:

{
  "mode": "http",
  "http_port": 3141,
  "http_host": "127.0.0.1",
  "http_path": "",
  "cors_origins": [],
  "cors_expose_headers": ["mcp-session-id", "mcp-protocol-version"],
  "auto_connect_on_startup": true,
  "disabled_tools": [],
  "media_import_dir": "",
  "media_allowed_types": [],
  "media_allowed_hosts": []
}

Tools deaktivieren

Verstecke bestimmte Tools oder Aktionen vor KI-Clients, um den Token-Verbrauch zu reduzieren:

{
  "disabled_tools": [
    "sync",
    "card_management:bury",
    "card_management:unbury"
  ]
}
  • "tool_name" — deaktiviert das gesamte Tool

  • "tool_name:action" — deaktiviert eine spezifische Aktion innerhalb eines Tools mit mehreren Aktionen

Deaktivierte Tools werden vollständig aus dem MCP-Schema entfernt – KI-Clients sehen sie niemals. Tippfehler in Tool-/Aktionsnamen führen zu Konsolenwarnungen.

Benutzerdefinierter Pfad

Setze http_path, um den MCP-Endpunkt unter einem benutzerdefinierten Pfad bereitzustellen. Nützlich, wenn Anki über einen Tunnel (Cloudflare, ngrok) freigegeben wird, um einen vollständig offenen Endpunkt zu vermeiden:

{
  "http_path": "my-secret-path"
}

Der Server ist dann unter http://localhost:3141/my-secret-path/ statt unter dem Root-Verzeichnis erreichbar. Leer lassen für Standardverhalten.

CORS-Konfiguration

Um browserbasierte MCP-Clients (wie den webbasierten MCP Inspector) zuzulassen, füge erlaubte Ursprünge hinzu:

{
  "cors_origins": ["https://inspector.example.com", "http://localhost:5173"]
}

Verwende ["*"], um alle Ursprünge zuzulassen (für die Produktion nicht empfohlen).

Die Einstellung cors_expose_headers steuert, welche Antwort-Header Browser lesen können. Die Standardwerte (mcp-session-id, mcp-protocol-version) sind erforderlich, damit das MCP Streamable HTTP-Protokoll in Browsern funktioniert.

Mediensicherheit

Danke an Hideaki Takahashi (Columbia University) für die verantwortungsvolle Offenlegung der Media-Path-Traversal-Schwachstelle.

Das Tool store_media_file validiert alle Eingaben, um Path-Traversal- und SSRF-Angriffe zu verhindern:

  • Dateipfade sind auf Mediendateien beschränkt (Bilder, Audio, Video) durch MIME-Typ-Prüfung

  • URLs müssen http:// oder https:// verwenden und dürfen nicht auf private/interne Netzwerke zielen

  • Dateinamen werden bereinigt, um Path-Traversal-Sequenzen zu entfernen

Optionale Härtung über die Konfiguration:

{
  "media_import_dir": "/Users/me/anki-media",
  "media_allowed_types": ["application/pdf"],
  "media_allowed_hosts": ["192.168.1.50", "my-nas.local"]
}
  • media_import_dir — beschränkt Dateipfad-Importe auf diesen Verzeichnisbaum (leer = keine Beschränkung)

  • media_allowed_types — erlaubt zusätzliche MIME-Typen über Bild/Audio/Video hinaus

  • media_allowed_hosts — erlaubt spezifischen Hosts, die Blockierung privater Netzwerke zu umgehen

Verfügbare Tools

Essenzielle Tools

Tool

Beschreibung

sync

Synchronisiert die Sammlung mit AnkiWeb

list_decks

Listet alle Stapel in der Sammlung auf

create_deck

Erstellt einen neuen Stapel

find_notes

Sucht nach Notizen unter Verwendung der Anki-Suchsyntax

notes_info

Ruft detaillierte Informationen zu Notizen ab

add_note

Fügt eine neue Notiz zu einem Stapel hinzu

add_notes

Fügt bis zu 100 Notizen im Batch hinzu, die denselben Stapel und dasselbe Modell teilen. Verwendet Ankis native Batch-API für atomares Rückgängigmachen. Unterstützt teilweisen Erfolg – einzelne Fehler beeinträchtigen andere nicht

card_management

Verwaltet Karten mit 9 Aktionen: reposition (Lernreihenfolge festlegen), change_deck (zwischen Stapeln verschieben), bury/unbury (bis morgen verbergen), suspend/unsuspend (auf unbestimmte Zeit von der Wiederholung ausschließen), set_flag (Farbmarkierungen 0-7), set_due_date (mit Tagen DSL neu terminieren), forget_cards (auf neu zurücksetzen)

tag_management

Verwaltet Tags mit 5 Aktionen: add_tags/remove_tags (Massen-Hinzufügen/-Entfernen bei Notizen), replace_tags (einen Tag durch einen anderen ersetzen), get_tags (alle auflisten), clear_unused_tags (verwaiste Tags entfernen)

filtered_deck

Lebenszyklus gefilterter Stapel: create_or_update (gefilterte Stapel mit Suchbegriffen erstellen oder ändern), rebuild (neu befüllen), empty (Karten in Ursprungsstapel zurückgeben), delete

update_note_fields

Aktualisiert Felder bestehender Notizen

delete_notes

Löscht Notizen aus der Sammlung

get_due_cards

Ruft die nächste fällige Karte zur Wiederholung ab (unterstützt skip_images/skip_audio für den Sprachmodus)

present_card

Ruft Karteninhalt zur Wiederholung ab

rate_card

Bewertet eine Karte nach der Wiederholung (Nochmal/Schwer/Gut/Einfach)

model_names

Listet verfügbare Notiztypen auf

model_field_names

Ruft Feldnamen und Beschreibungen für einen Notiztyp ab

model_styling

Ruft CSS-Styling für einen Notiztyp ab

update_model_styling

Aktualisiert CSS-Styling für einen Notiztyp

create_model

Erstellt einen neuen Notiztyp

store_media_file

Speichert eine Mediendatei (Bild/Audio) via Base64, Dateipfad oder URL. Dateipfade werden gegen eine Positivliste von Medientypen validiert; URLs werden auf SSRF geprüft

get_media_files_names

Listet Mediendateien auf, die einem Muster entsprechen

delete_media_file

Verschiebt eine Mediendatei in Ankis Papierkorb (wiederherstellbar über Medien prüfen)

FSRS-Tools

Tool

Beschreibung

get_fsrs_params

Ruft FSRS-Planerparameter für Stapelvorgaben ab

set_fsrs_params

Aktualisiert FSRS-Parameter (Gewichte, gewünschte Behaltensrate, maximales Intervall)

get_card_memory_state

Ruft den FSRS-Speicherzustand (Stabilität, Schwierigkeit, Abrufbarkeit) für Karten ab

optimize_fsrs_params

Führt FSRS-Parameteroptimierung unter Verwendung von Ankis integriertem Optimierer aus

GUI-Tools

Diese Tools interagieren mit der Benutzeroberfläche von Anki:

Tool

Beschreibung

gui_browse

Öffnet den Kartenbrowser mit einer Suchanfrage

gui_add_cards

Öffnet den Dialog „Karten hinzufügen“

gui_edit_note

Öffnet den Notiz-Editor für eine spezifische Notiz

gui_current_card

Ruft Informationen über die aktuell angezeigte Karte ab

gui_show_question

Zeigt die Fragen-Seite der aktuellen Karte

gui_show_answer

Zeigt die Antwort-Seite der aktuellen Karte

gui_select_card

Wählt eine spezifische Karte im Wiederholungsmodus aus

gui_deck_browser

Navigiert zum Stapel-Browser

gui_undo

Macht die letzte Operation rückgängig

Ressourcen

Ressource

URI

Beschreibung

system_info

anki://system-info

Anki-Version, Profil- und Planer-Informationen

query_syntax

anki://query-syntax

Referenz zur Anki-Suchabfragesyntax

schema

anki://schema

Dokumentation des Datenmodells (Entitäten, Felder, Beziehungen)

stats_today

anki://stats/today

Lernstatistik von heute

stats_forecast

anki://stats/forecast

30-Tage-Wiederholungsprognose

stats_collection

anki://stats/collection

Gesamte Sammlungsstatistik

fsrs_config

anki://fsrs/config

Zusammenfassung der FSRS-Konfiguration und Parameter

Prompts

Prompt

Beschreibung

review_session

Geführter Wiederholungs-Workflow (interaktiv, schnell oder Sprachmodus)

Anforderungen

  • Anki 25.07 oder neuer (enthält Python 3.13)

  • Anki 25.02 und älter enthalten Python 3.9, was nicht unterstützt wird — das MCP SDK erfordert Python 3.10+ (#8)

Architektur

Das Add-on führt einen MCP-Server in einem Hintergrund-Thread mit HTTP-Transport (FastMCP + uvicorn) aus. Alle Anki-Operationen werden über ein Warteschlangensystem an den Qt-Haupt-Thread überbrückt, nach demselben bewährten Muster wie AnkiConnect.

Details findest du in der Anki Add-on Development Documentation.

Entwicklung

E2E-Tests ausführen

E2E-Tests laufen gegen eine echte Anki-Instanz in Docker unter Verwendung von headless-anki.

# Install test dependencies
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt

# Build the addon
./package.sh

# Start Anki container
cd .docker && docker compose up -d && cd ..

# Run tests (waits for server automatically)
pytest tests/e2e/ -v

# Stop container
cd .docker && docker compose down

Oder verwende die Makefile-Shortcuts:

make e2e        # Build, start container, run tests, stop
make e2e-up     # Just start container
make e2e-test   # Just run tests
make e2e-down   # Just stop container

CI

E2E-Tests laufen automatisch bei Push auf einen beliebigen Branch und bei PRs auf main. Siehe .github/workflows/e2e.yml.

Lizenz

AGPL-3.0-or-later

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables AI assistants to interact with the Anki flashcard application for studying, deck management, and note creation. It supports natural language interaction for reviewing cards, searching content, and managing media files across local and remote environments.
    1,716
    467
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage Anki flashcard collections by creating, searching, and updating cards through a standardized interface. It supports media handling, batch operations, and review scheduling via the AnkiConnect add-on.
    6
    2
    MIT

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/ankimcp/anki-mcp-server-addon'

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