Anki MCP

resmi

Server MCP yang memungkinkan asisten AI berinteraksi dengan Anki, aplikasi kartu flash pengulangan berjarak.

Apa yang bisa Anda lakukan dengan Anki MCP?

  • Tinjau kartu yang jatuh tempo di dek tertentu — minta asisten untuk mengambil dan menampilkan kartu jatuh tempo Anda menggunakan get_due_cards dan present_card, lalu catat peringkat Anda dengan rate_card.
  • Buat kartu kilas secara massal dari daftar — berikan sekumpulan istilah dan definisi, lalu minta asisten untuk membuat hingga 100 catatan sekaligus melalui addNotes.
  • Cari dan perbarui catatan yang ada — temukan catatan dengan findNotes menggunakan sintaks kueri Anki, periksa dengan notesInfo, dan ubah bidang dengan updateNoteFields.
  • Kelola jenis catatan dan gaya — buat jenis catatan baru dengan createModel, sesuaikan CSS-nya dengan updateModelStyling, atau ubah templat kartunya dengan updateModelTemplates.
  • Impor file media ke dalam koleksi Anda — unggah file gambar atau audio dari jalur lokal atau URL menggunakan storeMediaFile dan rujuk dalam bidang catatan.

Dokumentasi

Server Anki MCP

Tests npm version

Anki + MCP Integration

Integrasikan Anki dengan asisten AI secara mulus melalui Model Context Protocol

Beta - Proyek ini dalam pengembangan aktif. API dan fitur dapat berubah.

Server Model Context Protocol (MCP) yang memungkinkan asisten AI berinteraksi dengan Anki, aplikasi kartu pengingat berbasis pengulangan terjadwal.

Ubah pengalaman Anki Anda dengan interaksi bahasa alami - seperti memiliki tutor pribadi. Asisten AI tidak hanya menyajikan pertanyaan dan jawaban; ia dapat menjelaskan konsep, membuat proses belajar lebih menarik dan seperti manusia, memberikan konteks, dan menyesuaikan dengan gaya belajar Anda. Ia dapat membuat dan mengedit catatan secara langsung, mengubah sesi belajar Anda menjadi percakapan dinamis. Fitur lainnya segera hadir!

Contoh dan Tutorial

Untuk panduan lengkap, contoh dunia nyata, dan tutorial langkah demi langkah tentang penggunaan server MCP ini dengan Claude Desktop, kunjungi:

ankimcp.ai - Dokumentasi lengkap dengan contoh praktis dan kasus penggunaan

Lihat docs/ untuk dokumentasi tambahan, termasuk panduan pengaturan peninjau dan dek Anki contoh.

Contoh Kasus Penggunaan

Tiga prompt representatif yang menunjukkan alur alat yang diaktifkan server ini:

  1. "Bantu saya meninjau dek Bahasa Spanyol saya." — Asisten menyinkronkan dengan AnkiWeb (sync), mengambil kartu yang jatuh tempo (get_due_cards dengan filter dek), menyajikan setiap kartu (present_card), dan mencatat penilaian Anda (rate_card). Percakapan belajar alami dengan penjelasan yang disesuaikan untuk Anda.

  2. "Buat 10 kartu kosakata Bahasa Arab dengan gaya RTL." — Asisten mencantumkan tipe catatan (modelNames), membuat model RTL kustom jika diperlukan (createModel + updateModelStyling untuk CSS kanan-ke-kiri), lalu membuat kartu secara batch (addNotes).

  3. "Impor gambar ini dari folder Unduhan saya ke bagian depan catatan yang dipilih." — Asisten mengunggah file lokal (storeMediaFile dengan jalur file), membaca catatan yang saat ini dipilih dari browser (guiSelectedNotes + notesInfo), dan memperbarui bidang depan dengan tag <img> (updateNoteFields).

Alat yang Tersedia

Server menyediakan 42 alat MCP — 31 alat penting untuk operasi Anki sehari-hari dan 11 alat GUI yang menggerakkan antarmuka desktop Anki untuk alur kerja pengeditan/pembuatan catatan.

Alat Penting

Tinjau & Belajar

  • sync - Sinkronkan dengan AnkiWeb untuk menarik data terbaru dan mendorong perubahan
  • get_due_cards - Dapatkan kartu yang jatuh tempo untuk ditinjau, opsional difilter berdasarkan dek
  • get_cards - Dapatkan kartu dengan pemfilteran fleksibel berdasarkan status (jatuh tempo, baru, belajar, ditangguhkan, dikubur) dan dek
  • present_card - Tampilkan kartu untuk ditinjau dengan sisi pertanyaan/depannya
  • rate_card - Nilai kinerja kartu (Lagi, Sulit, Baik, Mudah) dan jadwalkan tinjauan berikutnya

Manajemen Dek

  • listDecks - Cantumkan semua dek, opsional dengan statistik jumlah kartu per dek
  • deckStats - Dapatkan statistik komprehensif untuk satu dek (jumlah, distribusi kemudahan/interval)
  • createDeck - Buat dek kosong baru (mendukung Parent::Child, maks 2 level)
  • changeDeck - Pindahkan kartu ke dek lain (dibuat jika belum ada)

Manajemen Catatan

  • addNote - Buat satu catatan dengan bidang dan tag yang ditentukan
  • addNotes - Buat batch hingga 100 catatan yang berbagi dek dan model (keberhasilan sebagian didukung)
  • findNotes - Cari catatan menggunakan sintaks kueri Anki (deck:, tag:, is:due, dll.)
  • notesInfo - Dapatkan informasi rinci tentang catatan (bidang, tag, gaya CSS)
  • updateNoteFields - Perbarui bidang catatan yang ada (sadar CSS, mendukung konten HTML)
  • deleteNotes - Hapus catatan dan semua kartu terkait (destruktif, memerlukan konfirmasi)

Manajemen Tag

  • getTags - Dapatkan semua tag dalam koleksi (gunakan terlebih dahulu untuk menghindari duplikasi)
  • addTags - Tambahkan tag yang dipisahkan spasi ke catatan tertentu
  • removeTags - Hapus tag yang dipisahkan spasi dari catatan tertentu
  • replaceTags - Ganti nama tag di seluruh catatan tertentu
  • clearUnusedTags - Hapus tag yatim yang tidak digunakan oleh catatan apa pun (destruktif)

Manajemen Media

  • getMediaFilesNames - Cantumkan file media di collection.media, opsional difilter berdasarkan pola
  • retrieveMediaFile - Unduh file media sebagai konten base64
  • storeMediaFile - Unggah media dari data base64, jalur file absolut, atau URL
  • deleteMediaFile - Hapus file media dari collection.media (destruktif)

