Anki MCP
resmiServer 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_cardsdanpresent_card, lalu catat peringkat Anda denganrate_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
findNotesmenggunakan sintaks kueri Anki, periksa dengannotesInfo, dan ubah bidang denganupdateNoteFields. - Kelola jenis catatan dan gaya — buat jenis catatan baru dengan
createModel, sesuaikan CSS-nya denganupdateModelStyling, atau ubah templat kartunya denganupdateModelTemplates. - Impor file media ke dalam koleksi Anda — unggah file gambar atau audio dari jalur lokal atau URL menggunakan
storeMediaFiledan rujuk dalam bidang catatan.
Dokumentasi
Server Anki MCP
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:
-
"Bantu saya meninjau dek Bahasa 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 Bahasa Arab dengan gaya RTL." — Asisten mencantumkan tipe catatan (
modelNames), membuat model RTL kustom jika diperlukan (createModel+updateModelStylinguntuk CSS kanan-ke-kiri), lalu membuat kartu secara batch (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 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 perubahanget_due_cards- Dapatkan kartu yang jatuh tempo untuk ditinjau, opsional difilter berdasarkan dekget_cards- Dapatkan kartu dengan pemfilteran fleksibel berdasarkan status (jatuh tempo, baru, belajar, ditangguhkan, dikubur) dan dekpresent_card- Tampilkan kartu untuk ditinjau dengan sisi pertanyaan/depannyarate_card- Nilai kinerja kartu (Lagi, Sulit, Baik, Mudah) dan jadwalkan tinjauan berikutnya
Manajemen Dek
listDecks- Cantumkan semua dek, opsional dengan statistik jumlah kartu per dekdeckStats- Dapatkan statistik komprehensif untuk satu dek (jumlah, distribusi kemudahan/interval)createDeck- Buat dek kosong baru (mendukungParent::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 ditentukanaddNotes- 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 tertenturemoveTags- Hapus tag yang dipisahkan spasi dari catatan tertentureplaceTags- Ganti nama tag di seluruh catatan tertentuclearUnusedTags- Hapus tag yatim yang tidak digunakan oleh catatan apa pun (destruktif)
Manajemen Media
getMediaFilesNames- Cantumkan 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 paling efisien.
Manajemen Model/Templat
modelNames- Cantumkan semua tipe/model catatan 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 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 dekreview_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 kartuguiSelectCard- Pilih kartu tertentu di Browser KartuguiSelectedNotes- Dapatkan ID catatan yang saat ini dipilih di Browser KartuguiAddCards- Buka dialog Tambah Kartu dengan detail catatan prasetelguiEditNote- Buka editor catatan untuk catatan tertentuguiDeckOverview- Buka dialog Ikhtisar 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 terinstal
- Node.js 22.12.0+
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:
- Unduh bundel
.mcpbterbaru dari halaman Rilis - 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
- Metode 1: Buka Pengaturan → Ekstensi, lalu seret dan lepas file
- Konfigurasikan URL AnkiConnect jika diperlukan (default ke
http://localhost:8765) - 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:
- Claude Desktop
- Cursor IDE - Editor kode bertenaga AI
- Cline - Ekstensi VS Code untuk bantuan AI
- Zed Editor - Editor kode modern yang 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 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 headerHostloopback secara default untuk perlindungan DNS-rebinding — aturALLOWED_HOSTSke 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:
| 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 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)
| 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 | Timeout permintaan dalam ms | 5000 |
READ_ONLY | Aktifkan mode hanya-baca (true atau 1) | false |
ALLOWED_HOSTS | Mode 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_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 (hanya mode tunnel) | wss://tunnel.ankimcp.ai |
MEDIA_ALLOWED_TYPES | Tipe MIME tambahan yang 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 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
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 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_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 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:stdioataunode 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:httpataunode dist/main-http.js - Port default: 3000 (dapat dikonfigurasi melalui env var
PORT) - Host default:
127.0.0.1(dapat dikonfigurasi melalui env varHOST) - 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;
TunnelMcpServicemenghubungkannya ke server MCP danTunnelClientmenjembataninya ke layanan tunnel melalui WebSocket - Titik masuk:
dist/main-tunnel.js - Jalankan:
node dist/main-tunnel.js --tunnel(atauankimcp --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 headerHosttambahan 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 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- Level 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, terlepas dari port.Hostadalah header yang dilarang browser, sehingga halaman web berbahaya tidak dapat memalsukannya — ini menutup jalur DNS-rebinding di mana halaman yang di-rebound mencapai server denganHostpalsu dan tanpaOrigin.Hostyang tidak diizinkan ditolak dengan403. - Validasi header Origin — permintaan browser dengan
Origin/Refereryang ada tetapi tidak diizinkan ditolak. Permintaan tanpaOrigin(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
Hostproxy, jadi aturALLOWED_HOSTSsesuai. Reverse proxy (nginx, Caddy, Traefik) harus meneruskanHostasli dan nama host tersebut terdaftar diALLOWED_HOSTS, atau menulis ulangHostupstream kelocalhost. Integrasi--ngrokbawaan 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:
- Menyinkronkan versi dari
package.jsonkemanifest.json - Menghapus file
.mcpblama - Membangun proyek TypeScript
- Mengemas
dist/dannode_modules/ke dalam file.mcpb - Menjalankan
mcpb cleanuntuk 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 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.
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
- 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 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
- Buka Run → Edit Configurations
- Klik tombol + dan pilih Attach to Node.js/Chrome
- Konfigurasikan:
- Name:
Attach to Anki MCP (Claude Desktop) - Host:
localhost - Port:
9229 - Attach to:
Node.js < 8atauChrome or Node.js > 6.3(tergantung versi WebStorm)
- Name:
- 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 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 packmembuat file.tgzyang identik dengan yang akan dibuat oleh npm publish- Menginstal dari
.tgzmensimulasikan apa yang didapat pengguna darinpm 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
- Dokumentasi Model Context Protocol
- Dokumentasi API AnkiConnect
- Unduh Claude Desktop
- Membangun Ekstensi Desktop (Blog Anthropic)
- Repositori Server MCP
- Dokumentasi NestJS
- Situs Web Resmi Anki
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.