Anki MCP
ทางการเซิร์ฟเวอร์ MCP ที่ช่วยให้ผู้ช่วย AI สามารถโต้ตอบกับ Anki ซึ่งเป็นแอปพลิเคชันบัตรคำศัพท์แบบเว้นระยะซ้ำได้
คุณทำอะไรได้บ้างด้วย Anki MCP?
- ทบทวนการ์ดที่ถึงกำหนดแบบสนทนา — ให้ผู้ช่วยของคุณดึงการ์ดที่ถึงกำหนดด้วย
get_due_cardsนำเสนอแต่ละใบผ่านpresent_cardและบันทึกการให้คะแนนของคุณด้วยrate_card - สร้างและเพิ่มแฟลชการ์ดเป็นชุด — ให้ผู้ช่วยสร้างโน้ตเป็นจำนวนมากด้วย
addNotesและอาจสร้างโมเดลที่กำหนดเองก่อนด้วยcreateModelและupdateModelStyling - ค้นหาและแก้ไขโน้ตที่มีอยู่ — ใช้
findNotesกับไวยากรณ์คำค้นหาแบบ Anki ตรวจสอบรายละเอียดผ่านnotesInfoและอัปเดตฟิลด์ด้วยupdateNoteFields - จัดการเด็คและกำหนดเวลา — สร้างเด็คด้วย
createDeckย้ายการ์ดผ่านchangeDeckหรือจัดตารางการ์ดใหม่โดยใช้setDueDateและforgetCards - นำสื่อเข้าไปในโน้ต — ให้ผู้ช่วยอัปโหลดรูปภาพในเครื่องหรือ URL ด้วย
storeMediaFileและฝังลงในฟิลด์ของโน้ต - ควบคุมอินเทอร์เฟซ Anki — เปิดเบราว์เซอร์หรือตัวแก้ไขด้วย
guiBrowseและguiEditNoteหรือรับโน้ตที่เลือกผ่านguiSelectedNotes
เอกสาร
เซิร์ฟเวอร์ Anki MCP
ผสานรวม Anki เข้ากับผู้ช่วย AI ผ่าน Model Context Protocol
เบต้า - โปรเจกต์นี้อยู่ระหว่างการพัฒนาอย่างต่อเนื่อง API และฟีเจอร์ต่างๆ อาจมีการเปลี่ยนแปลง
เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่ช่วยให้ผู้ช่วย AI สามารถโต้ตอบกับ Anki ซึ่งเป็นแอปพลิเคชันแฟลชการ์ดแบบเว้นระยะ
เปลี่ยนประสบการณ์การใช้งาน Anki ของคุณด้วยการโต้ตอบด้วยภาษาธรรมชาติ - เหมือนมีครูสอนพิเศษส่วนตัว ผู้ช่วย AI ไม่เพียงแต่นำเสนอคำถามและคำตอบเท่านั้น แต่ยังสามารถอธิบายแนวคิด ทำให้กระบวนการเรียนรู้มีส่วนร่วมและเป็นธรรมชาติมากขึ้น ให้บริบท และปรับให้เข้ากับสไตล์การเรียนรู้ของคุณ มันสามารถสร้างและแก้ไขโน้ตได้ทันที เปลี่ยนช่วงเวลาการเรียนของคุณให้เป็นการสนทนาที่มีชีวิตชีวา ฟีเจอร์เพิ่มเติมกำลังจะมาเร็วๆ นี้!
ตัวอย่างและบทช่วยสอน
สำหรับคำแนะนำที่ครอบคลุม ตัวอย่างจริง และบทช่วยสอนทีละขั้นตอนเกี่ยวกับการใช้เซิร์ฟเวอร์ MCP นี้กับ Claude Desktop โปรดเยี่ยมชม:
ankimcp.ai - เอกสารประกอบที่สมบูรณ์พร้อมตัวอย่างเชิงปฏิบัติและกรณีการใช้งาน
ดู docs/ สำหรับเอกสารประกอบเพิ่มเติม รวมถึง คู่มือการตั้งค่าผู้ตรวจทาน และสำรับ Anki ตัวอย่าง
ตัวอย่างกรณีการใช้งาน
พรอมต์ตัวอย่างสามแบบที่แสดงโฟลว์เครื่องมือที่เซิร์ฟเวอร์นี้เปิดใช้งาน:
-
"ช่วยฉันทบทวนสำรับภาษาสเปนหน่อย" — ผู้ช่วยซิงค์กับ AnkiWeb (
sync) ดึงการ์ดที่ถึงกำหนด (get_due_cardsพร้อมตัวกรองสำรับ) นำเสนอการ์ดแต่ละใบ (present_card) และบันทึกการให้คะแนนของคุณ (rate_card) บทสนทนาการเรียนที่เป็นธรรมชาติพร้อมคำอธิบายที่ปรับให้เหมาะกับคุณ -
"สร้างการ์ดคำศัพท์ภาษาอาหรับ 10 ใบพร้อมสไตล์ RTL" — ผู้ช่วยแสดงรายการประเภทโน้ต (
modelNames) สร้างโมเดล RTL ที่กำหนดเองหากจำเป็น (createModel+updateModelStylingสำหรับ CSS แบบขวาไปซ้าย) จากนั้นสร้างการ์ดเป็นชุด (addNotes) -
"นำเข้ารูปภาพนี้จากโฟลเดอร์ Downloads ของฉันไปไว้ที่ด้านหน้าของโน้ตที่เลือก" — ผู้ช่วยอัปโหลดไฟล์ในเครื่อง (
storeMediaFileพร้อมเส้นทางไฟล์) อ่านโน้ตที่เลือกอยู่ในปัจจุบันจากเบราว์เซอร์ (guiSelectedNotes+notesInfo) และอัปเดตฟิลด์ด้านหน้าด้วยแท็ก<img>(updateNoteFields)
เครื่องมือที่มีให้ใช้งาน
เซิร์ฟเวอร์เปิดเผย เครื่องมือ MCP จำนวน 50 รายการ — เครื่องมือจำเป็น 39 รายการสำหรับการดำเนินการ Anki ในชีวิตประจำวัน และเครื่องมือ GUI 11 รายการที่ขับเคลื่อนอินเทอร์เฟซเดสก์ท็อป Anki สำหรับเวิร์กโฟลว์การแก้ไข/สร้างโน้ต
เครื่องมือจำเป็น
ทบทวนและศึกษา
sync- ซิงค์กับ AnkiWeb เพื่อดึงข้อมูลล่าสุดและส่งการเปลี่ยนแปลงget_due_cards- รับการ์ดที่ถึงกำหนดทบทวน โดยสามารถกรองตามสำรับได้ (ไม่แสดงคำตอบเว้นแต่include_answer: true, ค่าเริ่มต้นfalse)get_cards- รับการ์ดพร้อมการกรองที่ยืดหยุ่นตามสถานะ (ถึงกำหนด ใหม่ กำลังเรียนรู้ ระงับ ฝัง) และสำรับ (ไม่แสดงคำตอบเว้นแต่include_answer: true, ค่าเริ่มต้นfalse)present_card- แสดงการ์ดสำหรับทบทวนพร้อมด้านคำถาม/ด้านหน้าrate_card- ให้คะแนนประสิทธิภาพการ์ด (อีกครั้ง ยาก ดี ง่าย) และกำหนดเวลาการทบทวนครั้งถัดไปforgetCards- รีเซ็ตการ์ดเป็นสถานะใหม่ โดยละทิ้งกำหนดเวลาโดยไม่บันทึกการทบทวนsetDueDate- กำหนดเวลาการ์ดใหม่ให้ถึงกำหนดในอีก N วัน ("0","3-7","1!") โดยไม่บันทึกการทบทวน
หมายเหตุ:
forgetCardsและsetDueDateเปลี่ยนกำหนดเวลา โดยไม่ บันทึกการทบทวน ซึ่งเป็นสิ่งที่แยกออกจากrate_cardใช้เมื่อกำหนดเวลาของการ์ดผิดพลาดมากกว่าคำตอบ: การให้คะแนนการ์ดAgainเพื่อฝังให้ลึกลงไปจะบันทึกการพลาดจริงและลดปัจจัยความง่ายลง ซึ่งจะทำให้ทั้งกำหนดเวลาในอนาคตและสถิติของคุณคลาดเคลื่อนอย่างถาวรforgetCardsล้างช่วงเวลาและเริ่มการ์ดใหม่setDueDateเก็บประวัติการ์ดไว้และเพียงเลื่อนการทบทวนครั้งถัดไป
หมายเหตุ: เนื้อหาการ์ด
front/backถูกเรนเดอร์ต่อการ์ดจากเทมเพลตของตัวเอง (ตามที่ Anki แสดง) ดังนั้นการ์ดแบบกลับด้านและการ์ด cloze จะแสดงทิศทางที่ถูกต้อง ข้อความคงที่ที่เพิ่มโดยเทมเพลตการ์ดของคุณจะปรากฏในผลลัพธ์ด้วย
การจัดการสำรับ
listDecks- แสดงรายการสำรับทั้งหมด พร้อมสถิติคิวการศึกษาต่อสำรับ (ไม่บังคับ)deckStats- รับสถิติที่ครอบคลุมสำหรับสำรับเดียว (คิวการศึกษา จำนวนสถานะการ์ดจริง การกระจายความง่าย/ช่วงเวลา)createDeck- สร้างสำรับว่างใหม่ (รองรับParent::Child, สูงสุด 2 ระดับ)changeDeck- ย้ายการ์ดไปยังสำรับอื่น (สร้างหากยังไม่มี)
หมายเหตุ: สถิติสำรับมีสองรูปแบบ บล็อก
counts(และทุกอย่างที่listDecksรายงาน) สะท้อนเบราว์เซอร์สำรับของ Anki: การ์ดที่ถึงกำหนดวันนี้ จำกัดโดยขีดจำกัดการ์ดใหม่/การทบทวนรายวันของแต่ละสำรับ โดยไม่รวมการ์ดที่ระงับและฝัง — ดังนั้นreviewจึงไม่ใช่ "การ์ดที่โตเต็มที่" และกลุ่มotherเป็นเพียงเศษที่เหลือทางคณิตศาสตร์ (ส่วนใหญ่เป็นการ์ดทบทวนที่ยังไม่ถึงกำหนดวันนี้บวกการ์ดใหม่ที่เกินขีดจำกัดรายวัน) สำหรับยอดรวมตามสถานะจริง ให้ใช้บล็อกstatesบนdeckStats/collection_statsซึ่งนับnew,learning,review,suspendedและburiedผ่านการค้นหา Anki โดยไม่สนใจวันที่ถึงกำหนดและขีดจำกัดรายวัน
การจัดการโน้ต
addNote- สร้างโน้ตเดียวพร้อมฟิลด์และแท็กที่ระบุaddNotes- สร้างเป็นชุดสูงสุด 100 โน้ตที่ใช้สำรับและโมเดลร่วมกัน (รองรับความสำเร็จบางส่วน)findNotes- ค้นหาโน้ตโดยใช้ไวยากรณ์การค้นหา Anki (deck:,tag:,is:due, ฯลฯ)notesInfo- รับข้อมูลโดยละเอียดเกี่ยวกับโน้ต (ฟิลด์ แท็ก สไตล์ CSS)updateNoteFields- อัปเดตฟิลด์โน้ตที่มีอยู่ (รองรับ CSS รองรับเนื้อหา HTML)deleteNotes- ลบโน้ตและการ์ดที่เกี่ยวข้องทั้งหมด (ทำลายล้าง ต้องยืนยัน)
การจัดการแท็ก
getTags- รับแท็กทั้งหมดในคอลเลกชัน (ใช้รายการแรกเพื่อหลีกเลี่ยงการซ้ำซ้อน)addTags- เพิ่มแท็กที่คั่นด้วยช่องว่างให้กับโน้ตที่ระบุremoveTags- ลบแท็กที่คั่นด้วยช่องว่างจากโน้ตที่ระบุreplaceTags- เปลี่ยนชื่อแท็กในโน้ตที่ระบุclearUnusedTags- ลบแท็กที่ไม่มีเจ้าของซึ่งไม่ได้ใช้โดยโน้ตใดๆ (ทำลายล้าง)
การจัดการสื่อ
getMediaFilesNames- แสดงรายการไฟล์สื่อในcollection.media, กรองตามรูปแบบได้ (ไม่บังคับ)retrieveMediaFile- ดาวน์โหลดไฟล์สื่อเป็นเนื้อหา base64storeMediaFile- อัปโหลดสื่อจากข้อมูล base64 เส้นทางไฟล์สัมบูรณ์ หรือ URLdeleteMediaFile- ลบไฟล์สื่อจากcollection.media(ทำลายล้าง)
💡 แนวทางปฏิบัติที่ดีที่สุดสำหรับรูปภาพ:
- ✅ ใช้เส้นทางไฟล์ (เช่น
/Users/you/image.png) - รวดเร็วและมีประสิทธิภาพ - ✅ ใช้ URL (เช่น
https://example.com/image.jpg) - ดาวน์โหลดโดยตรง - ❌ หลีกเลี่ยง base64 - ช้ามากและไม่ประหยัดโทเค็น
เพียงบอก Claude ว่ารูปภาพอยู่ที่ไหน มันจะจัดการอัปโหลดโดยอัตโนมัติด้วยวิธีที่มีประสิทธิภาพสูงสุด
การจัดการโมเดล/เทมเพลต
modelNames- แสดงรายการประเภทโน้ต/โมเดลทั้งหมดที่มีmodelFieldNames- รับชื่อฟิลด์สำหรับประเภทโน้ตเฉพาะmodelStyling- รับข้อมูลสไตล์ CSS สำหรับประเภทโน้ตmodelTemplates- รับเทมเพลตการ์ด (HTML ด้านหน้าและด้านหลัง) สำหรับประเภทโน้ตcreateModel- สร้างประเภทโน้ตใหม่พร้อมฟิลด์ เทมเพลตการ์ด และ CSS ที่กำหนดเอง (เช่น โมเดล RTL)updateModelStyling- อัปเดตสไตล์ CSS สำหรับประเภทโน้ตที่มีอยู่ (ใช้กับการ์ดทั้งหมด)updateModelTemplates- อัปเดตเทมเพลตการ์ด (HTML ด้านหน้าและด้านหลัง) สำหรับประเภทโน้ตที่มีอยู่ (ใช้กับการ์ดทั้งหมด)addModelField- เพิ่มฟิลด์ใหม่ให้กับประเภทโน้ตที่มีอยู่ (ต่อท้ายที่ส่วนท้ายหรือแทรกที่ตำแหน่งเฉพาะ)removeModelField- ลบฟิลด์จากประเภทโน้ตที่มีอยู่ (ลบเนื้อหาจากโน้ตทั้งหมด ต้องยืนยันอย่างชัดเจน)renameModelField- เปลี่ยนชื่อฟิลด์ในประเภทโน้ตที่มีอยู่ (เทมเพลตการ์ดที่อ้างอิงชื่อเก่าต้องอัปเดตแยกต่างหาก)repositionModelField- เปลี่ยนตำแหน่งของฟิลด์ภายในประเภทโน้ตที่มีอยู่
สถิติ
collection_stats- สถิติรวมทั่วทุกสำรับพร้อมรายละเอียดต่อสำรับและจำนวนสถานะการ์ดทั่วคอลเลกชันreview_stats- การวิเคราะห์ประวัติการทบทวน (รูปแบบเวลา ตัวชี้วัดการจดจำ ช่วงการศึกษาต่อเนื่อง)
เครื่องมือ GUI
เครื่องมือที่ขับเคลื่อนอินเทอร์เฟซเดสก์ท็อป Anki มีไว้สำหรับเวิร์กโฟลว์การแก้ไข/สร้างโน้ตและการจัดการสำรับ ไม่ใช่ สำหรับช่วงการทบทวน
guiBrowse- เปิดเบราว์เซอร์การ์ดและค้นหาการ์ดguiSelectCard- เลือกการ์ดเฉพาะในเบราว์เซอร์การ์ดguiSelectedNotes- รับ ID ของโน้ตที่เลือกอยู่ในปัจจุบันในเบราว์เซอร์การ์ดguiAddCards- เปิดกล่องโต้ตอบเพิ่มการ์ดพร้อมรายละเอียดโน้ตที่ตั้งไว้ล่วงหน้าguiEditNote- เปิดตัวแก้ไขโน้ตสำหรับโน้ตเฉพาะguiDeckOverview- เปิดกล่องโต้ตอบภาพรวมสำรับสำหรับสำรับเฉพาะguiDeckBrowser- เปิดกล่องโต้ตอบเบราว์เซอร์สำรับguiCurrentCard- รับข้อมูลเกี่ยวกับการ์ดปัจจุบันในโหมดทบทวนguiShowQuestion- แสดงด้านคำถามของการ์ดปัจจุบันguiShowAnswer- แสดงด้านคำตอบของการ์ดปัจจุบันguiUndo- เลิกทำการกระทำล่าสุดใน Anki
ข้อกำหนดเบื้องต้น
- Anki พร้อมปลั๊กอิน AnkiConnect ที่ติดตั้ง
- Node.js 22.12.0+
การติดตั้ง
มีหลายวิธีในการติดตั้งเซิร์ฟเวอร์บนเครื่องของคุณ เมื่อติดตั้งแล้ว ไปที่ การเชื่อมต่อไคลเอ็นต์ AI เพื่อเชื่อมต่อกับผู้ช่วย AI ของคุณ — ในเครื่องหรือระยะไกล
npm (global หรือ npx)
วิธีทั่วไปในการติดตั้งเซิร์ฟเวอร์ เหมาะสำหรับไคลเอ็นต์ MCP ใดๆ ที่เปิดใช้งานโดยตรง
ติดตั้งแบบ global สำหรับไคลเอ็นต์ที่รันคำสั่ง ankimcp:
npm install -g @ankimcp/anki-mcp-server
หรือรันตามความต้องการโดยไม่ต้องติดตั้ง:
npx @ankimcp/anki-mcp-server
บันเดิล MCPB (แนะนำสำหรับ Claude Desktop)
วิธีที่ง่ายที่สุดในการติดตั้งเซิร์ฟเวอร์ MCP นี้สำหรับ Claude Desktop:
- ดาวน์โหลดบันเดิล
.mcpbล่าสุดจากหน้า Releases - ใน Claude Desktop ติดตั้งส่วนขยาย:
- วิธีที่ 1: ไปที่ การตั้งค่า → ส่วนขยาย จากนั้นลากและวางไฟล์
.mcpb - วิธีที่ 2: ไปที่ การตั้งค่า → นักพัฒนา → ส่วนขยาย → ติดตั้งส่วนขยาย จากนั้นเลือกไฟล์
.mcpb
- วิธีที่ 1: ไปที่ การตั้งค่า → ส่วนขยาย จากนั้นลากและวางไฟล์
- กำหนดค่า URL ของ AnkiConnect หากจำเป็น (ค่าเริ่มต้นคือ
http://localhost:8765) - รีสตาร์ท Claude Desktop
เพียงเท่านี้! บันเดิลมีทุกสิ่งที่จำเป็นในการรันเซิร์ฟเวอร์ในเครื่อง
สำหรับผู้ตรวจทานไดเรกทอรี MCP ของ Anthropic: คำแนะนำแบบ zero-to-integration พร้อมสำรับตัวอย่างที่เติมข้อมูลไว้ล่วงหน้าอยู่ใน
docs/reviewer-setup.md
ติดตั้งจากซอร์ส (สำหรับการพัฒนา)
สำหรับการพัฒนาหรือการใช้งานขั้นสูง (การรันชุดทดสอบต้องใช้ Node.js 24.9+ — สคริปต์ทดสอบ npm โหลดแพ็คเกจ NestJS 12 ที่เป็น ESM-only ผ่าน require(esm) ซึ่ง Jest รองรับเฉพาะที่นั่น ข้อกำหนดรันไทม์สำหรับ การใช้ เซิร์ฟเวอร์ยังคงเป็น 22.12.0+):
npm install
npm run build
การเชื่อมต่อไคลเอ็นต์ AI
มีสองวิธีที่ผู้ช่วย AI สามารถเข้าถึงเซิร์ฟเวอร์นี้ ขึ้นอยู่กับว่าผู้ช่วยรันอยู่ที่ไหน:
- ในเครื่อง — เซิร์ฟเวอร์รันบนเครื่องเดียวกับไคลเอ็นต์ AI (Claude Desktop, Cursor, Cline, Zed หรือเซสชันเบราว์เซอร์ในเครื่อง) ใช้ STDIO สำหรับไคลเอ็นต์ MCP เดสก์ท็อป HTTP สำหรับเครื่องมือบนเว็บในเครื่อง
- ระยะไกล — AI ที่โฮสต์/ระยะไกล (เช่น ChatGPT หรือ Claude.ai ในคลาวด์) จำเป็นต้องเข้าถึง Anki ที่รันบนเครื่องท้องถิ่นของคุณ ใช้ Tunnel ที่จัดการ (✅ แนะนำ — มีการรับรองความถูกต้อง) หรือเป็นทางเลือกที่ไม่มีการรับรองความถูกต้องที่เบากว่า ให้ใช้ ngrok
ในเครื่อง
เซิร์ฟเวอร์รันบนคอมพิวเตอร์เครื่องเดียวกับไคลเอ็นต์ AI และสื่อสารกับ AnkiConnect บน localhost
STDIO (การรวมในเครื่องหลัก)
STDIO เป็นทรานสปอร์ตมาตรฐานสำหรับไคลเอ็นต์ MCP เดสก์ท็อปในเครื่อง — Claude Desktop, Cursor IDE, Cline, Zed Editor และอื่นๆ ไคลเอ็นต์เปิดใช้เซิร์ฟเวอร์เป็นซับโพรเซสและสื่อสารผ่านอินพุต/เอาต์พุตมาตรฐาน ไคลเอนต์ที่รองรับ:
- Claude Desktop
- Cursor IDE - โปรแกรมแก้ไขโค้ดที่ขับเคลื่อนด้วย AI
- Cline - ส่วนขยาย VS Code สำหรับความช่วยเหลือจาก AI
- Zed Editor - โปรแกรมแก้ไขโค้ดที่ทันสมัยและรวดเร็ว
- ไคลเอนต์ MCP อื่น ๆ ที่รองรับการส่งข้อมูลแบบ STDIO
สำหรับ Claude Desktop บันเดิล MCPB เป็นวิธีที่ง่ายที่สุด สำหรับไคลเอนต์อื่น ๆ ให้กำหนดค่าแพ็กเกจ npm ด้วยแฟล็ก --stdio
การกำหนดค่า - เลือกหนึ่งวิธี:
วิธีที่ 1: ใช้ npx (แนะนำ - ไม่ต้องติดตั้ง)
{
"mcpServers": {
"anki-mcp": {
"command": "npx",
"args": ["-y", "@ankimcp/anki-mcp-server", "--stdio"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
วิธีที่ 2: ใช้การติดตั้งแบบ global
ขั้นแรก ติดตั้งแบบ global:
npm install -g @ankimcp/anki-mcp-server
จากนั้นกำหนดค่า:
{
"mcpServers": {
"anki-mcp": {
"command": "ankimcp",
"args": ["--stdio"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
ตำแหน่งไฟล์กำหนดค่า:
- Cursor IDE:
~/.cursor/mcp.json(macOS/Linux) หรือ%USERPROFILE%\.cursor\mcp.json(Windows) - Cline: เข้าถึงได้ผ่าน UI การตั้งค่าใน VS Code
- Zed Editor: ติดตั้งเป็นส่วนขยาย MCP ผ่านตลาดส่วนขยาย
สำหรับคุณสมบัติเฉพาะของไคลเอนต์และการแก้ไขปัญหา โปรดดูเอกสารของไคลเอนต์ MCP ของคุณ ดูเพิ่มเติมที่ เชื่อมต่อกับ Claude Desktop สำหรับการกำหนดค่าที่ชี้ไปยัง dist/main-stdio.js ที่สร้างไว้แล้วโดยตรง
HTTP (AI บนเว็บแบบ local)
โหมด HTTP จะรันเซิร์ฟเวอร์เป็นเว็บเซิร์ฟเวอร์ท้องถิ่นที่พูดโปรโตคอล MCP Streamable HTTP เป็นการส่งข้อมูลที่เครื่องมือ AI บนเว็บใช้พูดคุยเมื่อชี้ไปที่เครื่องของคุณ และยังเป็นสิ่งที่ตัวเลือก Remote เปิดเผยสู่โลกภายนอก โดยตัวมันเอง โหมด HTTP จะผูกกับ localhost เท่านั้น
ผูกนอกเหนือจาก localhost หรือไม่? หากคุณส่ง
--host 0.0.0.0(หรือรัน behind reverse proxy/public domain) เซิร์ฟเวอร์จะยอมรับเฉพาะส่วนหัวHostแบบ loopback โดยค่าเริ่มต้นเพื่อป้องกัน DNS-rebinding — ตั้งค่าALLOWED_HOSTSเป็นชื่อโฮสต์ที่ไคลเอนต์ใช้ ดู การกำหนดค่าโหมด HTTP
การตั้งค่า - เลือกหนึ่งวิธี:
วิธีที่ 1: ใช้ npx (แนะนำ - ไม่ต้องติดตั้ง)
# 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
วิธีที่ 2: ใช้การติดตั้งแบบ 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
วิธีที่ 3: ติดตั้งจากซอร์ส (สำหรับการพัฒนา)
npm install
npm run build
npm run start:prod:http
เพื่อให้เซิร์ฟเวอร์ HTTP ท้องถิ่นเข้าถึงได้โดย AI ที่โฮสต์บนคลาวด์ ให้ใช้ตัวเลือก Remote ด้านล่าง
Remote
AI ที่โฮสต์/ระยะไกล (เช่น ChatGPT หรือ Claude.ai ที่รันบนคลาวด์) ไม่สามารถเข้าถึง localhost ได้โดยตรง ตัวเลือกเหล่านี้เปิดเผย Anki ท้องถิ่น ของคุณสู่อินเทอร์เน็ตเพื่อให้ผู้ช่วยระยะไกลสามารถพูดคุยได้
Tunnel (✅ แนะนำ)
เส้นทางระยะไกลที่แนะนำ — มีการรับรองความถูกต้องและปลอดภัย ต่างจากพอร์ตสาธารณะดิบ โหมด tunnel กำหนดให้คุณต้องเข้าสู่ระบบ (OAuth 2.0 device flow) ดังนั้น endpoint จะไม่เปิดให้ใครก็ตามที่เดา URL ได้
โหมด Tunnel ให้ผู้ช่วย AI บนเว็บเข้าถึง Anki ท้องถิ่น ของคุณได้โดยไม่ต้องรัน tunnel ของคุณเอง เซิร์ฟเวอร์เชื่อมต่อออกไปยังบริการ tunnel ที่จัดการโดย AnkiMCP (wss://tunnel.ankimcp.ai) ผ่าน WebSocket และได้รับ URL สาธารณะ การรับรองความถูกต้องมีในตัว — ไม่ต้องมีบัญชี ngrok หรือกระบวนการ tunnel แยก และคุณเข้าสู่ระบบเพียงครั้งเดียว
เข้าสู่ระบบ (OAuth device flow):
โหมด Tunnel ใช้ OAuth 2.0 Device Authorization Grant การเข้าสู่ระบบจะเปิดเบราว์เซอร์ของคุณไปยังหน้า approve โดยอัตโนมัติพร้อมรหัสที่ฝังอยู่ใน URL แล้ว — ไม่ต้องพิมพ์อะไร แค่กด approve (หากเบราว์เซอร์เปิดไม่ได้ เทอร์มินัลจะพิมพ์ URL สำหรับยืนยันและรหัสให้ป้อนด้วยตนเองเป็นทางเลือกสำรอง) เมื่อสำเร็จ ข้อมูลรับรองจะถูกบันทึกไปยัง ~/.ankimcp/credentials.json (สิทธิ์ไฟล์ 0600)
# Pre-authenticate (optional — --tunnel will trigger this automatically if needed)
ankimcp --login
npx @ankimcp/anki-mcp-server --login
# Clear saved credentials
ankimcp --logout
เริ่ม 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
หากไม่มีข้อมูลรับรอง --tunnel จะเริ่มขั้นตอนการเข้าสู่ระบบโดยอัตโนมัติก่อน จากนั้นจึงดำเนินการต่อกับ tunnel การเข้าสู่ระบบอัตโนมัตินี้ต้องใช้เทอร์มินัลแบบโต้ตอบ — เมื่อ stdout ไม่ใช่ TTY (systemd, headless Docker, CI) เซิร์ฟเวอร์จะล้มเหลวอย่างรวดเร็วและขอให้คุณรัน ankimcp --login ก่อน เมื่อเชื่อมต่อแล้ว URL tunnel สาธารณะจะถูกพิมพ์; กด Ctrl+C เพื่อตัดการเชื่อมต่อ แชร์ URL นั้นกับผู้ช่วย AI ของคุณ
ตัวแปรสภาพแวดล้อมสำหรับโหมด Tunnel:
| ตัวแปร | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
TUNNEL_SERVER_URL | URL WebSocket ของเซิร์ฟเวอร์ tunnel (ค่าแฟล็ก --tunnel/--login จะแทนที่ค่านี้) | wss://tunnel.ankimcp.ai |
TUNNEL_AUTH_CLIENT_ID | OAuth client ID สำหรับ device flow ขั้นสูง — จำเป็นเมื่อชี้ไปที่บริการ tunnel/auth ที่โฮสต์เองเท่านั้น | (ในตัว) |
endpoint การรับรองความถูกต้องของ device-flow (/auth/device, /auth/token) มาจาก TUNNEL_SERVER_URL ดังนั้นการชี้ --tunnel (หรือ TUNNEL_SERVER_URL) ไปที่โฮสต์อื่นจะย้ายการรับรองความถูกต้องไปที่โฮสต์นั้นด้วย
วิธีการทำงาน: โหมด Tunnel รันเซิร์ฟเวอร์ MCP ในกระบวนการ behind transport ในหน่วยความจำ (TunnelTransport) transport นั้นเป็นเจ้าของเซิร์ฟเวอร์ MCP และเปลี่ยนเนื้อหาคำขอที่ถ่ายทอดแต่ละรายการเป็นการตอบสนอง และ TunnelClient เชื่อมต่อกับบริการ tunnel ระยะไกลผ่าน WebSocket — ถ่ายทอดคำขอ MCP เข้าและตอบกลับออก AnkiConnect ยังคงเข้าถึงได้เฉพาะบนเครื่องท้องถิ่นของคุณเท่านั้น
โปรโตคอล revisions: เนื่องจาก tunnel เชื่อมต่อเซิร์ฟเวอร์ MCP ในกระบวนการ โหมด tunnel ให้บริการเฉพาะ MCP protocol revision ปี 2025 ในขณะที่โหมด STDIO และ HTTP ให้บริการทั้งปี 2025 และ revision 2026-07-28 ที่ใหม่กว่า ทุกเครื่องมือทำงานเหมือนกันไม่ว่าจะด้วยวิธีใด — แต่ไคลเอนต์ที่พูดเฉพาะ 2026-07-28 จะถูกปฏิเสธผ่าน tunnel ด้วยข้อผิดพลาดเวอร์ชันโปรโตคอล; รันโหมด STDIO หรือ HTTP สำหรับไคลเอนต์นั้น
ngrok (ทางเลือกที่ไม่มีการรับรองความถูกต้อง)
หากคุณต้องการเปิดเผย โหมด HTTP ท้องถิ่น สู่สาธารณะโดยไม่ต้องมีบัญชีบน tunnel ที่จัดการ แฟล็ก --ngrok ในตัวจะเปิดใช้กระบวนการย่อย ngrok (src/services/ngrok.service.ts) และพิมพ์ URL สาธารณะในแบนเนอร์เริ่มต้น:
# One-time ngrok setup, then:
ankimcp --ngrok
เส้นทางนี้ไม่มีการรับรองความถูกต้อง — ใครก็ตามที่มี URL สามารถเข้าถึง Anki ของคุณได้ ดังนั้นจึงปลอดภัยน้อยกว่า Tunnel เลือกใช้ Tunnel เว้นแต่คุณมีเหตุผลเฉพาะในการจัดการ endpoint ngrok ของคุณเอง (ต้องติดตั้ง ngrok แบบ global และ authtoken)
แฟล็ก --ngrok เปิดใช้ ngrok ด้วย --host-header=rewrite ดังนั้น ngrok จะเขียน Host ต้นทางใหม่เป็น localhost ก่อนส่งต่อ ทำให้คำขออยู่ใน Host allowlist แบบ loopback (ดู การป้องกัน DNS-rebinding) โดยไม่ต้องเพิ่มโดเมน *.ngrok สาธารณะใน ALLOWED_HOSTS หากคุณรัน ngrok ด้วยตนเอง ให้ใช้แฟล็กเดียวกัน — ngrok http --host-header=rewrite 3000 — มิฉะนั้น ngrok จะส่งต่อชื่อโฮสต์ ngrok สาธารณะเป็น Host และเซิร์ฟเวอร์จะปฏิเสธด้วย 403
ตัวเลือก CLI (ทุกโหมด)
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
โหมดอ่านอย่างเดียว (ทุกโหมด)
แฟล็ก --read-only ป้องกันการแก้ไขใด ๆ ต่อคอลเลกชัน Anki ของคุณ เมื่อเปิดใช้งาน:
- การดำเนินการอ่านทั้งหมดทำงานตามปกติ (เรียกดูเด็ค ดูการ์ด ค้นหาโน้ต)
- การดำเนินการรีวิวได้รับอนุญาต (sync, answerCards, suspend/unsuspend)
- การแก้ไขเนื้อหาถูกบล็อก (addNote, deleteNotes, createDeck, updateNoteFields, ฯลฯ)
- มีประโยชน์สำหรับการสำรวจข้อมูล Anki อย่างปลอดภัยโดยไม่มีความเสี่ยงต่อการเปลี่ยนแปลงโดยไม่ตั้งใจ
# 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
คุณยังสามารถเปิดใช้งานโหมดอ่านอย่างเดียวผ่านตัวแปรสภาพแวดล้อม:
READ_ONLY=true ankimcp
หรือในการกำหนดค่าไคลเอนต์ MCP:
{
"mcpServers": {
"anki-mcp": {
"command": "npx",
"args": ["-y", "@ankimcp/anki-mcp-server", "--stdio", "--read-only"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
เชื่อมต่อกับ Claude Desktop (โหมด Local)
คุณสามารถกำหนดค่าเซิร์ฟเวอร์ใน Claude Desktop โดย:
- ไปที่: การตั้งค่า → นักพัฒนา → แก้ไขการกำหนดค่า
- หรือแก้ไขไฟล์กำหนดค่าด้วยตนเอง
การกำหนดค่า
เพิ่มสิ่งต่อไปนี้ในการกำหนดค่า Claude Desktop ของคุณ:
{
"mcpServers": {
"anki-mcp": {
"command": "node",
"args": ["/path/to/anki-mcp-server/dist/main-stdio.js"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
แทนที่ /path/to/anki-mcp-server ด้วยเส้นทางโปรเจกต์จริงของคุณ
ตำแหน่งไฟล์กำหนดค่า
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
สำหรับรายละเอียดเพิ่มเติม ดู เอกสาร MCP อย่างเป็นทางการ
ตัวแปรสภาพแวดล้อม (ไม่บังคับ)
| ตัวแปร | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
ANKI_CONNECT_URL | URL AnkiConnect | http://localhost:8765 |
ANKI_CONNECT_API_VERSION | เวอร์ชัน API | 6 |
ANKI_CONNECT_API_KEY | คีย์ API หากกำหนดค่าใน AnkiConnect | - |
ANKI_CONNECT_TIMEOUT | หมดเวลาคำขอในหน่วย ms | 5000 |
READ_ONLY | เปิดใช้งานโหมดอ่านอย่างเดียว (true หรือ 1) | false |
PORT | โหมด HTTP: พอร์ตที่ฟัง (แฟล็ก --port มีลำดับความสำคัญกว่า) | 3000 |
HOST | โหมด HTTP: ที่อยู่ที่ผูก (แฟล็ก --host มีลำดับความสำคัญกว่า) | 127.0.0.1 |
ALLOWED_HOSTS | โหมด HTTP: ค่าหัว Host เพิ่มเติมที่ยอมรับนอกเหนือจาก loopback (ชื่อโฮสต์คั่นด้วยเครื่องหมายจุลภาค) จำเป็นเมื่อผูกกับที่อยู่ LAN/สาธารณะหรือรัน behind reverse proxy ดู การกำหนดค่าโหมด HTTP | loopback เท่านั้น |
ALLOWED_ORIGINS | โหมด HTTP: รายการอนุญาตรูปแบบ Origin/Referer ของเบราว์เซอร์คั่นด้วยเครื่องหมายจุลภาค (รองรับ wildcards เช่น https://*.ngrok.io) | http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:* |
TUNNEL_SERVER_URL | URL WebSocket ของเซิร์ฟเวอร์ tunnel (เฉพาะโหมด tunnel) | wss://tunnel.ankimcp.ai |
MEDIA_ALLOWED_TYPES | ประเภท MIME เพิ่มเติมที่อนุญาตสำหรับการนำเข้าเส้นทางไฟล์ (คั่นด้วยเครื่องหมายจุลภาค เช่น application/pdf) | - |
MEDIA_IMPORT_DIR | จำกัดการนำเข้าเส้นทางไฟล์ไว้ที่ไดเรกทอรีนี้ | - |
MEDIA_ALLOWED_HOSTS | อนุญาตโฮสต์เครือข่ายส่วนตัวเฉพาะสำหรับการนำเข้า URL (คั่นด้วยเครื่องหมายจุลภาค เช่น 192.168.1.50,my-nas) | - |
ตัวอย่างการใช้งาน
การค้นหาและอัปเดตโน้ต
# 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)
ตัวอย่างไวยากรณ์การค้นหา Anki
เครื่องมือ findNotes รองรับไวยากรณ์การค้นหาอันทรงพลังของ Anki:
"deck:DeckName"- โน้ตทั้งหมดในเด็คเฉพาะ"tag:important"- โน้ตที่มีแท็ก "สำคัญ""is:due"- การ์ดที่ถึงกำหนดรีวิว"is:new"- การ์ดใหม่ที่ยังไม่ได้ศึกษา"added:7"- โน้ตที่เพิ่มใน 7 วันที่ผ่านมา"front:hello"- โน้ตที่มี "สวัสดี" ในช่องด้านหน้า"flag:1"- โน้ตที่มีธงสีแดง"prop:due<=2"- การ์ดที่ถึงกำหนดภายใน 2 วัน"deck:Spanish tag:verb"- โน้ตเด็คภาษาสเปนที่มีแท็กคำกริยา (AND)"deck:Spanish OR deck:French"- โน้ตจากเด็คใดเด็คหนึ่ง
หมายเหตุสำคัญ
การจัดการ CSS และ HTML
- เครื่องมือ
notesInfoส่งคืนข้อมูลการจัดรูปแบบ CSS เพื่อการแสดงผลที่เหมาะสม - เครื่องมือ
updateNoteFieldsรองรับเนื้อหา HTML ในช่องและรักษาการจัดรูปแบบ CSS - แต่ละโมเดลโน้ตมีการจัดรูปแบบ CSS ของตัวเอง - ใช้
modelStylingเพื่อรับ CSS เฉพาะโมเดล
คำเตือนการอัปเดต
⚠️ สำคัญ: เมื่อใช้ updateNoteFields อย่าดูโน้ตในเบราว์เซอร์ของ Anki ขณะอัปเดต มิฉะนั้นช่องจะไม่อัปเดตอย่างถูกต้อง ปิดเบราว์เซอร์หรือสลับไปที่โน้ตอื่นก่อนอัปเดต ดู ปัญหาที่ทราบ สำหรับรายละเอียดเพิ่มเติม
ความปลอดภัยในการลบ
เครื่องมือ deleteNotes ต้องการการยืนยันอย่างชัดเจน (confirmDeletion: true) เพื่อป้องกันการลบโดยไม่ตั้งใจ การลบโน้ตจะลบการ์ดที่เกี่ยวข้องทั้งหมดอย่างถาวร
ความปลอดภัย
การตรวจสอบเส้นทางไฟล์สื่อและ URL
เครื่องมือสื่อ (storeMediaFile, retrieveMediaFile, deleteMediaFile) และช่องเสียง/รูปภาพ updateNoteFields รวมการตรวจสอบความปลอดภัยเพื่อป้องกันการใช้งานในทางที่ผิดผ่าน prompt injection:
- การนำเข้าเส้นทางไฟล์ จำกัดเฉพาะประเภทไฟล์สื่อเท่านั้น (รูปภาพ เสียง วิดีโอ) ไฟล์ที่ไม่ใช่สื่อ (เช่น คีย์ SSH ข้อมูลรับรอง การกำหนดค่าเชลล์) จะถูกปฏิเสธตามประเภท MIME กำหนดค่า
MEDIA_ALLOWED_TYPESเพื่ออนุญาตประเภทไฟล์เพิ่มเติม หรือMEDIA_IMPORT_DIRเพื่อจำกัดการนำเข้าไปยังไดเรกทอรีเฉพาะ - การนำเข้า URL ถูกตรวจสอบการโจมตี SSRF คำขอไปยังเครือข่ายส่วนตัว (10.x, 172.16.x, 192.168.x), loopback (127.x), link-local (169.254.x) และ scheme ที่ไม่ใช่ HTTP(S) จะถูกบล็อก กำหนดค่า
MEDIA_ALLOWED_HOSTSเพื่ออนุญาตโฮสต์เครือข่ายส่วนตัวเฉพาะ - ชื่อไฟล์ ถูกทำความสะอาดเพื่อป้องกัน path traversal (เช่น ลำดับ
../../จะถูกลบออก)
การป้องกันเหล่านี้ใช้กับ storeMediaFile, retrieveMediaFile, deleteMediaFile และช่องเสียง/รูปภาพ updateNoteFields
ช่องโหว่ path traversal รายงานโดย Hideaki Takahashi
การป้องกัน DNS-Rebinding (การส่งข้อมูล HTTP)
เมื่อรันในโหมด HTTP เซิร์ฟเวอร์จะตรวจสอบ Host header ในทุกคำขอ โดยค่าเริ่มต้นจะยอมรับเฉพาะ loopback hosts (localhost, 127.0.0.1, ::1) โดยไม่คำนึงถึงพอร์ต Host เป็น header ที่เบราว์เซอร์ห้ามส่ง ดังนั้นเว็บเพจที่เป็นอันตรายจึงไม่สามารถปลอมแปลงได้ — ซึ่งเป็นการปิดช่องโหว่ DNS-rebinding ที่เพจที่ถูกเปลี่ยนเส้นทางสามารถเข้าถึงเซิร์ฟเวอร์ภายในด้วย Host ที่ปลอมแปลงและไม่มี Origin และเข้าถึงเครื่องมือ MCP ได้ Host ที่ไม่อนุญาตจะถูกปฏิเสธด้วย 403
หากคุณผูกกับ 0.0.0.0, รันอยู่เบื้องหลัง reverse proxy, หรือเปิดเผยโดเมน tunnel สาธารณะ ให้ตั้งค่า ALLOWED_HOSTS (รายชื่อโฮสต์คั่นด้วยเครื่องหมายจุลภาค) เพื่ออนุญาตโฮสต์เหล่านั้น เมื่อใช้ tunnel กับ ngrok เซิร์ฟเวอร์จะใช้ --host-header=rewrite ดังนั้น upstream ยังคงเห็น Host loopback ดู HTTP Mode Configuration สำหรับรายการตัวเลือกทั้งหมด
ช่องโหว่ DNS-rebinding รายงานโดย avishaigo-commits และ yotampe-pluto
นโยบายความเป็นส่วนตัว
MCP เซิร์ฟเวอร์นี้รันบนเครื่องของคุณเท่านั้น และไม่เก็บข้อมูล telemetry, analytics, หรือข้อมูลการใช้งานใดๆ
นโยบายฉบับเต็ม: https://ankimcp.ai/privacy/
- การเก็บข้อมูล: เซิร์ฟเวอร์ไม่เก็บข้อมูลใดๆ มันทำหน้าที่เป็นตัวกลางส่งคำขอระหว่างผู้ช่วย AI ของคุณและปลั๊กอิน AnkiConnect ในเครื่องของคุณ
- การใช้งาน / การจัดเก็บ: ไม่มีการจัดเก็บข้อมูลฝั่งเซิร์ฟเวอร์ ข้อมูลแฟลชการ์ดทั้งหมดอยู่ใน Anki ของคุณบนอุปกรณ์ของคุณเอง
- การแชร์กับบุคคลที่สาม: ไม่มีการแชร์ เซิร์ฟเวอร์สื่อสารกับ URL AnkiConnect ที่คุณกำหนดค่าเท่านั้น (ค่าเริ่มต้น: localhost) หากคุณเปิดใช้งานการซิงค์ AnkiWeb ในตัวของ Anki การซิงค์นั้นเกิดขึ้นระหว่าง Anki ของคุณกับ AnkiWeb โดยตรง — อยู่นอกขอบเขตของเซิร์ฟเวอร์นี้
- การเก็บรักษา: ไม่เกี่ยวข้อง — ไม่มีการเก็บข้อมูลฝั่งเซิร์ฟเวอร์
- ติดต่อ: support@ankimcp.ai
ปัญหาที่ทราบ
สำหรับรายการปัญหาที่ทราบและข้อจำกัดทั้งหมด กรุณาเยี่ยมชมเอกสารของเรา:
ข้อจำกัดที่สำคัญ
การอัปเดตโน้ตล้มเหลวเมื่อเปิดดูในเบราว์เซอร์
⚠️ สำคัญ: เมื่ออัปเดตโน้ตด้วย updateNoteFields การอัปเดตจะล้มเหลวอย่างเงียบๆ หากโน้ตกำลังถูกเปิดดูในหน้าต่างเบราว์เซอร์ของ Anki นี่เป็นข้อจำกัดของ AnkiConnect ต้นทาง
วิธีแก้ไข: ปิดเบราว์เซอร์หรือไปที่โน้ตอื่นก่อนทำการอัปเดตเสมอ
สำหรับรายละเอียดเพิ่มเติมและปัญหาที่ทราบอื่นๆ ดู เอกสารฉบับเต็ม
การแก้ไขปัญหา
ข้อผิดพลาด ERR_REQUIRE_ESM
หากคุณเห็นข้อผิดพลาดเช่น:
Error [ERR_REQUIRE_ESM]: require() of ES Module not supported
หมายความว่าเวอร์ชัน Node.js ของคุณไม่ได้รับการสนับสนุน เซิร์ฟเวอร์ต้องการ Node.js 22.12.0+
หมายเหตุ: รันไทม์ขั้นต่ำที่สนับสนุนคือ Node.js 22.12.0 Node.js 20 (Iron) สิ้นสุดอายุการใช้งานเมื่อ 2026-04-30 และไม่ได้รับการสนับสนุนอีกต่อไป
ตรวจสอบเวอร์ชันของคุณ:
node --version
วิธีแก้ไข: อัปเดต Node.js เป็นเวอร์ชัน 22.12.0+ คุณสามารถดาวน์โหลดได้จาก nodejs.org หรือใช้ตัวจัดการเวอร์ชันเช่น nvm
การพัฒนา
โหมดการขนส่ง (Transport Modes)
เซิร์ฟเวอร์นี้สนับสนุนโหมดการขนส่ง MCP สามแบบผ่าน จุดเข้าใช้งานแยกต่างหาก:
โหมด STDIO (ค่าเริ่มต้น)
- สำหรับ MCP ไคลเอนต์ในเครื่องเช่น Claude Desktop
- ใช้ standard input/output สำหรับการสื่อสาร
- จุดเข้าใช้งาน:
dist/main-stdio.js - รัน:
npm run start:prod:stdioหรือnode dist/main-stdio.js - MCPB bundle: ใช้โหมด STDIO
โหมด HTTP (Streamable HTTP)
- สำหรับ MCP ไคลเอนต์ระยะไกลและการรวมเข้ากับเว็บ
- ใช้โปรโตคอล MCP Streamable HTTP
- จุดเข้าใช้งาน:
dist/main-http.js - รัน:
npm run start:prod:httpหรือnode dist/main-http.js - พอร์ตเริ่มต้น: 3000 (กำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อม
PORT) - โฮสต์เริ่มต้น:
127.0.0.1(กำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อมHOST) - MCP endpoint:
http://127.0.0.1:3000/(เส้นทางราก)
โหมด Tunnel (Managed WebSocket Tunnel)
- สำหรับผู้ช่วย AI บนเว็บผ่านบริการ tunnel AnkiMCP ที่จัดการ พร้อมการตรวจสอบสิทธิ์ในตัว
- MCP เซิร์ฟเวอร์รันในกระบวนการเบื้องหลัง in-memory transport;
TunnelTransportเป็นเจ้าของ MCP เซิร์ฟเวอร์และTunnelClientเชื่อมต่อกับบริการ tunnel ผ่าน WebSocket - โปรโตคอล: ให้บริการเฉพาะ MCP revision ปี 2025 (STDIO และ HTTP ให้บริการ 2026-07-28 ด้วย)
- จุดเข้าใช้งาน:
dist/main-tunnel.js - รัน:
node dist/main-tunnel.js --tunnel(หรือankimcp --tunnel) - การตรวจสอบสิทธิ์:
ankimcp --login/ankimcp --logout; ข้อมูลประจำตัวเก็บที่~/.ankimcp/credentials.json(0600) - Dev:
npm run start:dev:tunnel(โหมด watch, รัน--tunnel --debug)
การสร้าง (Building)
npm run build # Builds once, creates dist/ with all three entry points
main-stdio.js, main-http.js, และ main-tunnel.js ทั้งหมดถูกสร้างในไดเรกทอรี dist/ เดียวกัน เลือกอันที่ต้องการรันตามความต้องการของคุณ
การกำหนดค่าโหมด HTTP
ตัวแปรสภาพแวดล้อม:
PORT- พอร์ต HTTP เซิร์ฟเวอร์ (ค่าเริ่มต้น: 3000)HOST- ที่อยู่ผูก (ค่าเริ่มต้น: 127.0.0.1 สำหรับ localhost เท่านั้น)ALLOWED_HOSTS- ค่าHostheader เพิ่มเติมคั่นด้วยเครื่องหมายจุลภาคที่ยอมรับนอกเหนือจากชุด loopback ในตัว (localhost,127.0.0.1,::1) เฉพาะชื่อโฮสต์และไม่คำนึงถึงพอร์ต ค่าเริ่มต้น: loopback เท่านั้นALLOWED_ORIGINS- รายการอนุญาตของรูปแบบOrigin/Refererของเบราว์เซอร์คั่นด้วยเครื่องหมายจุลภาค; รองรับ wildcards (เช่นhttps://*.ngrok.io) ค่าเริ่มต้น:http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*LOG_LEVEL- ระดับการบันทึก (ค่าเริ่มต้น: info)
ความปลอดภัย:
- การตรวจสอบ Host header (การป้องกัน DNS-rebinding) — ทุกคำขอ HTTP ต้องมี
Hostheader ที่ตรงกับรายการอนุญาต โดยค่าเริ่มต้นจะยอมรับเฉพาะ loopback hosts (localhost,127.0.0.1,::1) โดยไม่คำนึงถึงพอร์ตHostเป็น header ที่เบราว์เซอร์ห้ามส่ง ดังนั้นเว็บเพจที่เป็นอันตรายจึงไม่สามารถปลอมแปลงได้ — ซึ่งเป็นการปิด DNS-rebinding path ที่เพจที่ถูกเปลี่ยนเส้นทางเข้าถึงเซิร์ฟเวอร์ด้วยHostที่ปลอมแปลงและไม่มีOriginHostที่ไม่อนุญาตจะถูกปฏิเสธด้วย403 - การตรวจสอบ Origin header — คำขอจากเบราว์เซอร์ที่มี
Origin/Refererที่มีอยู่แต่ไม่อนุญาตจะถูกปฏิเสธ คำขอที่ ไม่มีOrigin(curl, Postman, MCP-over-HTTP ไคลเอนต์) จะได้รับอนุญาต; การตรวจสอบ Host คือการป้องกันการ rebinding - ผูกกับ localhost (127.0.0.1) โดยค่าเริ่มต้น
- ไม่มีการตรวจสอบสิทธิ์ในเวอร์ชันปัจจุบัน (วางแผนรองรับ OAuth)
การเปิดเผยโหมด HTTP นอกเหนือจาก localhost — หากคุณผูกกับที่อยู่ LAN/สาธารณะหรือวางเซิร์ฟเวอร์ไว้เบื้องหลัง reverse proxy หรือโดเมนสาธารณะ คุณ ต้อง ตั้งค่า ALLOWED_HOSTS เป็นชื่อโฮสต์ที่ไคลเอนต์จะใช้ มิฉะนั้นทุกคำขอที่ไม่ใช่ loopback จะถูกปฏิเสธด้วย 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
เมื่อคุณผูกกับ 0.0.0.0/:: โดยไม่มี ALLOWED_HOSTS เซิร์ฟเวอร์จะบันทึกคำเตือนตอนเริ่มต้นว่าเฉพาะ Host header แบบ loopback เท่านั้นที่จะถูกยอมรับ
Docker / reverse proxy / โดเมนสาธารณะ: กฎเดียวกันนี้ใช้ ใน Docker คำขอปกติจะมาพร้อมกับชื่อโฮสต์ที่เผยแพร่ของคอนเทนเนอร์หรือ
Hostของ proxy ดังนั้นตั้งค่าALLOWED_HOSTSตามนั้น reverse proxy (nginx, Caddy, Traefik) ควรส่งต่อHostเดิมและมีชื่อโฮสต์นั้นอยู่ในรายการALLOWED_HOSTSหรือเขียนHostupstream ใหม่เป็นlocalhostการรวม--ngrokในตัวจัดการสิ่งนี้โดยอัตโนมัติ (ดูด้านล่าง)
ตัวอย่าง: โหมดการรัน
# 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
การสร้าง MCPB Bundle
เพื่อสร้าง MCPB bundle ที่แจกจ่ายได้:
npm run mcpb:bundle
คำสั่งนี้จะ:
- ซิงค์เวอร์ชันจาก
package.jsonไปยังmanifest.json - ลบไฟล์
.mcpbเก่า - สร้างโปรเจกต์ TypeScript
- แพ็คเกจ
dist/และnode_modules/ลงในไฟล์.mcpb - รัน
mcpb cleanเพื่อลบ devDependencies (ปรับขนาด bundle จาก ~47MB เป็น ~10MB)
ไฟล์ผลลัพธ์จะถูกตั้งชื่อ anki-mcp-server-X.X.X.mcpb และสามารถแจกจ่ายสำหรับการติดตั้งด้วยคลิกเดียว
สิ่งที่รวมใน Bundle
MCPB bundle ประกอบด้วย:
- JavaScript ที่คอมไพล์แล้ว (ไดเรกทอรี
dist/- รวมจุดเข้าใช้งานทั้งสาม) - เฉพาะ production dependencies (
node_modules/- devDependencies ถูกลบโดยmcpb clean) - ข้อมูลเมตาของแพ็คเกจ (
package.json) - การกำหนดค่า Manifest (
manifest.json- กำหนดค่าให้ใช้main-stdio.js) - ไอคอน (
icon.png)
ไฟล์ต้นฉบับ, การทดสอบ, และการกำหนดค่าการพัฒนาจะถูกแยกออกโดยอัตโนมัติผ่าน .mcpbignore
การบันทึกใน Claude Desktop
เมื่อรันเป็นส่วนขยาย MCPB ใน Claude Desktop บันทึกจะถูกเขียนไปที่:
ตำแหน่งบันทึก: ~/Library/Logs/Claude/ (macOS)
บันทึกถูกแบ่งออกเป็นหลายไฟล์:
- main.log - บันทึกแอปพลิเคชัน Claude Desktop ทั่วไป
- mcp-server-Anki MCP Server.log - ข้อความโปรโตคอล MCP สำหรับส่วนขยายนี้
- mcp.log - บันทึก MCP รวมจากเซิร์ฟเวอร์ทั้งหมด
หมายเหตุ: ผลลัพธ์ของ pino logger (ข้อความ INFO, ERROR, WARN จากโค้ดเซิร์ฟเวอร์) ไปที่ stderr และปรากฏในไฟล์บันทึกเฉพาะ MCP Claude Desktop กำหนดว่าไฟล์บันทึกใดได้รับข้อความใด แต่โดยทั่วไป:
- การเริ่มต้นแอปพลิเคชันและการสื่อสารโปรโตคอล MCP → บันทึกเฉพาะ MCP
- การบันทึกภายในเซิร์ฟเวอร์ (pino) → ทั้งบันทึกเฉพาะ MCP และบางครั้ง main.log
เพื่อดูบันทึกแบบเรียลไทม์:
tail -f ~/Library/Logs/Claude/mcp-server-Anki\ MCP\ Server.log
การดีบัก MCP เซิร์ฟเวอร์
คุณสามารถดีบัก MCP เซิร์ฟเวอร์โดยใช้ MCP Inspector และแนบดีบักเกอร์จาก IDE ของคุณ (WebStorm, VS Code, ฯลฯ)
หมายเหตุสำหรับโหมด HTTP: เมื่อทดสอบโหมด HTTP (Streamable HTTP) กับ MCP Inspector ให้ใช้ "Connection Type: Via Proxy" เพื่อหลีกเลี่ยงข้อผิดพลาด CORS
ขั้นตอนที่ 1: กำหนดค่า Debug Server ใน MCP Inspector
mcp-inspector-config.json มีการกำหนดค่า debug server อยู่แล้ว:
{
"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"
}
}
}
ขั้นตอนที่ 2: เริ่ม Debug Server
รัน MCP Inspector พร้อม debug server:
npm run inspector:debug
这将เริ่มเซิร์ฟเวอร์โดยเปิดใช้งานการดีบัก Node.js บนพอร์ต 9229 และหยุดการทำงานชั่วคราวที่บรรทัดแรก
ขั้นตอนที่ 3: แนบดีบักเกอร์จาก IDE ของคุณ
WebStorm
- ไปที่ Run → Edit Configurations
- เพิ่มการกำหนดค่า Attach to Node.js/Chrome ใหม่
- ตั้งค่าพอร์ตเป็น
9229 - คลิก Debug เพื่อแนบ
VS Code
- เปิดแผง Debug (Ctrl+Shift+D / Cmd+Shift+D)
- เลือกการกำหนดค่า Debug MCP Server (Attach)
- กด F5 เพื่อแนบ
ขั้นตอนที่ 4: ตั้งจุดพักและดีบัก
เมื่อแนบแล้ว คุณสามารถ:
- ตั้งจุดพักในไฟล์ต้นฉบับ TypeScript ของคุณ
- ก้าวผ่านการทำงานของโค้ด
- ตรวจสอบตัวแปรและ call stack
- ใช้คอนโซลดีบักสำหรับการประเมินนิพจน์
ดีบักเกอร์จะทำงานร่วมกับ source maps ทำให้คุณสามารถดีบักโค้ด TypeScript ต้นฉบับแทน JavaScript ที่คอมไพล์แล้ว
การดีบักกับ Claude Desktop
คุณยังสามารถดีบัก MCP เซิร์ฟเวอร์ขณะที่มันรันภายใน Claude Desktop โดยเปิดใช้งาน Node.js debugger และแนบ IDE ของคุณ
ขั้นตอนที่ 1: กำหนดค่า Claude Desktop สำหรับการดีบัก
อัปเดตการกำหนดค่า Claude Desktop ของคุณเพื่อเปิดใช้งานการดีบัก:
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"
}
}
}
}
การเปลี่ยนแปลงสำคัญ: เพิ่ม --inspect=9229 ก่อน path ไปยัง dist/main-stdio.js
ตัวเลือกการดีบัก:
--inspect=9229- เริ่มดีบักเกอร์ทันที ไม่บล็อก (แนะนำ)--inspect-brk=9229- หยุดการทำงานชั่วคราวจนกว่าดีบักเกอร์จะแนบ (สำหรับดีบักปัญหาการเริ่มต้น)
ขั้นตอนที่ 2: รีสตาร์ท Claude Desktop
หลังจากบันทึกการกำหนดค่า ให้รีสตาร์ท Claude Desktop MCP เซิร์ฟเวอร์จะรันด้วยการดีบักที่เปิดใช้งานบนพอร์ต 9229
ขั้นตอนที่ 3: แนบดีบักเกอร์จาก IDE ของคุณ
WebStorm
- ไปที่ Run → Edit Configurations
- คลิกปุ่ม + และเลือก Attach to Node.js/Chrome
- กำหนดค่า:
- Name:
Attach to Anki MCP (Claude Desktop) - Host:
localhost - Port:
9229 - Attach to:
Node.js < 8หรือChrome or Node.js > 6.3(ขึ้นอยู่กับเวอร์ชัน WebStorm)
- Name:
- คลิก OK
- คลิก Debug (Shift+F9) เพื่อแนบ
VS Code
- เพิ่มใน
.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"]
}
]
}
- เปิดแผง Debug (Ctrl+Shift+D / Cmd+Shift+D)
- เลือก Attach to Anki MCP (Claude Desktop)
- กด F5 เพื่อแนบ
ขั้นตอนที่ 4: ดีบักแบบเรียลไทม์
เมื่อแนบแล้ว คุณสามารถ:
- ตั้งจุดพัก (breakpoints) ในไฟล์ซอร์ส TypeScript ของคุณ (เช่น
src/mcp/primitives/essential/tools/create-model.tool.ts) - ใช้ Claude Desktop ตามปกติ — จุดพักจะทำงานเมื่อมีการเรียกใช้เครื่องมือ
- ไล่ขั้นตอนการทำงานของโค้ด
- ตรวจสอบตัวแปรและ call stack
- ใช้คอนโซลดีบัก
ตัวอย่าง: ตั้งจุดพักใน create-model.tool.ts ที่บรรทัด 119 จากนั้นให้ Claude สร้างโมเดลใหม่ ดีบักเกอร์จะหยุดที่จุดพักของคุณ!
หมายเหตุ: ดีบักเกอร์จะยังคงแนบอยู่ตราบเท่าที่ Claude Desktop ยังทำงานอยู่ คุณสามารถถอด/แนบใหม่ได้ตลอดเวลาโดยไม่ต้องรีสตาร์ท Claude Desktop
คำสั่งสำหรับการ 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
การทดสอบแพ็กเกจ npm (ในเครื่อง)
ทดสอบแพ็กเกจ npm ในเครื่องก่อนเผยแพร่:
# 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
วิธีการทำงาน:
npm packสร้างไฟล์.tgzที่เหมือนกับสิ่งที่ npm publish จะสร้าง- การติดตั้งจาก
.tgzจำลองสิ่งที่ผู้ใช้ได้รับจากnpm install -g ankimcp - วิธีนี้ช่วยให้คุณทดสอบประสบการณ์ผู้ใช้ทั้งหมดก่อนเผยแพร่ไปยัง npm
คำสั่งสำหรับการทดสอบ
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)
ความครอบคลุมการทดสอบ
โปรเจกต์นี้รักษาเกณฑ์ความครอบคลุมขั้นต่ำ 70% สำหรับ:
- Branches
- Functions
- Lines
- Statements
รายงานความครอบคลุมจะถูกสร้างในไดเรกทอรี coverage/
การกำหนดเวอร์ชัน
โปรเจกต์นี้ปฏิบัติตาม Semantic Versioning ด้วยแนวทางการพัฒนาแบบก่อน 1.0:
-
0.x.x — เวอร์ชันเบต้า/พัฒนา (ระยะปัจจุบัน)
- 0.1.x — การแก้ไขบั๊กและแพตช์
- 0.2.0+ — ฟีเจอร์ใหม่หรือการปรับปรุงเล็กน้อย
- การเปลี่ยนแปลงที่ทำลายความเข้ากันได้ สามารถเกิดขึ้นได้ในเวอร์ชัน 0.x
-
1.0.0 — เวอร์ชันเสถียรแรก
- จะเผยแพร่เมื่อ API มีความเสถียรและผ่านการทดสอบแล้ว
- การเปลี่ยนแปลงที่ทำลายความเข้ากันได้จะต้องเพิ่มหมายเลขเวอร์ชันหลัก (2.0.0, ฯลฯ)
สถานะปัจจุบัน: 0.22.0 — การพัฒนาเบต้าที่ใช้งานอยู่ ฟีเจอร์ล่าสุดได้แก่ การวิเคราะห์การทบทวนทั้งคอลเลกชัน (review_stats ตอนนี้รวมข้อมูลทุกสำรับเมื่อละเว้น deck), การจัดการฟิลด์โมเดล (addModelField, removeModelField, renameModelField, repositionModelField), การสร้างโน้ตแบบกลุ่ม (addNotes), การทำอุโมงค์ ngrok ในตัว (แฟล็ก --ngrok), การจัดการไฟล์สื่อ, การจัดการโมเดล/เทมเพลต และสถิติสำรับที่ครอบคลุม API อาจมีการเปลี่ยนแปลงตามความคิดเห็นและการทดสอบ
วิวัฒนาการของสเปก MCPB
โปรเจกต์นี้กำหนดเป้าหมายสเปกบันเดิล MCPB ของ Anthropic ซึ่งยังคงมีการพัฒนา เราติดตามสเปกที่ https://github.com/modelcontextprotocol/mcpb และอาจมีการเปลี่ยนแปลงที่ทำลายความเข้ากันได้เพื่อให้เป็นไปตามข้อกำหนด การเปลี่ยนแปลงที่ทำลายความเข้ากันได้ได้รับอนุญาตภายใต้รูปแบบเวอร์ชัน 0.x.x
โปรเจกต์ที่คล้ายกัน
หากคุณกำลังสำรวจการผสานรวม Anki MCP นี่คือโปรเจกต์อื่น ๆ ในพื้นที่นี้:
scorzeth/anki-mcp-server
- สถานะ: ดูเหมือนจะถูกทิ้งร้าง (ไม่มีการอัปเดตล่าสุด)
- การใช้งานการผสานรวม Anki MCP ในช่วงแรก
nailuoGG/anki-mcp-server
- แนวทาง: การใช้งานแบบไฟล์เดียวที่มีน้ำหนักเบา
- สถาปัตยกรรม: โครงสร้างโค้ดแบบ Procedural โดยมีเครื่องมือทั้งหมดในไฟล์เดียว
- เหมาะสำหรับ: กรณีการใช้งานง่าย ๆ ที่มีการพึ่งพาน้อยที่สุด
เหตุผลที่โปรเจกต์นี้แตกต่าง:
- สถาปัตยกรรมระดับองค์กร: สร้างบน NestJS พร้อมการฉีด dependency
- การออกแบบแบบโมดูลาร์: เครื่องมือแต่ละตัวเป็นคลาสแยกที่มีการแยกความรับผิดชอบอย่างชัดเจน
- การบำรุงรักษา: ง่ายต่อการขยายด้วยฟีเจอร์ใหม่โดยไม่ต้องแก้ไขโค้ดที่มีอยู่
- การทดสอบ: ชุดทดสอบที่ครอบคลุมพร้อมข้อกำหนดความครอบคลุม 70%
- ความปลอดภัยของประเภทข้อมูล: TypeScript ที่เข้มงวดพร้อมการตรวจสอบ Zod
- การจัดการข้อผิดพลาด: การจัดการข้อผิดพลาดที่แข็งแกร่งพร้อมข้อเสนอแนะที่เป็นประโยชน์ต่อผู้ใช้
- พร้อมสำหรับการผลิต: การบันทึกที่เหมาะสม การรายงานความคืบหน้า และการสนับสนุนบันเดิล MCPB
- ความสามารถในการขยาย: สามารถเติบโตจากเครื่องมือพื้นฐานไปจนถึงเวิร์กโฟลว์ที่ซับซ้อนได้อย่างง่ายดาย
กรณีการใช้งาน: หากคุณต้องการพื้นฐานที่มั่นคงสำหรับการสร้างการผสานรวม Anki ขั้นสูงหรือวางแผนที่จะขยายฟังก์ชันการทำงานอย่างมีนัยสำคัญ แนวทางสถาปัตยกรรมของโปรเจกต์นี้ทำให้ง่ายต่อการบำรุงรักษาและขยายเมื่อเวลาผ่านไป
ลิงก์ที่มีประโยชน์
- เอกสารประกอบ Model Context Protocol
- เอกสารประกอบ API AnkiConnect
- ดาวน์โหลด Claude Desktop
- การสร้างส่วนขยายเดสก์ท็อป (บล็อก Anthropic)
- ที่เก็บ MCP Servers
- เอกสารประกอบ NestJS
- เว็บไซต์อย่างเป็นทางการของ Anki
สัญญาอนุญาตและการระบุแหล่งที่มา
โปรเจกต์นี้อยู่ภายใต้สัญญาอนุญาต MIT — ดู LICENSE สำหรับข้อความเต็ม
ลิขสิทธิ์ © 2026 Anatoly Tarnavsky
การระบุแหล่งที่มาของบุคคลที่สาม
-
Anki® เป็นเครื่องหมายการค้าจดทะเบียนของ Ankitects Pty Ltd โปรเจกต์นี้เป็นเครื่องมือบุคคลที่สามที่ไม่เป็นทางการ และไม่มีความเกี่ยวข้อง ได้รับการรับรอง หรือได้รับการสนับสนุนจาก Ankitects Pty Ltd โลโก้ Anki ถูกใช้ภายใต้สัญญาอนุญาตทางเลือกสำหรับการอ้างอิง Anki พร้อมลิงก์ไปยัง https://apps.ankiweb.net สำหรับแอปพลิเคชัน Anki อย่างเป็นทางการ โปรดเยี่ยมชม https://apps.ankiweb.net
-
Model Context Protocol (MCP) เป็นมาตรฐานเปิดโดย Anthropic โลโก้ MCP มาจาก ที่เก็บเอกสาร MCP อย่างเป็นทางการ และใช้ภายใต้สัญญาอนุญาต MIT สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MCP โปรดเยี่ยมชม https://modelcontextprotocol.io
-
นี่เป็นโปรเจกต์อิสระที่เชื่อมโยงเทคโนโลยี Anki และ MCP เครื่องหมายการค้า เครื่องหมายบริการ ชื่อทางการค้า ชื่อผลิตภัณฑ์ และโลโก้ทั้งหมดเป็นทรัพย์สินของเจ้าของตามลำดับ