💡 Praktik Terbaik untuk Gambar:

  • Gunakan jalur file (mis., /Users/you/image.png) - Cepat dan efisien
  • Gunakan URL (mis., https://example.com/image.jpg) - Unduhan langsung
  • Hindari base64 - Sangat lambat dan tidak efisien token

Cukup beri tahu Claude di mana gambar berada, dan ia akan menangani unggahan secara otomatis menggunakan metode paling efisien.

Manajemen Model/Templat

  • modelNames - Cantumkan semua tipe/model catatan yang tersedia
  • modelFieldNames - Dapatkan nama bidang untuk tipe catatan tertentu
  • modelStyling - Dapatkan informasi gaya CSS untuk tipe catatan
  • modelTemplates - Dapatkan templat kartu (HTML Depan dan Belakang) untuk tipe catatan
  • createModel - Buat tipe catatan baru dengan bidang kustom, templat kartu, dan CSS (mis., model RTL)
  • updateModelStyling - Perbarui gaya CSS untuk tipe catatan yang ada (berlaku untuk semua kartunya)
  • updateModelTemplates - Perbarui templat kartu (HTML Depan dan Belakang) untuk tipe catatan yang ada (berlaku untuk semua kartunya)
  • addModelField - Tambahkan bidang baru ke tipe catatan yang ada (ditambahkan di akhir atau disisipkan pada posisi tertentu)
  • removeModelField - Hapus bidang dari tipe catatan yang ada (menghapus kontennya dari semua catatan; memerlukan konfirmasi eksplisit)
  • renameModelField - Ganti nama bidang dalam tipe catatan yang ada (templat kartu yang merujuk nama lama harus diperbarui secara terpisah)
  • repositionModelField - Ubah posisi bidang dalam tipe catatan yang ada

Statistik

  • collection_stats - Statistik agregat di semua dek dengan rincian per dek
  • review_stats - Analisis riwayat tinjauan (pola temporal, metrik retensi, rentetan belajar)

Alat GUI

Alat yang menggerakkan antarmuka desktop Anki. Ditujukan untuk alur kerja pengeditan/pembuatan catatan dan manajemen dek, bukan untuk sesi tinjauan.

  • guiBrowse - Buka Browser Kartu dan cari kartu
  • guiSelectCard - Pilih kartu tertentu di Browser Kartu
  • guiSelectedNotes - Dapatkan ID catatan yang saat ini dipilih di Browser Kartu
  • guiAddCards - Buka dialog Tambah Kartu dengan detail catatan prasetel
  • guiEditNote - Buka editor catatan untuk catatan tertentu
  • guiDeckOverview - Buka dialog Ikhtisar Dek untuk dek tertentu
  • guiDeckBrowser - Buka dialog Browser Dek
  • guiCurrentCard - Dapatkan info tentang kartu saat ini dalam mode tinjauan
  • guiShowQuestion - Tampilkan sisi pertanyaan dari kartu saat ini
  • guiShowAnswer - Tampilkan sisi jawaban dari kartu saat ini
  • guiUndo - Batalkan tindakan terakhir di Anki

Prasyarat

Instalasi

Ada beberapa cara untuk mendapatkan server ke mesin Anda. Setelah terinstal, buka Menghubungkan Klien AI untuk menghubungkannya ke asisten AI Anda — secara lokal atau jarak jauh.

npm (global atau npx)

Cara umum untuk menginstal server, cocok untuk klien MCP apa pun yang meluncurkannya secara langsung.

Instal secara global untuk klien yang menjalankan perintah ankimcp:

npm install -g @ankimcp/anki-mcp-server

Atau jalankan sesuai permintaan tanpa perlu instalasi:

npx @ankimcp/anki-mcp-server

Bundel MCPB (Direkomendasikan untuk Claude Desktop)

Cara termudah untuk menginstal server MCP ini untuk Claude Desktop:

  1. Unduh bundel .mcpb terbaru dari halaman Rilis
  2. Di Claude Desktop, instal ekstensi:
    • Metode 1: Buka Pengaturan → Ekstensi, lalu seret dan lepas file .mcpb
    • Metode 2: Buka Pengaturan → Pengembang → Ekstensi → Instal Ekstensi, lalu pilih file .mcpb
  3. Konfigurasikan URL AnkiConnect jika diperlukan (default ke http://localhost:8765)
  4. Mulai ulang Claude Desktop

Selesai! Bundel mencakup semua yang diperlukan untuk menjalankan server secara lokal.

Untuk peninjau Direktori MCP Anthropic: panduan langkah demi langkah dari nol hingga integrasi dengan dek contoh yang telah diisi tersedia di docs/reviewer-setup.md.

Instal dari Sumber (untuk pengembangan)

Untuk pengembangan atau penggunaan lanjutan:

npm install
npm run build

Menghubungkan Klien AI

Ada dua cara asisten AI dapat menjangkau server ini, tergantung di mana asisten berjalan:

  • Lokal — server berjalan di mesin yang sama dengan klien AI (Claude Desktop, Cursor, Cline, Zed, atau sesi browser lokal). Gunakan STDIO untuk klien MCP desktop, HTTP untuk alat berbasis web lokal.
  • Jarak Jauh — AI yang dihosting/jarak jauh (mis. ChatGPT atau Claude.ai di cloud) perlu menjangkau Anki yang berjalan di mesin lokal Anda. Gunakan Tunnel terkelola (✅ direkomendasikan — terautentikasi) atau, sebagai alternatif lebih ringan tanpa autentikasi, ngrok.

Lokal

Server berjalan di komputer yang sama dengan klien AI Anda dan berkomunikasi dengan AnkiConnect di localhost.

STDIO (integrasi lokal utama)

STDIO adalah transport standar untuk klien MCP desktop lokal — Claude Desktop, Cursor IDE, Cline, Zed Editor, dan lainnya. Klien meluncurkan server sebagai subproses dan berkomunikasi melalui input/output standar.

Klien yang Didukung:

Untuk Claude Desktop, bundel MCPB adalah jalur termudah. Untuk klien lain, konfigurasikan paket npm dengan flag --stdio.

Konfigurasi - Pilih satu metode:

Metode 1: Menggunakan npx (direkomendasikan - tidak perlu instalasi)

{
  "mcpServers": {
    "anki-mcp": {
      "command": "npx",
      "args": ["-y", "@ankimcp/anki-mcp-server", "--stdio"],
      "env": {
        "ANKI_CONNECT_URL": "http://localhost:8765"
      }
    }
  }
}

Metode 2: Menggunakan instalasi global

Pertama, instal secara global:

npm install -g @ankimcp/anki-mcp-server

Kemudian konfigurasikan:

{
  "mcpServers": {
    "anki-mcp": {
      "command": "ankimcp",
      "args": ["--stdio"],
      "env": {
        "ANKI_CONNECT_URL": "http://localhost:8765"
      }
    }
  }
}

Lokasi file konfigurasi:

  • Cursor IDE: ~/.cursor/mcp.json (macOS/Linux) atau %USERPROFILE%\.cursor\mcp.json (Windows)
  • Cline: Dapat diakses melalui UI pengaturan di VS Code
  • Zed Editor: Instal sebagai ekstensi MCP melalui pasar ekstensi

Untuk fitur spesifik klien dan pemecahan masalah, lihat dokumentasi klien MCP Anda. Lihat juga Hubungkan ke Claude Desktop untuk konfigurasi yang langsung menunjuk ke dist/main-stdio.js yang dibangun.

HTTP (AI berbasis web lokal)

Mode HTTP menjalankan server sebagai server web lokal yang menggunakan protokol MCP Streamable HTTP. Ini adalah transport yang digunakan alat AI berbasis web saat diarahkan ke mesin Anda, dan juga yang diekspos oleh opsi Jarak Jauh ke dunia luar. Secara mandiri, mode HTTP hanya mengikat ke localhost.

Mengikat di luar localhost? Jika Anda melewatkan --host 0.0.0.0 (atau berjalan di belakang proxy terbalik/domain publik), server hanya menerima header Host loopback secara default untuk perlindungan DNS-rebinding — atur ALLOWED_HOSTS ke nama host yang digunakan klien. Lihat Konfigurasi Mode HTTP.

Pengaturan - Pilih satu metode:

Metode 1: Menggunakan npx (direkomendasikan - tidak perlu instalasi)

# Quick start
npx @ankimcp/anki-mcp-server

# With custom options
npx @ankimcp/anki-mcp-server --port 8080 --host 0.0.0.0
npx @ankimcp/anki-mcp-server --anki-connect http://localhost:8765

Metode 2: Menggunakan instalasi global

# Install once
npm install -g @ankimcp/anki-mcp-server

# Run the server
ankimcp

# With custom options
ankimcp --port 8080 --host 0.0.0.0
ankimcp --anki-connect http://localhost:8765

Metode 3: Instal dari sumber (untuk pengembangan)

npm install
npm run build
npm run start:prod:http

Untuk membuat server HTTP lokal dapat dijangkau oleh AI yang dihosting di cloud, gunakan salah satu opsi Jarak Jauh di bawah ini.

Jarak Jauh

AI yang dihosting/jarak jauh (seperti ChatGPT atau Claude.ai yang berjalan di cloud) tidak dapat menjangkau localhost secara langsung. Opsi-opsi ini mengekspos Anki lokal Anda ke internet sehingga asisten jarak jauh dapat berkomunikasi dengannya.

Tunnel (✅ Direkomendasikan)

Jalur jarak jauh yang direkomendasikan — terautentikasi & aman. Tidak seperti port publik mentah, mode tunnel mengharuskan Anda untuk masuk (alur perangkat OAuth 2.0), sehingga endpoint tidak terbuka untuk siapa pun yang menebak URL.

Mode tunnel memungkinkan asisten AI berbasis web menjangkau Anki lokal Anda tanpa menjalankan tunnel sendiri. Server terhubung keluar ke layanan tunnel AnkiMCP terkelola (wss://tunnel.ankimcp.ai) melalui WebSocket dan diberikan URL publik. Autentikasi sudah terintegrasi — tidak memerlukan akun ngrok atau proses tunnel terpisah, dan Anda cukup masuk sekali.

Masuk (alur perangkat OAuth):

Mode tunnel menggunakan OAuth 2.0 Device Authorization Grant. Proses masuk akan membuka browser Anda secara otomatis ke halaman persetujuan dengan kode yang sudah tertanam di URL — tidak perlu mengetik apa pun, cukup setujui. (Jika browser tidak dapat dibuka, terminal akan mencetak URL verifikasi dan kode untuk dimasukkan secara manual sebagai fallback.) Jika berhasil, kredensial disimpan ke ~/.ankimcp/credentials.json (izin file 0600).

# Pre-authenticate (optional — --tunnel will trigger this automatically if needed)
ankimcp --login
npx @ankimcp/anki-mcp-server --login

# Clear saved credentials
ankimcp --logout

Mulai tunnel:

# Connect to the managed tunnel service (wss://tunnel.ankimcp.ai)
ankimcp --tunnel
npx @ankimcp/anki-mcp-server --tunnel

# Override the tunnel server URL (must be ws:// or wss://) — e.g. for self-hosting
ankimcp --tunnel wss://my-tunnel.example.com

Jika tidak ada kredensial, --tunnel secara otomatis memulai alur masuk terlebih dahulu, lalu melanjutkan ke tunnel. Login otomatis ini memerlukan terminal interaktif — ketika stdout bukan TTY (systemd, Docker headless, CI), server akan langsung gagal dan meminta Anda menjalankan ankimcp --login terlebih dahulu. Setelah terhubung, URL tunnel publik akan dicetak; tekan Ctrl+C untuk memutuskan. Bagikan URL tersebut dengan asisten AI Anda.

Variabel lingkungan mode tunnel:

VariabelDeskripsiDefault
TUNNEL_SERVER_URLURL WebSocket server tunnel (nilai flag --tunnel/--login menimpa ini)wss://tunnel.ankimcp.ai
TUNNEL_AUTH_CLIENT_IDID klien OAuth untuk alur perangkat. Lanjutan — hanya diperlukan saat mengarah ke layanan tunnel/auth yang dihosting sendiri.(bawaan)

Endpoint auth alur perangkat (/auth/device, /auth/token) diturunkan dari TUNNEL_SERVER_URL, jadi mengarahkan --tunnel (atau TUNNEL_SERVER_URL) ke host yang berbeda juga memindahkan autentikasi ke host tersebut.

Cara kerjanya: Mode tunnel menjalankan server MCP dalam proses di belakang transport dalam memori (McpModule dimulai tanpa transport bawaan). TunnelMcpService menghubungkan transport dalam memori tersebut ke server MCP, dan TunnelClient menjembataninya ke layanan tunnel jarak jauh melalui WebSocket — menyampaikan permintaan MCP masuk dan respons keluar. AnkiConnect tetap hanya dijangkau di mesin lokal Anda.

ngrok (alternatif tanpa autentikasi)

Jika Anda lebih suka mengekspos mode HTTP lokal secara publik tanpa akun di tunnel terkelola, flag bawaan --ngrok meluncurkan subproses ngrok (src/services/ngrok.service.ts) dan mencetak URL publik di banner startup:

# One-time ngrok setup, then:
ankimcp --ngrok

Rute ini tanpa autentikasi — siapa pun dengan URL tersebut dapat menjangkau Anki Anda, jadi kurang aman dibandingkan Tunnel. Utamakan Tunnel kecuali Anda memiliki alasan khusus untuk mengelola endpoint ngrok sendiri. (Memerlukan instalasi ngrok global dan authtoken.)

Flag --ngrok meluncurkan ngrok dengan --host-header=rewrite, sehingga ngrok menulis ulang Host upstream menjadi localhost sebelum meneruskan. Itu menjaga permintaan tetap dalam daftar izin Host loopback (lihat perlindungan DNS-rebinding) tanpa Anda harus menambahkan domain *.ngrok publik ke ALLOWED_HOSTS. Jika Anda menjalankan ngrok secara manual, gunakan flag yang sama — ngrok http --host-header=rewrite 3000 — jika tidak, ngrok meneruskan nama host ngrok publik sebagai Host dan server menolaknya dengan 403.

Opsi CLI (semua mode)

ankimcp [options]

Options:
  --stdio                        Run in STDIO mode (for MCP clients)
  --tunnel [url]                 Connect via the managed tunnel (authenticated)
  --login                        Authenticate for tunnel mode (OAuth device flow)
  --logout                       Clear saved tunnel credentials
  -p, --port <port>              Port to listen on (HTTP mode, default: 3000)
  -h, --host <host>              Host to bind to (HTTP mode, default: 127.0.0.1)
  -a, --anki-connect <url>       AnkiConnect URL (default: http://localhost:8765)
  --ngrok                        Start ngrok tunnel (requires global ngrok installation)
  --read-only                    Run in read-only mode (blocks all write operations)
  --help                         Show help message

Usage with npx (no installation needed):
  npx @ankimcp/anki-mcp-server                        # HTTP mode
  npx @ankimcp/anki-mcp-server --port 8080            # Custom port
  npx @ankimcp/anki-mcp-server --stdio                # STDIO mode
  npx @ankimcp/anki-mcp-server --tunnel               # Managed tunnel mode
  npx @ankimcp/anki-mcp-server --ngrok                # HTTP mode with ngrok tunnel
  npx @ankimcp/anki-mcp-server --read-only            # Read-only mode

Usage with global installation:
  npm install -g @ankimcp/anki-mcp-server             # Install once
  ankimcp                                             # HTTP mode
  ankimcp --port 8080                                 # Custom port
  ankimcp --stdio                                     # STDIO mode
  ankimcp --tunnel                                    # Managed tunnel mode
  ankimcp --ngrok                                     # HTTP mode with ngrok tunnel
  ankimcp --read-only                                 # Read-only mode

Mode Hanya-Baca (semua mode)

Flag --read-only mencegah modifikasi apa pun pada koleksi Anki Anda. Saat diaktifkan:

  • Semua operasi baca berfungsi normal (menjelajahi dek, melihat kartu, mencari catatan)
  • Operasi tinjauan diizinkan (sinkronisasi, answerCards, suspend/unsuspend)
  • Modifikasi konten diblokir (addNote, deleteNotes, createDeck, updateNoteFields, dll.)
  • Berguna untuk menjelajahi data Anki dengan aman tanpa risiko perubahan yang tidak disengaja
# HTTP mode with read-only
ankimcp --read-only

# STDIO mode with read-only
ankimcp --stdio --read-only

# Can combine with other flags
ankimcp --ngrok --read-only

Anda juga dapat mengaktifkan mode hanya-baca melalui variabel lingkungan:

READ_ONLY=true ankimcp

Atau dalam konfigurasi klien MCP:

{
  "mcpServers": {
    "anki-mcp": {
      "command": "npx",
      "args": ["-y", "@ankimcp/anki-mcp-server", "--stdio", "--read-only"],
      "env": {
        "ANKI_CONNECT_URL": "http://localhost:8765"
      }
    }
  }
}

Hubungkan ke Claude Desktop (Mode Lokal)

Anda dapat mengonfigurasi server di Claude Desktop dengan salah satu cara berikut:

  • Buka: Pengaturan → Pengembang → Edit Konfigurasi
  • Atau edit file konfigurasi secara manual

Konfigurasi

Tambahkan berikut ini ke konfigurasi Claude Desktop Anda:

{
  "mcpServers": {
    "anki-mcp": {
      "command": "node",
      "args": ["/path/to/anki-mcp-server/dist/main-stdio.js"],
      "env": {
        "ANKI_CONNECT_URL": "http://localhost:8765"
      }
    }
  }
}

Ganti /path/to/anki-mcp-server dengan jalur proyek Anda yang sebenarnya.

Lokasi File Konfigurasi

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Untuk detail lebih lanjut, lihat dokumentasi MCP resmi.

Variabel Lingkungan (Opsional)

VariabelDeskripsiDefault
ANKI_CONNECT_URLURL AnkiConnecthttp://localhost:8765
ANKI_CONNECT_API_VERSIONVersi API6
ANKI_CONNECT_API_KEYKunci API jika dikonfigurasi di AnkiConnect-
ANKI_CONNECT_TIMEOUTTimeout permintaan dalam ms5000
READ_ONLYAktifkan mode hanya-baca (true atau 1)false
ALLOWED_HOSTSMode HTTP: nilai header Host tambahan yang diterima di luar loopback (nama host dipisahkan koma). Diperlukan saat mengikat ke alamat LAN/publik atau berjalan di belakang proxy terbalik. Lihat Konfigurasi Mode HTTP.hanya loopback
ALLOWED_ORIGINSMode HTTP: daftar izin pola Origin/Referer browser yang dipisahkan koma (wildcard didukung, mis. https://*.ngrok.io).http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*
TUNNEL_SERVER_URLURL WebSocket server tunnel (hanya mode tunnel)wss://tunnel.ankimcp.ai
MEDIA_ALLOWED_TYPESTipe MIME tambahan yang diizinkan untuk impor jalur file (dipisahkan koma, mis., application/pdf)-
MEDIA_IMPORT_DIRBatasi impor jalur file ke direktori ini-
MEDIA_ALLOWED_HOSTSIzinkan host jaringan pribadi tertentu untuk impor URL (dipisahkan koma, mis., 192.168.1.50,my-nas)-

Contoh Penggunaan

Mencari dan Memperbarui Catatan

# Search for notes in a specific deck
findNotes(query: "deck:Spanish")

# Get detailed information about notes
notesInfo(notes: [1234567890, 1234567891])

# Update a note's fields (HTML content supported)
updateNoteFields(note: {
  id: 1234567890,
  fields: {
    "Front": "<b>¿Cómo estás?</b>",
    "Back": "How are you?"
  }
})

# Delete notes (requires confirmation)
deleteNotes(notes: [1234567890], confirmDeletion: true)

Contoh Sintaks Kueri Anki

Alat findNotes mendukung sintaks kueri Anki yang canggih:

  • "deck:DeckName" - Semua catatan di dek tertentu
  • "tag:important" - Catatan dengan tag "important"
  • "is:due" - Kartu yang jatuh tempo untuk ditinjau
  • "is:new" - Kartu baru yang belum dipelajari
  • "added:7" - Catatan yang ditambahkan dalam 7 hari terakhir
  • "front:hello" - Catatan dengan "hello" di bidang depan
  • "flag:1" - Catatan dengan bendera merah
  • "prop:due<=2" - Kartu jatuh tempo dalam 2 hari
  • "deck:Spanish tag:verb" - Catatan dek Spanyol dengan tag verb (DAN)
  • "deck:Spanish OR deck:French" - Catatan dari salah satu dek

Catatan Penting

Penanganan CSS dan HTML

  • Alat notesInfo mengembalikan informasi gaya CSS untuk kesadaran rendering yang tepat
  • Alat updateNoteFields mendukung konten HTML di bidang dan mempertahankan gaya CSS
  • Setiap model catatan memiliki gaya CSS sendiri - gunakan modelStyling untuk mendapatkan CSS spesifik model

Peringatan Pembaruan

⚠️ PENTING: Saat menggunakan updateNoteFields, JANGAN melihat catatan di browser Anki saat memperbarui, atau bidang tidak akan diperbarui dengan benar. Tutup browser atau beralih ke catatan lain sebelum memperbarui. Lihat Masalah yang Diketahui untuk detail lebih lanjut.

Keamanan Penghapusan

Alat deleteNotes memerlukan konfirmasi eksplisit (confirmDeletion: true) untuk mencegah penghapusan yang tidak disengaja. Menghapus catatan menghapus SEMUA kartu terkait secara permanen.

Keamanan

Validasi Jalur File Media dan URL

Alat media (storeMediaFile, retrieveMediaFile, deleteMediaFile) dan bidang audio/gambar updateNoteFields menyertakan validasi keamanan untuk mencegah penyalahgunaan melalui injeksi prompt:

  • Impor jalur file dibatasi hanya untuk jenis file media (gambar, audio, video). File non-media (mis., kunci SSH, kredensial, konfigurasi shell) ditolak berdasarkan tipe MIME. Konfigurasikan MEDIA_ALLOWED_TYPES untuk mengizinkan jenis file tambahan, atau MEDIA_IMPORT_DIR untuk membatasi impor ke direktori tertentu.
  • Impor URL divalidasi terhadap serangan SSRF. Permintaan ke jaringan pribadi (10.x, 172.16.x, 192.168.x), loopback (127.x), link-local (169.254.x), dan skema non-HTTP(S) diblokir. Konfigurasikan MEDIA_ALLOWED_HOSTS untuk mengizinkan host jaringan pribadi tertentu.
  • Nama file disanitasi untuk mencegah path traversal (mis., urutan ../../ dihapus).

Perlindungan ini berlaku untuk storeMediaFile, retrieveMediaFile, deleteMediaFile, dan bidang audio/gambar updateNoteFields.

Kerentanan path traversal dilaporkan oleh Hideaki Takahashi.

Perlindungan DNS-Rebinding (transport HTTP)

Saat berjalan dalam mode HTTP, server memvalidasi header Host pada setiap permintaan. Secara default hanya host loopback (localhost, 127.0.0.1, ::1) yang diterima, terlepas dari port. Host adalah header terlarang browser, sehingga halaman web berbahaya tidak dapat memalsukannya — ini menutup jalur DNS-rebinding di mana halaman yang di-rebound mencapai server lokal dengan Host palsu dan tanpa Origin, dan menjangkau alat MCP. Host yang tidak diizinkan ditolak dengan 403.

Jika Anda mengikat ke 0.0.0.0, berjalan di belakang proxy terbalik, atau mengekspos domain tunnel publik, atur ALLOWED_HOSTS (nama host dipisahkan koma) untuk mengizinkan host tersebut. Saat melakukan tunnel dengan ngrok, server menggunakan --host-header=rewrite, sehingga upstream masih melihat Host loopback. Lihat Konfigurasi Mode HTTP untuk daftar opsi lengkap.

Kerentanan DNS-rebinding dilaporkan oleh avishaigo-commits dan yotampe-pluto.

Kebijakan Privasi

Server MCP ini berjalan secara lokal di mesin Anda dan tidak mengumpulkan telemetri, analitik, atau data penggunaan apa pun.

Kebijakan lengkap: https://ankimcp.ai/privacy/

  • Pengumpulan data: Server tidak mengumpulkan apa pun. Ini meneruskan permintaan antara asisten AI Anda dan plugin AnkiConnect lokal Anda.
  • Penggunaan / penyimpanan: Tidak ada penyimpanan sisi server. Semua data flashcard tetap berada di instalasi Anki Anda di perangkat Anda sendiri.
  • Berbagi pihak ketiga: Tidak ada. Server hanya berkomunikasi dengan URL AnkiConnect yang Anda konfigurasikan (default: localhost). Jika Anda mengaktifkan sinkronisasi AnkiWeb bawaan Anki, itu terjadi antara instalasi Anki Anda dan AnkiWeb secara langsung — di luar cakupan server ini.
  • Retensi: Tidak berlaku — tidak ada data yang disimpan di sisi server.
  • Kontak: support@ankimcp.ai

Masalah yang Diketahui

Untuk daftar lengkap masalah dan batasan yang diketahui, silakan kunjungi dokumentasi kami:

Dokumentasi Masalah yang Diketahui

Batasan Kritis

Pembaruan Catatan Gagal Saat Dilihat di Browser

⚠️ PENTING: Saat memperbarui catatan menggunakan updateNoteFields, pembaruan akan gagal secara diam-diam jika catatan sedang dilihat di jendela browser Anki. Ini adalah batasan upstream AnkiConnect.

Solusi: Selalu tutup browser atau navigasikan ke catatan lain sebelum memperbarui.

Untuk detail lebih lanjut dan masalah lain yang diketahui, lihat dokumentasi lengkap.

Pemecahan Masalah

Kesalahan ERR_REQUIRE_ESM

Jika Anda melihat kesalahan seperti:

Error [ERR_REQUIRE_ESM]: require() of ES Module not supported

Ini berarti versi Node.js Anda tidak didukung. Server memerlukan Node.js 22.12.0+.

Catatan: Runtime minimum yang didukung adalah Node.js 22.12.0. Node.js 20 (Iron) mencapai akhir masa pakai pada 2026-04-30 dan tidak lagi didukung.

Periksa versi Anda:

node --version

Solusi: Perbarui Node.js ke versi 22.12.0+. Anda dapat mengunduhnya dari nodejs.org atau menggunakan manajer versi seperti nvm.

Pengembangan

Mode Transport

Server ini mendukung tiga mode transport MCP melalui titik masuk terpisah:

Mode STDIO (Default)

  • Untuk klien MCP lokal seperti Claude Desktop
  • Menggunakan input/output standar untuk komunikasi
  • Titik masuk: dist/main-stdio.js
  • Jalankan: npm run start:prod:stdio atau node dist/main-stdio.js
  • Bundel MCPB: Menggunakan mode STDIO

Mode HTTP (HTTP Streamable)

  • Untuk klien MCP jarak jauh dan integrasi berbasis web
  • Menggunakan protokol MCP Streamable HTTP
  • Titik masuk: dist/main-http.js
  • Jalankan: npm run start:prod:http atau node dist/main-http.js
  • Port default: 3000 (dapat dikonfigurasi melalui env var PORT)
  • Host default: 127.0.0.1 (dapat dikonfigurasi melalui env var HOST)
  • Endpoint MCP: http://127.0.0.1:3000/ (root path)

Mode Tunnel (WebSocket Tunnel Terkelola)

  • Untuk asisten AI berbasis web melalui layanan tunnel AnkiMCP terkelola, dengan autentikasi bawaan
  • Server MCP berjalan dalam proses di belakang transport dalam memori; TunnelMcpService menghubungkannya ke server MCP dan TunnelClient menjembataninya ke layanan tunnel melalui WebSocket
  • Titik masuk: dist/main-tunnel.js
  • Jalankan: node dist/main-tunnel.js --tunnel (atau ankimcp --tunnel)
  • Auth: ankimcp --login / ankimcp --logout; kredensial disimpan di ~/.ankimcp/credentials.json (0600)
  • Dev: npm run start:dev:tunnel (mode watch, menjalankan --tunnel --debug)

Membangun

npm run build  # Builds once, creates dist/ with all three entry points

main-stdio.js, main-http.js, dan main-tunnel.js semuanya dibangun ke dalam direktori dist/ yang sama. Pilih yang akan dijalankan berdasarkan kebutuhan Anda.

Konfigurasi Mode HTTP

Variabel Lingkungan:

  • PORT - Port server HTTP (default: 3000)
  • HOST - Alamat bind (default: 127.0.0.1 untuk localhost saja)
  • ALLOWED_HOSTS - Nilai header Host tambahan yang dipisahkan koma untuk diterima di luar set loopback bawaan (localhost, 127.0.0.1, ::1). Hanya nama host dan tidak peduli port. Default: hanya loopback.
  • ALLOWED_ORIGINS - Daftar izin pola Origin/Referer browser yang dipisahkan koma; wildcard didukung (mis. https://*.ngrok.io). Default: http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*.
  • LOG_LEVEL - Level logging (default: info)

Keamanan:

  • Validasi header Host (perlindungan DNS-rebinding) — setiap permintaan HTTP harus membawa header Host yang cocok dengan daftar izin. Secara default hanya host loopback (localhost, 127.0.0.1, ::1) yang diterima, terlepas dari port. Host adalah header yang dilarang browser, sehingga halaman web berbahaya tidak dapat memalsukannya — ini menutup jalur DNS-rebinding di mana halaman yang di-rebound mencapai server dengan Host palsu dan tanpa Origin. Host yang tidak diizinkan ditolak dengan 403.
  • Validasi header Origin — permintaan browser dengan Origin/Referer yang ada tetapi tidak diizinkan ditolak. Permintaan tanpa Origin (curl, Postman, klien MCP-over-HTTP) diizinkan; validasi Host adalah pertahanan terhadap rebinding.
  • Bind ke localhost (127.0.0.1) secara default.
  • Tidak ada autentikasi di versi saat ini (dukungan OAuth direncanakan).

Mengekspos mode HTTP di luar localhost — jika Anda bind ke alamat LAN/publik atau menempatkan server di belakang reverse proxy atau domain publik, Anda harus mengatur ALLOWED_HOSTS ke nama host yang akan digunakan klien, jika tidak setiap permintaan non-loopback ditolak dengan 403:

# Bind to all interfaces and accept the machine's LAN name + a public domain
ALLOWED_HOSTS=my-nas.local,anki.example.com PORT=8080 HOST=0.0.0.0 node dist/main-http.js

Saat Anda bind ke 0.0.0.0/:: tanpa ALLOWED_HOSTS, server mencatat peringatan startup bahwa hanya header Host loopback yang akan diterima.

Docker / reverse proxy / domain publik: aturan yang sama berlaku. Di Docker, permintaan biasanya tiba dengan nama host yang dipublikasikan kontainer atau Host proxy, jadi atur ALLOWED_HOSTS sesuai. Reverse proxy (nginx, Caddy, Traefik) harus meneruskan Host asli dan nama host tersebut terdaftar di ALLOWED_HOSTS, atau menulis ulang Host upstream ke localhost. Integrasi --ngrok bawaan menangani ini secara otomatis (lihat di bawah).

Contoh: Menjalankan Mode

# Development - STDIO mode (watch mode with auto-rebuild)
npm run start:dev:stdio

# Development - HTTP mode (watch mode with auto-rebuild)
npm run start:dev:http

# Production - STDIO mode
npm run start:prod:stdio
# or
node dist/main-stdio.js

# Production - HTTP mode
npm run start:prod:http
# or
PORT=8080 HOST=0.0.0.0 node dist/main-http.js

Membangun Bundel MCPB

Untuk membuat bundel MCPB yang dapat didistribusikan:

npm run mcpb:bundle

Perintah ini akan:

  1. Menyinkronkan versi dari package.json ke manifest.json
  2. Menghapus file .mcpb lama
  3. Membangun proyek TypeScript
  4. Mengemas dist/ dan node_modules/ ke dalam file .mcpb
  5. Menjalankan mcpb clean untuk menghapus devDependencies (mengoptimalkan bundel dari ~47MB menjadi ~10MB)

File output akan diberi nama anki-mcp-server-X.X.X.mcpb dan dapat didistribusikan untuk instalasi satu klik.

Apa yang Dibundel

Bundel MCPB mencakup:

  • JavaScript yang dikompilasi (direktori dist/ - mencakup ketiga titik masuk)
  • Hanya dependensi produksi (node_modules/ - devDependencies dihapus oleh mcpb clean)
  • Metadata paket (package.json)
  • Konfigurasi manifes (manifest.json - dikonfigurasi untuk menggunakan main-stdio.js)
  • Ikon (icon.png)

File sumber, pengujian, dan konfigurasi pengembangan secara otomatis dikecualikan melalui .mcpbignore.

Pencatatan di Claude Desktop

Saat berjalan sebagai ekstensi MCPB di Claude Desktop, log ditulis ke:

Lokasi Log: ~/Library/Logs/Claude/ (macOS)

Log dibagi ke beberapa file:

  • main.log - Log aplikasi Claude Desktop umum
  • mcp-server-Anki MCP Server.log - Pesan protokol MCP untuk ekstensi ini
  • mcp.log - Log MCP gabungan dari semua server

Catatan: Output logger pino (pesan INFO, ERROR, WARN dari kode server) masuk ke stderr dan muncul di file log spesifik MCP. Claude Desktop menentukan file log mana yang menerima pesan mana, tetapi umumnya:

  • Startup aplikasi dan komunikasi protokol MCP → Log spesifik MCP
  • Pencatatan internal server (pino) → Baik log spesifik MCP dan terkadang main.log

Untuk melihat log secara real-time:

tail -f ~/Library/Logs/Claude/mcp-server-Anki\ MCP\ Server.log

Debugging Server MCP

Anda dapat men-debug server MCP menggunakan MCP Inspector dan melampirkan debugger dari IDE Anda (WebStorm, VS Code, dll.).

Catatan untuk Mode HTTP: Saat menguji mode HTTP (Streamable HTTP) dengan MCP Inspector, gunakan "Connection Type: Via Proxy" untuk menghindari kesalahan CORS.

Langkah 1: Konfigurasikan Server Debug di MCP Inspector

mcp-inspector-config.json sudah menyertakan konfigurasi server debug:

{
  "mcpServers": {
    "stdio-server-debug": {
      "type": "stdio",
      "command": "node",
      "args": ["--inspect-brk=9229", "dist/main-stdio.js"],
      "env": {
        "MCP_SERVER_NAME": "anki-mcp-stdio-debug",
        "MCP_SERVER_VERSION": "1.0.0",
        "LOG_LEVEL": "debug"
      },
      "note": "Anki MCP server with debugging enabled on port 9229"
    }
  }
}

Langkah 2: Mulai Server Debug

Jalankan MCP Inspector dengan server debug:

npm run inspector:debug

Ini akan memulai server dengan debugging Node.js diaktifkan pada port 9229 dan menjeda eksekusi di baris pertama.

Langkah 3: Lampirkan Debugger dari IDE Anda

WebStorm
  1. Buka Run → Edit Configurations
  2. Tambahkan konfigurasi Attach to Node.js/Chrome baru
  3. Atur port ke 9229
  4. Klik Debug untuk melampirkan
VS Code
  1. Buka panel Debug (Ctrl+Shift+D / Cmd+Shift+D)
  2. Pilih konfigurasi Debug MCP Server (Attach)
  3. Tekan F5 untuk melampirkan

Langkah 4: Atur Breakpoint dan Debug

Setelah terlampir, Anda dapat:

  • Mengatur breakpoint di file sumber TypeScript Anda
  • Melangkah melalui eksekusi kode
  • Memeriksa variabel dan call stack
  • Menggunakan konsol debug untuk mengevaluasi ekspresi

Debugger akan bekerja dengan source maps, memungkinkan Anda men-debug kode TypeScript asli daripada JavaScript yang dikompilasi.

Debugging dengan Claude Desktop

Anda juga dapat men-debug server MCP saat berjalan di dalam Claude Desktop dengan mengaktifkan debugger Node.js dan melampirkan IDE Anda.

Langkah 1: Konfigurasikan Claude Desktop untuk Debugging

Perbarui konfigurasi Claude Desktop Anda untuk mengaktifkan debugging:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "anki-mcp": {
      "command": "node",
      "args": [
        "--inspect=9229",
        "<path_to_project>/anki-mcp-server/dist/main-stdio.js"
      ],
      "env": {
        "ANKI_CONNECT_URL": "http://localhost:8765"
      }
    }
  }
}

Perubahan kunci: Tambahkan --inspect=9229 sebelum path ke dist/main-stdio.js

Opsi debug:

  • --inspect=9229 - Mulai debugger segera, tidak memblokir (disarankan)
  • --inspect-brk=9229 - Jeda eksekusi hingga debugger terlampir (untuk men-debug masalah startup)

Langkah 2: Mulai Ulang Claude Desktop

Setelah menyimpan konfigurasi, mulai ulang Claude Desktop. Server MCP sekarang akan berjalan dengan debugging diaktifkan pada port 9229.

Langkah 3: Lampirkan Debugger dari IDE Anda

WebStorm
  1. Buka Run → Edit Configurations
  2. Klik tombol + dan pilih Attach to Node.js/Chrome
  3. Konfigurasikan:
    • Name: Attach to Anki MCP (Claude Desktop)
    • Host: localhost
    • Port: 9229
    • Attach to: Node.js < 8 atau Chrome or Node.js > 6.3 (tergantung versi WebStorm)
  4. Klik OK
  5. Klik Debug (Shift+F9) untuk melampirkan
VS Code
  1. Tambahkan ke .vscode/launch.json:
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to Anki MCP (Claude Desktop)",
      "port": 9229,
      "skipFiles": ["<node_internals>/**"],
      "sourceMaps": true,
      "outFiles": ["${workspaceFolder}/dist/**/*.js"]
    }
  ]
}
  1. Buka panel Debug (Ctrl+Shift+D / Cmd+Shift+D)
  2. Pilih Attach to Anki MCP (Claude Desktop)
  3. Tekan F5 untuk melampirkan

Langkah 4: Debug Secara Real-Time

Setelah terlampir, Anda dapat:

  • Mengatur breakpoint di file sumber TypeScript Anda (mis., src/mcp/primitives/essential/tools/create-model.tool.ts)
  • Menggunakan Claude Desktop secara normal - breakpoint akan tercapai saat alat dipanggil
  • Melangkah melalui eksekusi kode
  • Memeriksa variabel dan call stack
  • Menggunakan konsol debug

Contoh: Atur breakpoint di create-model.tool.ts pada baris 119, lalu minta Claude untuk membuat model baru. Debugger akan berhenti di breakpoint Anda!

Catatan: Debugger tetap terlampir selama Claude Desktop berjalan. Anda dapat melepaskan/melampirkan kembali kapan saja tanpa memulai ulang Claude Desktop.

Perintah Build

npm run build              # Build the project (compile TypeScript to JavaScript)
npm run start:dev:stdio    # STDIO mode with watch (auto-rebuild)
npm run start:dev:http     # HTTP mode with watch (auto-rebuild)
npm run type-check         # Run TypeScript type checking
npm run lint               # Run ESLint
npm run mcpb:bundle        # Sync version, clean, build, and create MCPB bundle

Pengujian Paket NPM (Lokal)

Uji paket npm secara lokal sebelum dipublikasikan:

# 1. Create local package
npm run pack:local         # Builds and creates @ankimcp/anki-mcp-server-*.tgz

# 2. Install globally from local package
npm run install:local      # Installs from ./@ankimcp/anki-mcp-server-*.tgz

# 3. Test the command
ankimcp                    # Runs HTTP server on port 3000

# 4. Uninstall when done testing
npm run uninstall:local    # Removes global installation

Cara kerjanya:

  • npm pack membuat file .tgz yang identik dengan yang akan dibuat oleh npm publish
  • Menginstal dari .tgz mensimulasikan apa yang didapat pengguna dari npm install -g ankimcp
  • Ini memungkinkan Anda menguji pengalaman pengguna penuh sebelum dipublikasikan ke npm

Perintah Pengujian

npm test              # Run all tests
npm run test:unit     # Run unit tests only
npm run test:tools    # Run tool-specific tests
npm run test:workflows # Run workflow integration tests
npm run test:e2e      # Run end-to-end tests
npm run test:cov      # Run tests with coverage report
npm run test:watch    # Run tests in watch mode
npm run test:debug    # Run tests with debugger
npm run test:ci       # Run tests for CI (silent, with coverage)

Cakupan Pengujian

Proyek ini mempertahankan ambang cakupan minimum 70% untuk:

  • Cabang
  • Fungsi
  • Baris
  • Pernyataan

Laporan cakupan dihasilkan di direktori coverage/.

Pembuatan Versi

Proyek ini mengikuti Semantic Versioning dengan pendekatan pengembangan pra-1.0:

  • 0.x.x - Versi Beta/Pengembangan (fase saat ini)

    • 0.1.x - Perbaikan bug dan patch
    • 0.2.0+ - Fitur baru atau peningkatan kecil
    • Perubahan yang merusak dapat diterima di versi 0.x
  • 1.0.0 - Rilis stabil pertama

    • Akan dirilis saat API stabil dan teruji
    • Perubahan yang merusak akan memerlukan kenaikan versi mayor (2.0.0, dll.)

Status Saat Ini: 0.22.0 - Pengembangan beta aktif. Fitur terbaru mencakup analisis ulasan seluruh koleksi (review_stats sekarang menggabungkan semua dek saat deck dihilangkan), manajemen bidang model (addModelField, removeModelField, renameModelField, repositionModelField), pembuatan catatan batch (addNotes), tunneling ngrok terintegrasi (flag --ngrok), manajemen file media, manajemen model/template, dan statistik dek komprehensif. API dapat berubah berdasarkan umpan balik dan pengujian.

Evolusi spesifikasi MCPB

Proyek ini menargetkan spesifikasi bundel MCPB Anthropic, yang masih berkembang. Kami melacak spesifikasi di https://github.com/modelcontextprotocol/mcpb dan mungkin memperkenalkan perubahan yang merusak untuk tetap patuh. Perubahan yang merusak diizinkan di bawah skema pembuatan versi 0.x.x.

Proyek Serupa

Jika Anda menjelajahi integrasi Anki MCP, berikut adalah proyek lain di ruang ini:

scorzeth/anki-mcp-server

  • Status: Tampaknya ditinggalkan (tidak ada pembaruan terbaru)
  • Implementasi awal integrasi Anki MCP

nailuoGG/anki-mcp-server

  • Pendekatan: Implementasi ringan, file tunggal
  • Arsitektur: Struktur kode prosedural dengan semua alat dalam satu file
  • Cocok untuk: Kasus penggunaan sederhana, dependensi minimal Mengapa proyek ini berbeda:
  • Arsitektur kelas enterprise: Dibangun di atas NestJS dengan dependency injection
  • Desain modular: Setiap alat adalah kelas terpisah dengan pemisahan tanggung jawab yang jelas
  • Kemudahan pemeliharaan: Mudah diperluas dengan fitur baru tanpa menyentuh kode yang sudah ada
  • Pengujian: Rangkaian pengujian komprehensif dengan persyaratan cakupan 70%
  • Keamanan tipe: TypeScript ketat dengan validasi Zod
  • Penanganan kesalahan: Penanganan kesalahan yang tangguh dengan umpan balik pengguna yang membantu
  • Siap produksi: Pencatatan yang tepat, pelaporan kemajuan, dan dukungan bundel MCPB
  • Skalabilitas: Dapat dengan mudah berkembang dari alat dasar ke alur kerja yang kompleks

Kasus penggunaan: Jika Anda memerlukan fondasi yang kokoh untuk membangun integrasi Anki tingkat lanjut atau berencana untuk memperluas fungsionalitas secara signifikan, pendekatan arsitektur proyek ini memudahkan pemeliharaan dan penskalaan seiring waktu.

Tautan Berguna

Lisensi & Atribusi

Proyek ini dilisensikan di bawah Lisensi MIT — lihat LICENSE untuk teks lengkapnya.

Hak Cipta © 2026 Anatoly Tarnavsky.

Atribusi Pihak Ketiga

  • Anki® adalah merek dagang terdaftar dari Ankitects Pty Ltd. Proyek ini adalah alat pihak ketiga tidak resmi dan tidak berafiliasi dengan, didukung oleh, atau disponsori oleh Ankitects Pty Ltd. Logo Anki digunakan di bawah lisensi alternatif untuk merujuk Anki dengan tautan ke https://apps.ankiweb.net. Untuk aplikasi Anki resmi, kunjungi https://apps.ankiweb.net.

  • Model Context Protocol (MCP) adalah standar terbuka oleh Anthropic. Logo MCP berasal dari repositori dokumentasi MCP resmi dan digunakan di bawah Lisensi MIT. Untuk informasi lebih lanjut tentang MCP, kunjungi https://modelcontextprotocol.io.

  • Ini adalah proyek independen yang menjembatani teknologi Anki dan MCP. Semua merek dagang, merek layanan, nama dagang, nama produk, dan logo adalah milik dari pemiliknya masing-masing.