Anki MCP
resmiServer MCP yang memungkinkan asisten AI berinteraksi dengan Anki, aplikasi kartu flash pengulangan berjarak.
Apa yang bisa Anda lakukan dengan Anki MCP?
- Meninjau kartu yang jatuh tempo secara percakapan — Minta asisten Anda untuk menarik kartu yang jatuh tempo dengan
get_due_cards, tampilkan masing-masing melaluipresent_card, dan catat penilaian Anda denganrate_card. - Membuat dan menambahkan kartu flash secara massal — Minta asisten untuk membuat catatan secara massal dengan
addNotes, opsional membangun model khusus terlebih dahulu melaluicreateModeldanupdateModelStyling. - Mencari dan mengedit catatan yang ada — Gunakan
findNotesdengan sintaks kueri Anki, periksa detail melaluinotesInfo, dan perbarui bidang denganupdateNoteFields. - Mengelola dek dan penjadwalan — Buat dek dengan
createDeck, pindahkan kartu melaluichangeDeck, atau jadwalkan ulang kartu menggunakansetDueDatedanforgetCards. - Mengimpor media ke dalam catatan — Minta asisten untuk mengunggah gambar lokal atau URL dengan
storeMediaFiledan sematkan ke dalam bidang catatan. - Mengendalikan GUI Anki — Buka browser atau editor dengan
guiBrowsedanguiEditNote, atau ambil catatan yang dipilih melaluiguiSelectedNotes.
Dokumentasi
Server Anki MCP
Integrasikan Anki secara mulus dengan asisten AI melalui Model Context Protocol
Beta - Proyek ini sedang dalam pengembangan aktif. API dan fitur dapat berubah.
Server Model Context Protocol (MCP) yang memungkinkan asisten AI berinteraksi dengan Anki, aplikasi kartu flashcard dengan pengulangan berjarak.
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 manusiawi, memberikan konteks, dan beradaptasi dengan gaya belajar Anda. Ia dapat membuat dan mengedit catatan dengan cepat, mengubah sesi belajar Anda menjadi percakapan dinamis. Lebih banyak fitur segera hadir!
Contoh dan Tutorial
Untuk panduan komprehensif, 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:
-
"Bantu saya meninjau dek Spanyol saya." — Asisten menyinkronkan dengan AnkiWeb (
sync), mengambil kartu yang jatuh tempo (get_due_cardsdengan filter dek), menyajikan setiap kartu (present_card), dan mencatat penilaian Anda (rate_card). Percakapan belajar alami dengan penjelasan yang disesuaikan untuk Anda. -
"Buat 10 kartu kosakata Arab dengan gaya RTL." — Asisten membuat daftar tipe catatan (
modelNames), membuat model RTL kustom jika diperlukan (createModel+updateModelStylinguntuk CSS kanan-ke-kiri), lalu membuat kartu secara massal (addNotes). -
"Impor gambar ini dari folder Unduhan saya ke bagian depan catatan yang dipilih." — Asisten mengunggah file lokal (
storeMediaFiledengan jalur file), membaca catatan yang saat ini dipilih dari browser (guiSelectedNotes+notesInfo), dan memperbarui bidang depan dengan tag<img>(updateNoteFields).
Alat yang Tersedia
Server ini menyediakan 50 alat MCP — 39 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 perubahanget_due_cards- Dapatkan kartu yang jatuh tempo untuk ditinjau, opsional difilter berdasarkan dek (jawaban dihilangkan kecualiinclude_answer: true, defaultfalse)get_cards- Dapatkan kartu dengan filter fleksibel berdasarkan status (jatuh tempo, baru, belajar, ditangguhkan, dikubur) dan dek (jawaban dihilangkan kecualiinclude_answer: true, defaultfalse)present_card- Tampilkan kartu untuk ditinjau dengan sisi pertanyaan/depannyarate_card- Nilai kinerja kartu (Lagi, Sulit, Baik, Mudah) dan jadwalkan tinjauan berikutnyaforgetCards- Atur ulang kartu menjadi baru, membuang penjadwalannya tanpa mencatat tinjauansetDueDate- Jadwalkan ulang kartu menjadi jatuh tempo dalam N hari ("0","3-7","1!"), tanpa mencatat tinjauan
Catatan:
forgetCardsdansetDueDatemengubah penjadwalan tanpa mencatat tinjauan, yang membedakannya darirate_card. Gunakan keduanya ketika jadwal kartu salah daripada jawabannya: menilai kartuAgainuntuk menguburnya lebih dalam mencatat kegagalan nyata dan menurunkan faktor kemudahannya, secara permanen memiringkan penjadwalan masa depan dan statistik Anda.forgetCardsmenghapus interval dan memulai kartu dari awal;setDueDatemempertahankan riwayat kartu dan hanya memindahkan tinjauan berikutnya.
Catatan: Konten kartu
front/backdirender per kartu dari templatnya sendiri (seperti yang ditampilkan Anki), sehingga kartu terbalik dan cloze menampilkan arah yang benar. Teks statis yang ditambahkan oleh templat kartu Anda juga muncul di keluaran.
Manajemen Dek
listDecks- Daftar semua dek, opsional dengan statistik antrean belajar per dekdeckStats- Dapatkan statistik komprehensif untuk satu dek (antrean belajar, hitungan status kartu sebenarnya, distribusi kemudahan/interval)createDeck- Buat dek kosong baru (mendukungParent::Child, maksimal 2 level)changeDeck- Pindahkan kartu ke dek yang berbeda (dibuat jika belum ada)
Catatan: Statistik dek tersedia dalam dua varian. Blok
counts(dan semua yang dilaporkanlistDecks) mencerminkan browser dek Anki: kartu jatuh tempo hari ini, dibatasi oleh batas harian baru/tinjauan setiap dek, dengan kartu yang ditangguhkan dan dikubur dikecualikan — jadireviewbukan "kartu matang" dan bucketotherhanyalah sisa aritmatika (sebagian besar kartu tinjauan yang tidak jatuh tempo hari ini ditambah kartu baru yang melebihi batas harian). Untuk total per status yang sebenarnya gunakan blokstatespadadeckStats/collection_stats, yang menghitungnew,learning,review,suspendeddanburiedmelalui pencarian Anki, mengabaikan tanggal jatuh tempo dan batas harian.
Manajemen Catatan
addNote- Buat satu catatan dengan bidang dan tag yang ditentukanaddNotes- Buat batch hingga 100 catatan yang berbagi dek dan model (dukungan sukses parsial)findNotes- Cari catatan menggunakan sintaks kueri Anki (deck:,tag:,is:due, dll.)notesInfo- Dapatkan informasi terperinci 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 yang pertama untuk menghindari duplikasi)addTags- Tambahkan tag yang dipisahkan spasi ke catatan yang ditentukanremoveTags- Hapus tag yang dipisahkan spasi dari catatan yang ditentukanreplaceTags- Ganti nama tag di seluruh catatan yang ditentukanclearUnusedTags- Hapus tag yatim yang tidak digunakan oleh catatan mana pun (destruktif)
Manajemen Media
getMediaFilesNames- Daftar file media dicollection.media, opsional difilter berdasarkan polaretrieveMediaFile- Unduh file media sebagai konten base64storeMediaFile- Unggah media dari data base64, jalur file absolut, atau URLdeleteMediaFile- Hapus file media daricollection.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 yang paling efisien.
Manajemen Model/Templat
modelNames- Daftar semua tipe catatan/model yang tersediamodelFieldNames- Dapatkan nama bidang untuk tipe catatan tertentumodelStyling- Dapatkan informasi gaya CSS untuk tipe catatanmodelTemplates- Dapatkan templat kartu (HTML Depan dan Belakang) untuk tipe catatancreateModel- 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 di 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 mereferensikan nama lama harus diperbarui secara terpisah)repositionModelField- Ubah posisi bidang dalam tipe catatan yang ada
Statistik
collection_stats- Statistik agregat di semua dek dengan perincian per dek dan hitungan status kartu di seluruh koleksireview_stats- Analisis riwayat tinjauan (pola temporal, metrik retensi, rentang belajar)
Alat GUI
Alat yang menggerakkan antarmuka desktop Anki. Dimaksudkan untuk alur kerja pengeditan/pembuatan catatan dan manajemen dek, bukan untuk sesi tinjauan.
guiBrowse- Buka Browser Kartu dan cari kartuguiSelectCard- Pilih kartu tertentu di Browser KartuguiSelectedNotes- Dapatkan ID catatan yang saat ini dipilih di Browser KartuguiAddCards- Buka dialog Tambah Kartu dengan detail catatan yang telah ditentukanguiEditNote- Buka editor catatan untuk catatan tertentuguiDeckOverview- Buka dialog Ringkasan Dek untuk dek tertentuguiDeckBrowser- Buka dialog Browser DekguiCurrentCard- Dapatkan info tentang kartu saat ini dalam mode tinjauanguiShowQuestion- Tampilkan sisi pertanyaan dari kartu saat iniguiShowAnswer- Tampilkan sisi jawaban dari kartu saat iniguiUndo- Batalkan tindakan terakhir di Anki
Prasyarat
- Anki dengan plugin AnkiConnect terpasang
- Node.js 22.12.0+
Instalasi
Ada beberapa cara untuk memasang server di mesin Anda. Setelah terpasang, buka Menghubungkan Klien AI untuk menghubungkannya ke asisten AI Anda — secara lokal atau jarak jauh.
npm (global atau npx)
Cara umum untuk memasang server, cocok untuk klien MCP apa pun yang meluncurkannya secara langsung.
Pasang 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 memasang server MCP ini untuk Claude Desktop:
- Unduh bundel
.mcpbterbaru dari halaman Rilis - Di Claude Desktop, pasang ekstensi:
- Metode 1: Buka Pengaturan → Ekstensi, lalu seret dan lepas file
.mcpb - Metode 2: Buka Pengaturan → Pengembang → Ekstensi → Pasang Ekstensi, lalu pilih file
.mcpb
- Metode 1: Buka Pengaturan → Ekstensi, lalu seret dan lepas file
- Konfigurasikan URL AnkiConnect jika diperlukan (default ke
http://localhost:8765) - Mulai ulang Claude Desktop
Itu saja! Bundel ini mencakup semua yang diperlukan untuk menjalankan server secara lokal.
Untuk peninjau Direktori MCP Anthropic: panduan dari nol hingga integrasi dengan dek contoh yang telah diisi sebelumnya tersedia di
docs/reviewer-setup.md.
Pasang dari Sumber (untuk pengembangan)
Untuk pengembangan atau penggunaan lanjutan (menjalankan rangkaian pengujian memerlukan Node.js 24.9+ — skrip pengujian npm memuat paket NestJS 12 khusus ESM melalui require(esm), yang hanya didukung Jest di sana; persyaratan runtime untuk menggunakan server tetap 22.12.0+):
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 tanpa autentikasi yang lebih ringan, 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:
- Claude Desktop
- Cursor IDE - editor kode bertenaga AI
- Cline - ekstensi VS Code untuk bantuan AI
- Zed Editor - editor kode modern dan cepat
- Klien MCP lain yang mendukung transport STDIO
Untuk Claude Desktop, bundel MCPB adalah jalur termudah. Untuk klien lain, konfigurasikan paket npm dengan flag --stdio.
Konfigurasi - Pilih salah satu metode:
Metode 1: Menggunakan npx (disarankan - tanpa 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 marketplace ekstensi
Untuk fitur khusus klien dan pemecahan masalah, konsultasikan dokumentasi klien MCP Anda. Lihat juga Hubungkan ke Claude Desktop untuk konfigurasi yang mengarah langsung ke dist/main-stdio.js yang sudah dibangun.
HTTP (AI berbasis web lokal)
Mode HTTP menjalankan server sebagai server web lokal yang berbicara dengan protokol MCP Streamable HTTP. Ini adalah transport yang digunakan oleh alat AI berbasis web saat diarahkan ke mesin Anda, dan juga yang digunakan oleh opsi Remote untuk diekspos ke dunia luar. Dengan sendirinya, mode HTTP terikat hanya ke localhost.
Mengikat di luar localhost? Jika Anda meneruskan
--host 0.0.0.0(atau menjalankan di belakang reverse proxy/domain publik), server hanya menerima headerHostloopback secara default untuk perlindungan DNS-rebinding — aturALLOWED_HOSTSke nama host yang digunakan klien. Lihat Konfigurasi Mode HTTP.
Pengaturan - Pilih salah satu metode:
Metode 1: Menggunakan npx (disarankan - tanpa 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 Remote di bawah ini.
Remote
AI yang dihosting/remote (seperti ChatGPT atau Claude.ai yang berjalan di cloud) tidak dapat menjangkau localhost secara langsung. Opsi ini mengekspos Anki lokal Anda ke internet sehingga asisten jarak jauh dapat berbicara dengannya.
Tunnel (✅ Disarankan)
Jalur remote yang disarankan — terautentikasi & aman. Tidak seperti port publik mentah, mode tunnel mengharuskan Anda 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 Anda sendiri. Server terhubung keluar ke layanan tunnel AnkiMCP yang dikelola (wss://tunnel.ankimcp.ai) melalui WebSocket dan diberi URL publik. Autentikasi sudah terintegrasi — tidak perlu akun ngrok atau proses tunnel terpisah, dan Anda masuk sekali.
Masuk (alur perangkat OAuth):
Mode Tunnel menggunakan Otorisasi Perangkat OAuth 2.0 Grant. 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 terbuka, terminal akan mencetak URL verifikasi dan kode untuk dimasukkan secara manual sebagai cadangan.) Setelah 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 tanpa kepala, CI), server akan gagal dengan cepat dan meminta Anda untuk menjalankan ankimcp --login terlebih dahulu. Setelah terhubung, URL tunnel publik akan dicetak; tekan Ctrl+C untuk memutuskan koneksi. Bagikan URL itu dengan asisten AI Anda.
Variabel lingkungan mode Tunnel:
| Variabel | Deskripsi | Default |
|---|---|---|
TUNNEL_SERVER_URL | URL WebSocket server tunnel (nilai flag --tunnel/--login menimpa ini) | wss://tunnel.ankimcp.ai |
TUNNEL_AUTH_CLIENT_ID | ID klien OAuth untuk alur perangkat. Lanjutan — hanya diperlukan saat menunjuk ke layanan tunnel/auth yang dihosting sendiri. | (bawaan) |
Endpoint auth alur perangkat (/auth/device, /auth/token) diturunkan dari TUNNEL_SERVER_URL, jadi menunjuk --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 (TunnelTransport). Transport itu memiliki server MCP dan mengubah setiap isi permintaan yang diteruskan menjadi respons, dan TunnelClient menjembatani ke layanan tunnel jarak jauh melalui WebSocket — meneruskan permintaan MCP masuk dan respons keluar. AnkiConnect tetap hanya dijangkau di mesin lokal Anda.
Revisi protokol: Karena tunnel menghubungkan server MCP dalam proses, mode tunnel hanya melayani revisi 2025 dari protokol MCP, sementara mode STDIO dan HTTP melayani revisi 2025 dan revisi 2026-07-28 yang lebih baru. Setiap alat berperilaku sama — tetapi klien yang hanya berbicara 2026-07-28 akan ditolak melalui tunnel dengan kesalahan versi protokol; jalankan mode STDIO atau HTTP untuk klien tersebut.
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 dapat menjangkau Anki Anda, jadi ini kurang aman dibandingkan Tunnel. Lebih suka Tunnel kecuali Anda memiliki alasan spesifik untuk mengelola endpoint ngrok Anda sendiri. (Memerlukan instalasi ngrok global dan authtoken.)
Flag --ngrok meluncurkan ngrok dengan --host-header=rewrite, sehingga ngrok menulis ulang Host hulu menjadi localhost sebelum meneruskan. Itu menjaga permintaan dalam daftar izin Host loopback (lihat perlindungan DNS-rebinding) tanpa Anda harus menambahkan domain publik *.ngrok 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 <number> Port to listen on (HTTP mode; default: 3000, or PORT env var)
-h, --host <address> Host to bind to (HTTP mode; default: 127.0.0.1, or HOST env var)
-a, --anki-connect <url> AnkiConnect URL (default: http://localhost:8765, or ANKI_CONNECT_URL env var)
--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:
- 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)
| Variabel | Deskripsi | Default |
|---|---|---|
ANKI_CONNECT_URL | URL AnkiConnect | http://localhost:8765 |
ANKI_CONNECT_API_VERSION | Versi API | 6 |
ANKI_CONNECT_API_KEY | Kunci API jika dikonfigurasi di AnkiConnect | - |
ANKI_CONNECT_TIMEOUT | Waktu tunggu permintaan dalam ms | 5000 |
READ_ONLY | Aktifkan mode hanya-baca (true atau 1) | false |
PORT | Mode HTTP: port untuk mendengarkan (flag --port lebih diutamakan) | 3000 |
HOST | Mode HTTP: alamat untuk diikat (flag --host lebih diutamakan) | 127.0.0.1 |
ALLOWED_HOSTS | Mode HTTP: nilai header Host tambahan untuk diterima selain loopback (nama host dipisahkan koma). Diperlukan saat mengikat ke alamat LAN/publik atau berjalan di belakang reverse proxy. Lihat Konfigurasi Mode HTTP. | hanya loopback |
ALLOWED_ORIGINS | Mode 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_URL | URL WebSocket server tunnel (khusus mode tunnel) | wss://tunnel.ankimcp.ai |
MEDIA_ALLOWED_TYPES | Jenis MIME tambahan untuk diizinkan untuk impor jalur file (dipisahkan koma, mis., application/pdf) | - |
MEDIA_IMPORT_DIR | Batasi impor jalur file ke direktori ini | - |
MEDIA_ALLOWED_HOSTS | Izinkan 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 kuat:
"deck:DeckName"- Semua catatan di dek tertentu"tag:important"- Catatan dengan tag "penting""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 "halo" di bidang depan"flag:1"- Catatan dengan bendera merah"prop:due<=2"- Kartu yang jatuh tempo dalam 2 hari"deck:Spanish tag:verb"- Catatan dek Spanyol dengan tag kata kerja (DAN)"deck:Spanish OR deck:French"- Catatan dari salah satu dek
Catatan Penting
Penanganan CSS dan HTML
- Alat
notesInfomengembalikan informasi gaya CSS untuk kesadaran rendering yang tepat - Alat
updateNoteFieldsmendukung konten HTML di bidang dan mempertahankan gaya CSS - Setiap model catatan memiliki gaya CSS sendiri - gunakan
modelStylinguntuk mendapatkan CSS khusus 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 jenis MIME. Konfigurasikan
MEDIA_ALLOWED_TYPESuntuk mengizinkan jenis file tambahan, atauMEDIA_IMPORT_DIRuntuk 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_HOSTSuntuk mengizinkan host jaringan pribadi tertentu. - Nama file dibersihkan 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)
Ketika berjalan dalam mode HTTP, server memvalidasi header Host pada setiap permintaan. Secara default hanya host loopback (localhost, 127.0.0.1, ::1) yang diterima, tanpa memandang port. Host adalah header yang dilarang untuk browser, sehingga halaman web berbahaya tidak dapat memalsukannya — ini menutup jalur DNS-rebinding di mana halaman yang diarahkan ulang mencapai server lokal dengan Host yang dipalsukan dan tanpa Origin, serta mencapai alat MCP. Host yang tidak diizinkan ditolak dengan 403.
Jika Anda mengikat ke 0.0.0.0, berjalan di belakang reverse proxy, atau mengekspos domain tunnel publik, atur ALLOWED_HOSTS (nama host yang dipisahkan koma) untuk mengizinkan host tersebut. Saat menggunakan tunnel dengan ngrok, server menggunakan --host-header=rewrite, sehingga upstream masih melihat Host loopback. Lihat Konfigurasi Mode HTTP untuk daftar lengkap opsi.
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.
Kebijakan lengkap: https://ankimcp.ai/privacy/
- Pengumpulan data: Server tidak mengumpulkan apa pun. Server hanya meneruskan permintaan antara asisten AI Anda dan plugin AnkiConnect lokal Anda.
- Penggunaan / penyimpanan: Tidak ada penyimpanan di sisi server. Semua data kartu flash tetap berada di instalasi Anki Anda di perangkat Anda sendiri.
- Berbagi dengan pihak ketiga: Tidak ada. Server hanya berbicara 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 yang diketahui dan keterbatasan, silakan kunjungi dokumentasi kami:
Dokumentasi Masalah yang Diketahui
Keterbatasan 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 keterbatasan upstream AnkiConnect.
Solusi: Selalu tutup browser atau navigasikan ke catatan yang berbeda 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:stdioataunode dist/main-stdio.js - Bundle 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:httpataunode dist/main-http.js - Port default: 3000 (dapat dikonfigurasi melalui variabel env
PORT) - Host default:
127.0.0.1(dapat dikonfigurasi melalui variabel envHOST) - Endpoint MCP:
http://127.0.0.1:3000/(jalur root)
Mode Tunnel (Tunnel WebSocket Terkelola)
- Untuk asisten AI berbasis web melalui layanan tunnel AnkiMCP terkelola, dengan autentikasi bawaan
- Server MCP berjalan dalam proses di belakang transport dalam memori;
TunnelTransportmemiliki server MCP danTunnelClientmenjembatani ke layanan tunnel melalui WebSocket - Protokol: melayani revisi MCP 2025 saja (STDIO dan HTTP juga melayani 2026-07-28)
- Titik masuk:
dist/main-tunnel.js - Jalankan:
node dist/main-tunnel.js --tunnel(atauankimcp --tunnel) - Autentikasi:
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 mana 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 headerHosttambahan yang dipisahkan koma untuk diterima di luar set loopback bawaan (localhost,127.0.0.1,::1). Hanya nama host dan tidak bergantung port. Default: loopback saja.ALLOWED_ORIGINS- Daftar izin polaOrigin/Refererbrowser 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- Tingkat logging (default: info)
Keamanan:
- Validasi header Host (perlindungan DNS-rebinding) — setiap permintaan HTTP harus membawa header
Hostyang cocok dengan daftar izin. Secara default hanya host loopback (localhost,127.0.0.1,::1) yang diterima, tanpa memandang port.Hostadalah header yang dilarang untuk browser, sehingga halaman web berbahaya tidak dapat memalsukannya — ini menutup jalur DNS-rebinding di mana halaman yang diarahkan ulang mencapai server denganHostyang dipalsukan dan tanpaOrigin.Hostyang tidak diizinkan ditolak dengan403. - Validasi header Origin — permintaan browser dengan
Origin/Refereryang ada tetapi tidak diizinkan ditolak. Permintaan dengan tanpaOrigin(curl, Postman, klien MCP-over-HTTP) diizinkan; validasi Host adalah pertahanan terhadap rebinding. - Mengikat 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 mengikat 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
Ketika Anda mengikat 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 dari kontainer atau
Hostproxy, jadi aturALLOWED_HOSTSsesuai. Reverse proxy (nginx, Caddy, Traefik) harus meneruskanHostasli dan memiliki nama host tersebut terdaftar diALLOWED_HOSTS, atau menulis ulangHostupstream menjadilocalhost. Integrasi--ngrokbawaan menangani ini secara otomatis (lihat di bawah).
Contoh: Mode Menjalankan
# 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 Bundle MCPB
Untuk membuat bundle MCPB yang dapat didistribusikan:
npm run mcpb:bundle
Perintah ini akan:
- Sinkronkan versi dari
package.jsonkemanifest.json - Hapus file
.mcpblama - Bangun proyek TypeScript
- Kemas
dist/dannode_modules/ke dalam file.mcpb - Jalankan
mcpb cleanuntuk menghapus devDependencies (mengoptimalkan bundle 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
Bundle MCPB mencakup:
- JavaScript yang dikompilasi (direktori
dist/- mencakup ketiga titik masuk) - Hanya dependensi produksi (
node_modules/- devDependencies dihapus olehmcpb clean) - Metadata paket (
package.json) - Konfigurasi manifes (
manifest.json- dikonfigurasi untuk menggunakanmain-stdio.js) - Ikon (
icon.png)
File sumber, pengujian, dan konfigurasi pengembangan secara otomatis dikecualikan melalui .mcpbignore.
Logging di Claude Desktop
Ketika 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) pergi ke stderr dan muncul di file log khusus MCP. Claude Desktop menentukan file log mana yang menerima pesan mana, tetapi secara umum:
- Startup aplikasi dan komunikasi protokol MCP → Log khusus MCP
- Logging internal server (pino) → Keduanya log khusus MCP dan kadang-kadang main.log
Untuk melihat log secara real-time:
tail -f ~/Library/Logs/Claude/mcp-server-Anki\ MCP\ Server.log
Men-debug 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: Konfigurasi 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
- Buka Run → Edit Configurations
- Tambahkan konfigurasi Attach to Node.js/Chrome baru
- Atur port ke
9229 - Klik Debug untuk melampirkan
VS Code
- Buka panel Debug (Ctrl+Shift+D / Cmd+Shift+D)
- Pilih konfigurasi Debug MCP Server (Attach)
- Tekan F5 untuk melampirkan
Langkah 4: Atur Breakpoint dan Debug
Setelah terpasang, Anda dapat:
- Mengatur breakpoint di file sumber TypeScript Anda
- Melangkah melalui eksekusi kode
- Memeriksa variabel dan tumpukan panggilan
- Menggunakan konsol debug untuk mengevaluasi ekspresi
Debugger akan bekerja dengan source maps, memungkinkan Anda untuk 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: Konfigurasi 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 jalur ke dist/main-stdio.js
Opsi debug:
--inspect=9229- Mulai debugger segera, tidak memblokir (disarankan)--inspect-brk=9229- Jeda eksekusi sampai debugger terpasang (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
- Buka Run → Edit Configurations
- Klik tombol + dan pilih Attach to Node.js/Chrome
- Konfigurasi:
- Nama:
Attach to Anki MCP (Claude Desktop) - Host:
localhost - Port:
9229 - Attach to:
Node.js < 8atauChrome or Node.js > 6.3(tergantung versi WebStorm)
- Nama:
- Klik OK
- Klik Debug (Shift+F9) untuk melampirkan
VS Code
- 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"]
}
]
}
- Buka panel Debug (Ctrl+Shift+D / Cmd+Shift+D)
- Pilih Attach to Anki MCP (Claude Desktop)
- Tekan F5 untuk melampirkan
Langkah 4: Debug Secara Real-Time
Setelah terpasang, Anda dapat:
- Menetapkan breakpoint di file sumber TypeScript Anda (misalnya,
src/mcp/primitives/essential/tools/create-model.tool.ts) - Menggunakan Claude Desktop secara normal - breakpoint akan aktif saat alat dipanggil
- Melangkah melalui eksekusi kode
- Memeriksa variabel dan call stack
- Menggunakan konsol debug
Contoh: Tetapkan 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 terpasang selama Claude Desktop berjalan. Anda dapat melepas/memasang 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 menerbitkan:
# 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 packmembuat file.tgzyang identik dengan apa yang akan dibuat oleh npm publish- Menginstal dari
.tgzmensimulasikan apa yang didapat pengguna darinpm install -g ankimcp - Ini memungkinkan Anda menguji pengalaman pengguna secara penuh sebelum menerbitkan 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 (Branches)
- Fungsi (Functions)
- Baris (Lines)
- Pernyataan (Statements)
Laporan cakupan dihasilkan di direktori coverage/.
Versioning
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 perbaikan minor
- Perubahan yang bersifat breaking dapat diterima dalam versi 0.x
-
1.0.0 - Rilis stabil pertama
- Akan dirilis ketika API stabil dan teruji
- Perubahan yang bersifat breaking akan memerlukan kenaikan versi mayor (2.0.0, dst.)
Status Saat Ini: 0.22.0 - Pengembangan beta aktif. Fitur terbaru mencakup analisis tinjauan seluruh koleksi (review_stats kini mengagregasi 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 yang komprehensif. API dapat berubah berdasarkan umpan balik dan pengujian.
Evolusi spesifikasi MCPB
Proyek ini menargetkan spesifikasi bundel MCPB Anthropic, yang masih terus berkembang. Kami melacak spesifikasi di https://github.com/modelcontextprotocol/mcpb dan dapat memperkenalkan perubahan yang bersifat breaking untuk tetap patuh. Perubahan yang bersifat breaking diizinkan dalam skema versioning 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: Ringan, implementasi satu file
- 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
- Keterpeliharaan: Mudah diperluas dengan fitur baru tanpa menyentuh kode yang ada
- Pengujian: Rangkaian pengujian komprehensif dengan persyaratan cakupan 70%
- Keamanan tipe: TypeScript ketat dengan validasi Zod
- Penanganan kesalahan: Penanganan kesalahan yang kuat dengan umpan balik pengguna yang membantu
- Siap produksi: Logging 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 membutuhkan fondasi yang solid untuk membangun integrasi Anki tingkat lanjut atau berencana memperluas fungsionalitas secara signifikan, pendekatan arsitektur proyek ini memudahkan pemeliharaan dan penskalaan seiring waktu.
Tautan Berguna
- Dokumentasi Model Context Protocol
- Dokumentasi API AnkiConnect
- Unduhan Claude Desktop
- Membangun Ekstensi Desktop (Blog Anthropic)
- Repositori Server MCP
- Dokumentasi NestJS
- Situs Resmi Anki
Lisensi & Atribusi
Proyek ini dilisensikan di bawah Lisensi MIT — lihat LICENSE untuk teks lengkap.
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 mereferensikan 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 pemiliknya masing-masing.