Anki MCP
आधिकारिकएक MCP सर्वर जो AI सहायकों को Anki, स्पेस्ड रिपीटीशन फ्लैशकार्ड एप्लिकेशन, के साथ इंटरैक्ट करने में सक्षम बनाता है।
Anki MCP के साथ आप क्या कर सकते हैं?
- समीक्षा के लिए देय कार्ड बातचीत के तौर पर देखें — अपने सहायक से
get_due_cardsके साथ देय कार्ड निकालने को कहें,present_cardके साथ प्रत्येक को प्रस्तुत करें, औरrate_cardके साथ अपनी रेटिंग दर्ज करें। - फ्लैशकार्ड बनाएं और बैच में जोड़ें — सहायक से
addNotesके साथ थोक में नोट्स बनवाएं, वैकल्पिक रूप से पहलेcreateModelऔरupdateModelStylingके साथ कस्टम मॉडल बनाएं। - मौजूदा नोट्स खोजें और संपादित करें — Anki क्वेरी सिंटैक्स के साथ
findNotesका उपयोग करें,notesInfoके माध्यम से विवरण देखें, औरupdateNoteFieldsके साथ फ़ील्ड अपडेट करें। - डेक और शेड्यूलिंग प्रबंधित करें —
createDeckके साथ डेक बनाएं,changeDeckके माध्यम से कार्ड स्थानांतरित करें, याsetDueDateऔरforgetCardsका उपयोग करके कार्ड पुनर्निर्धारित करें। - नोट्स में मीडिया आयात करें — सहायक से
storeMediaFileके साथ स्थानीय छवि या URL अपलोड करने को कहें और इसे नोट के फ़ील्ड में एम्बेड करें। - Anki GUI चलाएं —
guiBrowseऔरguiEditNoteके साथ ब्राउज़र या एडिटर खोलें, याguiSelectedNotesके माध्यम से चयनित नोट प्राप्त करें।
दस्तावेज़
Anki MCP सर्वर
AI सहायकों के साथ Anki को मॉडल कॉन्टेक्स्ट प्रोटोकॉल के माध्यम से सहज रूप से एकीकृत करें
बीटा - यह प्रोजेक्ट सक्रिय विकास में है। API और सुविधाएँ बदल सकती हैं।
एक मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) सर्वर जो AI सहायकों को Anki, स्पेस्ड रिपीटिशन फ्लैशकार्ड एप्लिकेशन, के साथ इंटरैक्ट करने में सक्षम बनाता है।
अपने Anki अनुभव को प्राकृतिक भाषा इंटरैक्शन के साथ बदलें - जैसे एक निजी ट्यूटर हो। AI सहायक केवल प्रश्न और उत्तर प्रस्तुत नहीं करता; यह अवधारणाओं को समझा सकता है, सीखने की प्रक्रिया को अधिक आकर्षक और मानवीय बना सकता है, संदर्भ प्रदान कर सकता है, और आपकी सीखने की शैली के अनुकूल बन सकता है। यह तुरंत नोट्स बना और संपादित कर सकता है, आपके अध्ययन सत्रों को गतिशील बातचीत में बदल सकता है। और भी सुविधाएँ जल्द आ रही हैं!
उदाहरण और ट्यूटोरियल
इस MCP सर्वर को Claude Desktop के साथ उपयोग करने के लिए व्यापक गाइड, वास्तविक दुनिया के उदाहरण और चरण-दर-चरण ट्यूटोरियल के लिए देखें:
ankimcp.ai - व्यावहारिक उदाहरणों और उपयोग के मामलों के साथ पूर्ण दस्तावेज़ीकरण
अतिरिक्त दस्तावेज़ीकरण के लिए docs/ देखें, जिसमें समीक्षक सेटअप गाइड और नमूना Anki डेक शामिल है।
उदाहरण उपयोग के मामले
तीन प्रतिनिधि प्रॉम्प्ट जो इस सर्वर द्वारा सक्षम टूल फ्लो दिखाते हैं:
-
"मेरे स्पेनिश डेक की समीक्षा करने में मेरी मदद करें।" — सहायक AnkiWeb के साथ सिंक करता है (
sync), देय कार्ड प्राप्त करता है (get_due_cardsडेक फ़िल्टर के साथ), प्रत्येक कार्ड प्रस्तुत करता है (present_card), और आपकी रेटिंग रिकॉर्ड करता है (rate_card)। आपके अनुरूप स्पष्टीकरण के साथ प्राकृतिक अध्ययन बातचीत। -
"RTL स्टाइलिंग के साथ 10 अरबी शब्दावली कार्ड बनाएं।" — सहायक नोट प्रकार सूचीबद्ध करता है (
modelNames), यदि आवश्यक हो तो एक कस्टम RTL मॉडल बनाता है (createModel+updateModelStylingदाएं-से-बाएं CSS के लिए), फिर बैच में कार्ड बनाता है (addNotes)। -
"मेरे Downloads फ़ोल्डर से इस छवि को चयनित नोट के सामने आयात करें।" — सहायक स्थानीय फ़ाइल अपलोड करता है (
storeMediaFileफ़ाइल पथ के साथ), ब्राउज़र से वर्तमान में चयनित नोट पढ़ता है (guiSelectedNotes+notesInfo), और<img>टैग के साथ सामने वाले फ़ील्ड को अपडेट करता है (updateNoteFields)।
उपलब्ध टूल
सर्वर 50 MCP टूल प्रदान करता है — रोज़ाना Anki संचालन के लिए 39 आवश्यक टूल और 11 GUI टूल जो नोट संपादन/निर्माण वर्कफ़्लो के लिए Anki डेस्कटॉप इंटरफ़ेस चलाते हैं।
आवश्यक टूल
समीक्षा और अध्ययन
sync- नवीनतम डेटा खींचने और परिवर्तन पुश करने के लिए AnkiWeb के साथ सिंक करेंget_due_cards- समीक्षा के लिए देय कार्ड प्राप्त करें, वैकल्पिक रूप से डेक द्वारा फ़िल्टर किया गया (उत्तर शामिल नहीं जब तकinclude_answer: true, डिफ़ॉल्टfalse)get_cards- स्थिति (देय, नया, सीख रहा है, निलंबित, दफनाया गया) और डेक द्वारा लचीले फ़िल्टरिंग के साथ कार्ड प्राप्त करें (उत्तर शामिल नहीं जब तकinclude_answer: true, डिफ़ॉल्टfalse)present_card- समीक्षा के लिए कार्ड उसके प्रश्न/सामने वाले पक्ष के साथ दिखाएंrate_card- कार्ड प्रदर्शन रेट करें (Again, Hard, Good, Easy) और अगली समीक्षा शेड्यूल करेंforgetCards- कार्ड को नए पर रीसेट करें, उनके शेड्यूलिंग को समीक्षा रिकॉर्ड किए बिना त्याग देंsetDueDate- कार्ड को N दिनों में देय होने के लिए पुनर्निर्धारित करें ("0","3-7","1!"), समीक्षा रिकॉर्ड किए बिना
नोट:
forgetCardsऔरsetDueDateशेड्यूलिंग बदलते हैं बिना समीक्षा लॉग किए, जो उन्हेंrate_cardसे अलग करता है। उन्हें तब उपयोग करें जब कार्ड का शेड्यूल गलत हो न कि उत्तर: कार्ड कोAgainरेट करना उसे गहराई से दफनाने के लिए एक वास्तविक चूक रिकॉर्ड करता है और उसके आसानी कारक को गिरा देता है, जो भविष्य के शेड्यूलिंग और आपके आँकड़ों दोनों को स्थायी रूप से तिरछा कर देता है।forgetCardsअंतराल मिटा देता है और कार्ड को फिर से शुरू करता है;setDueDateकार्ड का इतिहास रखता है और केवल अगली समीक्षा को स्थानांतरित करता है।
नोट: कार्ड
front/backसामग्री प्रत्येक कार्ड के लिए उसके अपने टेम्पलेट से प्रस्तुत की जाती है (जैसा Anki दिखाता है), इसलिए उल्टे और क्लोज़ कार्ड सही दिशा प्रदर्शित करते हैं। आपके कार्ड टेम्पलेट्स द्वारा जोड़ा गया स्थिर टेक्स्ट भी आउटपुट में दिखाई देता है।
डेक प्रबंधन
listDecks- सभी डेक सूचीबद्ध करें, वैकल्पिक रूप से प्रति-डेक अध्ययन-कतार आँकड़ों के साथdeckStats- एकल डेक के लिए व्यापक आँकड़े प्राप्त करें (अध्ययन कतार, वास्तविक कार्ड-स्थिति गणना, आसानी/अंतराल वितरण)createDeck- एक नया खाली डेक बनाएं (Parent::Childका समर्थन करता है, अधिकतम 2 स्तर)changeDeck- कार्ड को एक अलग डेक में ले जाएं (यदि मौजूद नहीं है तो बनाया जाता है)
नोट: डेक आँकड़े दो प्रकार के होते हैं।
countsब्लॉक (और सब कुछlistDecksरिपोर्ट करता है) Anki के डेक ब्राउज़र को दर्शाता है: कार्ड आज देय, प्रत्येक डेक की दैनिक नई/समीक्षा सीमाओं द्वारा सीमित, निलंबित और दफनाए गए कार्ड बाहर — इसलिएreview"परिपक्व कार्ड" नहीं है औरotherबकेट केवल अंकगणितीय शेष है (अधिकतर समीक्षा कार्ड आज देय नहीं हैं और नए कार्ड दैनिक सीमा से अधिक हैं)। वास्तविक प्रति-स्थिति कुल के लिएdeckStats/collection_statsपरstatesब्लॉक का उपयोग करें, जो Anki खोजों के माध्यम सेnew,learning,review,suspendedऔरburiedकी गणना करता है, देय तिथियों और दैनिक सीमाओं को अनदेखा करते हुए।
नोट प्रबंधन
addNote- निर्दिष्ट फ़ील्ड और टैग के साथ एकल नोट बनाएंaddNotes- एक डेक और मॉडल साझा करने वाले 100 तक नोट बैच-बनाएं (आंशिक सफलता समर्थित)findNotes- Anki क्वेरी सिंटैक्स का उपयोग करके नोट खोजें (deck:,tag:,is:due, आदि)notesInfo- नोट्स के बारे में विस्तृत जानकारी प्राप्त करें (फ़ील्ड, टैग, CSS स्टाइलिंग)updateNoteFields- मौजूदा नोट फ़ील्ड अपडेट करें (CSS-जागरूक, HTML सामग्री का समर्थन करता है)deleteNotes- नोट्स और सभी संबंधित कार्ड हटाएं (विनाशकारी, पुष्टि की आवश्यकता है)
टैग प्रबंधन
getTags- संग्रह में सभी टैग प्राप्त करें (डुप्लिकेशन से बचने के लिए पहले उपयोग करें)addTags- निर्दिष्ट नोट्स में स्पेस-सेपरेटेड टैग जोड़ेंremoveTags- निर्दिष्ट नोट्स से स्पेस-सेपरेटेड टैग हटाएंreplaceTags- निर्दिष्ट नोट्स में एक टैग का नाम बदलेंclearUnusedTags- किसी भी नोट द्वारा उपयोग नहीं किए गए अनाथ टैग हटाएं (विनाशकारी)
मीडिया प्रबंधन
getMediaFilesNames-collection.mediaमें मीडिया फ़ाइलें सूचीबद्ध करें, वैकल्पिक रूप से पैटर्न द्वारा फ़िल्टर किया गयाretrieveMediaFile- मीडिया फ़ाइल को base64 सामग्री के रूप में डाउनलोड करेंstoreMediaFile- base64 डेटा, एक पूर्ण फ़ाइल पथ, या URL से मीडिया अपलोड करेंdeleteMediaFile-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 (वैश्विक या npx)
सर्वर स्थापित करने का सामान्य-उद्देश्य तरीका, किसी भी MCP क्लाइंट के लिए उपयुक्त जो इसे सीधे लॉन्च करता है।
उन क्लाइंट्स के लिए इसे वैश्विक रूप से स्थापित करें जो ankimcp कमांड चलाते हैं:
npm install -g @ankimcp/anki-mcp-server
या बिना स्थापना के मांग पर चलाएं:
npx @ankimcp/anki-mcp-server
MCPB बंडल (Claude Desktop के लिए अनुशंसित)
Claude Desktop के लिए इस MCP सर्वर को स्थापित करने का सबसे आसान तरीका:
- Releases पृष्ठ से नवीनतम
.mcpbबंडल डाउनलोड करें - Claude Desktop में, एक्सटेंशन स्थापित करें:
- विधि 1: सेटिंग्स → एक्सटेंशन पर जाएं, फिर
.mcpbफ़ाइल को खींचें और छोड़ें - विधि 2: सेटिंग्स → डेवलपर → एक्सटेंशन → एक्सटेंशन स्थापित करें पर जाएं, फिर
.mcpbफ़ाइल चुनें
- विधि 1: सेटिंग्स → एक्सटेंशन पर जाएं, फिर
- यदि आवश्यक हो तो AnkiConnect URL कॉन्फ़िगर करें (डिफ़ॉल्ट
http://localhost:8765है) - Claude Desktop पुनरारंभ करें
बस इतना ही! बंडल में सर्वर को स्थानीय रूप से चलाने के लिए आवश्यक सब कुछ शामिल है।
Anthropic MCP निर्देशिका समीक्षकों के लिए: पूर्व-जनसंख्या वाले नमूना डेक के साथ शून्य-से-एकीकरण वॉकथ्रू
docs/reviewer-setup.mdमें है।
स्रोत से स्थापित करें (विकास के लिए)
विकास या उन्नत उपयोग के लिए (परीक्षण सूट चलाने के लिए Node.js 24.9+ की आवश्यकता है — npm परीक्षण स्क्रिप्ट require(esm) के माध्यम से ESM-केवल NestJS 12 पैकेज लोड करती हैं, जिसे Jest केवल वहीं समर्थन करता है; सर्वर उपयोग करने के लिए रनटाइम आवश्यकता 22.12.0+ ही रहती है):
npm install
npm run build
AI क्लाइंट कनेक्ट करना
एक AI सहायक इस सर्वर तक पहुंचने के दो तरीके हैं, यह इस बात पर निर्भर करता है कि सहायक कहाँ चलता है:
- स्थानीय — सर्वर AI क्लाइंट (Claude Desktop, Cursor, Cline, Zed, या स्थानीय ब्राउज़र सत्र) के समान मशीन पर चलता है। डेस्कटॉप MCP क्लाइंट्स के लिए STDIO का उपयोग करें, स्थानीय वेब-आधारित टूल के लिए HTTP।
- दूरस्थ — एक होस्टेड/दूरस्थ AI (जैसे ChatGPT या क्लाउड में Claude.ai) को आपकी स्थानीय मशीन पर चल रहे Anki तक पहुंचने की आवश्यकता है। प्रबंधित Tunnel का उपयोग करें (✅ अनुशंसित — प्रमाणित) या, एक हल्के-वजन अनप्रमाणित विकल्प के रूप में, ngrok।
स्थानीय
सर्वर आपके AI क्लाइंट के समान कंप्यूटर पर चलता है और localhost पर AnkiConnect से बात करता है।
STDIO (प्राथमिक स्थानीय एकीकरण)
STDIO स्थानीय डेस्कटॉप MCP क्लाइंट्स के लिए मानक ट्रांसपोर्ट है — Claude Desktop, Cursor IDE, Cline, Zed Editor, और अन्य। क्लाइंट सर्वर को एक सबप्रोसेस के रूप में लॉन्च करता है और मानक इनपुट/आउटपुट पर संचार करता है। समर्थित क्लाइंट:
- Claude Desktop
- Cursor IDE - AI-संचालित कोड संपादक
- Cline - AI सहायता के लिए VS Code एक्सटेंशन
- Zed Editor - तेज़, आधुनिक कोड संपादक
- अन्य MCP क्लाइंट जो STDIO ट्रांसपोर्ट का समर्थन करते हैं
Claude Desktop के लिए, MCPB बंडल सबसे आसान मार्ग है। अन्य क्लाइंट के लिए, --stdio फ्लैग के साथ npm पैकेज कॉन्फ़िगर करें।
कॉन्फ़िगरेशन - एक विधि चुनें:
विधि 1: npx का उपयोग करना (अनुशंसित - कोई इंस्टॉलेशन आवश्यक नहीं)
{
"mcpServers": {
"anki-mcp": {
"command": "npx",
"args": ["-y", "@ankimcp/anki-mcp-server", "--stdio"],
"env": {
"ANKI_CONNECT_URL": "http://localhost:8765"
}
}
}
}
विधि 2: वैश्विक इंस्टॉलेशन का उपयोग करना
पहले, वैश्विक रूप से इंस्टॉल करें:
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: VS Code में सेटिंग्स UI के माध्यम से सुलभ
- Zed Editor: एक्सटेंशन मार्केटप्लेस के माध्यम से MCP एक्सटेंशन के रूप में इंस्टॉल करें
क्लाइंट-विशिष्ट सुविधाओं और समस्या निवारण के लिए, अपने MCP क्लाइंट के दस्तावेज़ देखें। एक कॉन्फ़िगरेशन के लिए Claude Desktop से कनेक्ट करें भी देखें जो सीधे एक निर्मित dist/main-stdio.js की ओर इशारा करता है।
HTTP (स्थानीय वेब-आधारित AI)
HTTP मोड सर्वर को MCP स्ट्रीमेबल HTTP प्रोटोकॉल बोलने वाले स्थानीय वेब सर्वर के रूप में चलाता है। यह वह ट्रांसपोर्ट है जिससे एक वेब-आधारित AI टूल आपकी मशीन पर इंगित होने पर बात करता है, और यह वही है जो रिमोट विकल्प बाहरी दुनिया को उजागर करते हैं। अपने आप में, HTTP मोड केवल localhost से बंधता है।
लोकलहोस्ट से परे बाइंडिंग? यदि आप
--host 0.0.0.0पास करते हैं (या रिवर्स प्रॉक्सी/सार्वजनिक डोमेन के पीछे चलते हैं), तो सर्वर DNS-रीबाइंडिंग सुरक्षा के लिए डिफ़ॉल्ट रूप से केवल लूपबैकHostहेडर स्वीकार करता है — क्लाइंट द्वारा उपयोग किए जाने वाले होस्टनामों के लिए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: वैश्विक इंस्टॉलेशन का उपयोग करना
# 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 के लिए सुलभ बनाने के लिए, नीचे दिए गए रिमोट विकल्पों में से एक का उपयोग करें।
रिमोट
एक होस्टेड/रिमोट AI (जैसे ChatGPT या Claude.ai क्लाउड में चल रहा है) सीधे localhost तक नहीं पहुंच सकता। ये विकल्प आपके स्थानीय Anki को इंटरनेट पर उजागर करते हैं ताकि एक रिमोट सहायक उससे बात कर सके।
टनल (✅ अनुशंसित)
अनुशंसित रिमोट पथ — प्रमाणित और सुरक्षित। एक कच्चे सार्वजनिक पोर्ट के विपरीत, टनल मोड के लिए आपको लॉग इन करना आवश्यक है (OAuth 2.0 डिवाइस फ्लो), इसलिए एंडपॉइंट उन लोगों के लिए खुला नहीं है जो URL का अनुमान लगाते हैं।
टनल मोड वेब-आधारित AI सहायकों को आपके अपने टनल को चलाए बिना आपके स्थानीय Anki तक पहुंचने देता है। सर्वर प्रबंधित AnkiMCP टनल सेवा (wss://tunnel.ankimcp.ai) से WebSocket पर बाहर जुड़ता है और एक सार्वजनिक URL सौंपा जाता है। प्रमाणीकरण अंतर्निहित है — कोई ngrok खाता या अलग टनल प्रक्रिया आवश्यक नहीं है, और आप एक बार लॉग इन करते हैं।
लॉग इन करें (OAuth डिवाइस फ्लो):
टनल मोड OAuth 2.0 डिवाइस प्राधिकरण अनुदान का उपयोग करता है। लॉग इन करने से आपका ब्राउज़र स्वचालित रूप से एक अनुमोदन पृष्ठ पर खुलता है जिसमें कोड पहले से ही URL में एम्बेडेड होता है — टाइप करने के लिए कुछ भी नहीं, बस अनुमोदन करें। (यदि ब्राउज़र नहीं खुल सकता है, तो टर्मिनल एक सत्यापन 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
टनल शुरू करें:
# 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 स्वचालित रूप से पहले लॉगिन फ्लो शुरू करता है, फिर टनल पर जारी रहता है। इस ऑटो-लॉगिन के लिए एक इंटरैक्टिव टर्मिनल आवश्यक है — जब stdout एक TTY नहीं है (systemd, हेडलेस Docker, CI), तो सर्वर तेजी से विफल हो जाता है और आपको पहले ankimcp --login चलाने के लिए कहता है। एक बार कनेक्ट होने पर, सार्वजनिक टनल URL मुद्रित होता है; डिस्कनेक्ट करने के लिए Ctrl+C दबाएं। उस URL को अपने AI सहायक के साथ साझा करें।
टनल-मोड पर्यावरण चर:
| चर | विवरण | डिफ़ॉल्ट |
|---|---|---|
TUNNEL_SERVER_URL | टनल सर्वर WebSocket URL (--tunnel/--login फ्लैग मान इसे ओवरराइड करता है) | wss://tunnel.ankimcp.ai |
TUNNEL_AUTH_CLIENT_ID | डिवाइस फ्लो के लिए OAuth क्लाइंट ID। उन्नत — केवल तब आवश्यक जब एक स्व-होस्टेड टनल/प्रमाण सेवा की ओर इशारा करते हुए। | (अंतर्निहित) |
डिवाइस-फ्लो प्रमाणीकरण एंडपॉइंट (/auth/device, /auth/token) TUNNEL_SERVER_URL से प्राप्त होते हैं, इसलिए --tunnel (या TUNNEL_SERVER_URL) को एक अलग होस्ट पर इंगित करना प्रमाणीकरण को भी उस होस्ट पर स्थानांतरित करता है।
यह कैसे काम करता है: टनल मोड MCP सर्वर को एक इन-मेमोरी ट्रांसपोर्ट (TunnelTransport) के पीछे इन-प्रोसेस चलाता है। वह ट्रांसपोर्ट MCP सर्वर का मालिक है और प्रत्येक रिले किए गए अनुरोध निकाय को प्रतिक्रिया में बदल देता है, और TunnelClient इसे WebSocket पर रिमोट टनल सेवा से जोड़ता है — MCP अनुरोधों को अंदर और प्रतिक्रियाओं को बाहर रिले करता है। AnkiConnect अभी भी केवल आपकी स्थानीय मशीन पर पहुंचा जाता है।
प्रोटोकॉल संशोधन: क्योंकि टनल MCP सर्वर को इन-प्रोसेस जोड़ता है, टनल मोड केवल MCP प्रोटोकॉल के 2025 संशोधन की सेवा करता है, जबकि STDIO और HTTP मोड 2025 और नए 2026-07-28 संशोधन दोनों की सेवा करते हैं। हर टूल किसी भी तरह से समान व्यवहार करता है — लेकिन एक क्लाइंट जो केवल 2026-07-28 बोलता है, उसे टनल पर प्रोटोकॉल-संस्करण त्रुटि के साथ वापस कर दिया जाता है; उस क्लाइंट के लिए STDIO या HTTP मोड चलाएं।
ngrok (अप्रमाणित विकल्प)
यदि आप प्रबंधित टनल पर खाते के बिना स्थानीय HTTP मोड को सार्वजनिक रूप से उजागर करना पसंद करते हैं, तो अंतर्निहित --ngrok फ्लैग एक ngrok सबप्रोसेस (src/services/ngrok.service.ts) लॉन्च करता है और स्टार्टअप बैनर में सार्वजनिक URL प्रिंट करता है:
# One-time ngrok setup, then:
ankimcp --ngrok
यह मार्ग अप्रमाणित है — URL वाला कोई भी व्यक्ति आपके Anki तक पहुंच सकता है, इसलिए यह टनल से कम सुरक्षित है। जब तक आपके पास अपने स्वयं के ngrok एंडपॉइंट को प्रबंधित करने का कोई विशिष्ट कारण न हो, टनल को प्राथमिकता दें। (वैश्विक ngrok इंस्टॉलेशन और ऑथटोकन की आवश्यकता है।)
--ngrok फ्लैग ngrok को --host-header=rewrite के साथ लॉन्च करता है, इसलिए ngrok फॉरवर्ड करने से पहले अपस्ट्रीम Host को localhost में फिर से लिखता है। यह अनुरोधों को लूपबैक होस्ट अनुमत सूची के भीतर रखता है (DNS-रीबाइंडिंग सुरक्षा देखें) बिना आपको सार्वजनिक *.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 से कनेक्ट करें (स्थानीय मोड)
आप सर्वर को Claude Desktop में निम्न में से किसी एक तरीके से कॉन्फ़िगर कर सकते हैं:
- जाकर: Settings → Developer → Edit Config
- या कॉन्फ़िग फ़ाइल को मैन्युअल रूप से संपादित करके
कॉन्फ़िगरेशन
अपने 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 | AnkiConnect URL | http://localhost:8765 |
ANKI_CONNECT_API_VERSION | API संस्करण | 6 |
ANKI_CONNECT_API_KEY | AnkiConnect में कॉन्फ़िगर होने पर API कुंजी | - |
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 हेडर मान (अल्पविराम-पृथक होस्टनाम)। LAN/सार्वजनिक पते पर बाइंड करते समय या रिवर्स प्रॉक्सी के पीछे चलते समय आवश्यक। HTTP मोड कॉन्फ़िगरेशन देखें। | केवल लूपबैक |
ALLOWED_ORIGINS | HTTP मोड: ब्राउज़र Origin/Referer पैटर्न की अल्पविराम-पृथक अनुमत सूची (वाइल्डकार्ड समर्थित, जैसे https://*.ngrok.io) | http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:* |
TUNNEL_SERVER_URL | टनल सर्वर WebSocket URL (केवल टनल मोड) | 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"- फ्रंट फ़ील्ड में "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 स्टाइलिंग होती है - मॉडल-विशिष्ट CSS प्राप्त करने के लिए
modelStylingका उपयोग करें
अपडेट चेतावनी
⚠️ महत्वपूर्ण: updateNoteFields का उपयोग करते समय, अपडेट करते समय Anki के ब्राउज़र में नोट को न देखें, अन्यथा फ़ील्ड ठीक से अपडेट नहीं होंगे। अपडेट करने से पहले ब्राउज़र बंद करें या किसी अन्य नोट पर स्विच करें। अधिक विवरण के लिए ज्ञात समस्याएं देखें।
विलोपन सुरक्षा
deleteNotes टूल को आकस्मिक विलोपन को रोकने के लिए स्पष्ट पुष्टि (confirmDeletion: true) की आवश्यकता होती है। एक नोट को हटाना सभी संबद्ध कार्डों को स्थायी रूप से हटा देता है।
सुरक्षा
मीडिया फ़ाइल पथ और URL सत्यापन
मीडिया टूल (storeMediaFile, retrieveMediaFile, deleteMediaFile) और updateNoteFields ऑडियो/चित्र फ़ील्ड में प्रॉम्प्ट इंजेक्शन के माध्यम से दुरुपयोग को रोकने के लिए सुरक्षा सत्यापन शामिल है:
- फ़ाइल पथ आयात केवल मीडिया फ़ाइल प्रकारों तक सीमित हैं (चित्र, ऑडियो, वीडियो)। गैर-मीडिया फ़ाइलें (जैसे, SSH कुंजियाँ, क्रेडेंशियल, शेल कॉन्फ़िग) MIME प्रकार के आधार पर अस्वीकार कर दी जाती हैं। अतिरिक्त फ़ाइल प्रकारों की अनुमति देने के लिए
MEDIA_ALLOWED_TYPESकॉन्फ़िगर करें, या आयात को एक विशिष्ट निर्देशिका तक सीमित करने के लिएMEDIA_IMPORT_DIRकॉन्फ़िगर करें। - URL आयात SSRF हमलों के खिलाफ सत्यापित हैं। निजी नेटवर्क (10.x, 172.16.x, 192.168.x), लूपबैक (127.x), लिंक-लोकल (169.254.x), और गैर-HTTP(S) योजनाओं के अनुरोध अवरुद्ध हैं। विशिष्ट निजी नेटवर्क होस्ट की अनुमति देने के लिए
MEDIA_ALLOWED_HOSTSकॉन्फ़िगर करें। - फ़ाइलनाम पथ ट्रैवर्सल को रोकने के लिए साफ़ किए जाते हैं (जैसे,
../../अनुक्रम हटा दिए जाते हैं)।
ये सुरक्षाएं storeMediaFile, retrieveMediaFile, deleteMediaFile, और updateNoteFields ऑडियो/चित्र फ़ील्ड पर लागू होती हैं।
पथ ट्रैवर्सल भेद्यता Hideaki Takahashi द्वारा रिपोर्ट की गई।
DNS-रीबाइंडिंग सुरक्षा (HTTP ट्रांसपोर्ट)
जब HTTP मोड में चल रहा हो, सर्वर हर अनुरोध पर Host हेडर को मान्य करता है। डिफ़ॉल्ट रूप से केवल लूपबैक होस्ट (localhost, 127.0.0.1, ::1) स्वीकार किए जाते हैं, चाहे पोर्ट कुछ भी हो। Host एक ब्राउज़र-निषिद्ध हेडर है, इसलिए एक दुर्भावनापूर्ण वेब पेज इसे जाली नहीं बना सकता — यह DNS-रीबाइंडिंग पथ को बंद कर देता है जहाँ एक रीबाउंड पृष्ठ स्थानीय सर्वर तक स्पूफ किए गए Host के साथ और बिना Origin के पहुँचता है, और MCP टूल्स तक पहुँचता है। एक अनुमति-रहित Host को 403 के साथ अस्वीकार कर दिया जाता है।
यदि आप 0.0.0.0 से बाइंड करते हैं, रिवर्स प्रॉक्सी के पीछे चलते हैं, या सार्वजनिक टनल डोमेन उजागर करते हैं, तो उन होस्टों को अनुमति देने के लिए ALLOWED_HOSTS (अल्पविराम-पृथक होस्टनाम) सेट करें। ngrok के साथ टनलिंग करते समय सर्वर --host-header=rewrite का उपयोग करता है, इसलिए अपस्ट्रीम अभी भी एक लूपबैक Host देखता है। विकल्पों की पूरी सूची के लिए HTTP मोड कॉन्फ़िगरेशन देखें।
DNS-रीबाइंडिंग भेद्यता avishaigo-commits और yotampe-pluto द्वारा रिपोर्ट की गई।
गोपनीयता नीति
यह MCP सर्वर आपकी मशीन पर स्थानीय रूप से चलता है और कोई टेलीमेट्री, विश्लेषण या उपयोग डेटा एकत्र नहीं करता है।
पूर्ण नीति: https://ankimcp.ai/privacy/
- डेटा संग्रह: सर्वर कुछ भी एकत्र नहीं करता। यह आपके AI सहायक और आपके स्थानीय AnkiConnect प्लगइन के बीच अनुरोधों को प्रॉक्सी करता है।
- उपयोग / भंडारण: कोई सर्वर-साइड भंडारण नहीं। सभी फ्लैशकार्ड डेटा आपके अपने डिवाइस पर आपके Anki इंस्टॉलेशन में रहता है।
- तृतीय-पक्ष साझाकरण: कोई नहीं। सर्वर केवल आपके द्वारा कॉन्फ़िगर किए गए AnkiConnect URL से बात करता है (डिफ़ॉल्ट: localhost)। यदि आप Anki की अंतर्निहित AnkiWeb सिंक सक्षम करते हैं, तो यह आपके 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 जैसे संस्करण प्रबंधक का उपयोग कर सकते हैं।
विकास
ट्रांसपोर्ट मोड
यह सर्वर अलग-अलग प्रवेश बिंदुओं के माध्यम से तीन MCP ट्रांसपोर्ट मोड का समर्थन करता है:
STDIO मोड (डिफ़ॉल्ट)
- Claude Desktop जैसे स्थानीय MCP क्लाइंट के लिए
- संचार के लिए मानक इनपुट/आउटपुट का उपयोग करता है
- प्रवेश बिंदु:
dist/main-stdio.js - चलाएँ:
npm run start:prod:stdioयाnode dist/main-stdio.js - MCPB बंडल: STDIO मोड का उपयोग करता है
HTTP मोड (स्ट्रीमेबल HTTP)
- दूरस्थ MCP क्लाइंट और वेब-आधारित एकीकरण के लिए
- MCP स्ट्रीमेबल HTTP प्रोटोकॉल का उपयोग करता है
- प्रवेश बिंदु:
dist/main-http.js - चलाएँ:
npm run start:prod:httpयाnode dist/main-http.js - डिफ़ॉल्ट पोर्ट: 3000 (
PORTenv var के माध्यम से कॉन्फ़िगर करने योग्य) - डिफ़ॉल्ट होस्ट:
127.0.0.1(HOSTenv var के माध्यम से कॉन्फ़िगर करने योग्य) - MCP एंडपॉइंट:
http://127.0.0.1:3000/(रूट पथ)
टनल मोड (प्रबंधित WebSocket टनल)
- प्रबंधित AnkiMCP टनल सेवा के माध्यम से वेब-आधारित AI सहायकों के लिए, अंतर्निहित प्रमाणीकरण के साथ
- MCP सर्वर इन-मेमोरी ट्रांसपोर्ट के पीछे इन-प्रोसेस चलता है;
TunnelTransportMCP सर्वर का मालिक है औरTunnelClientइसे WebSocket पर टनल सेवा से जोड़ता है - प्रोटोकॉल: केवल 2025 MCP संशोधन प्रदान करता है (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) पर संग्रहीत - देव:
npm run start:dev:tunnel(वॉच मोड,--tunnel --debugचलाता है)
निर्माण
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 केवल-लोकलहोस्ट के लिए)ALLOWED_HOSTS- अल्पविराम-पृथक अतिरिक्तHostहेडर मान अंतर्निहित लूपबैक सेट (localhost,127.0.0.1,::1) के अलावा स्वीकार करने के लिए। केवल-होस्टनाम और पोर्ट-अज्ञेय। डिफ़ॉल्ट: केवल लूपबैक।ALLOWED_ORIGINS- अल्पविराम-पृथक अनुमतिसूची ब्राउज़रOrigin/Refererपैटर्न; वाइल्डकार्ड समर्थित (जैसेhttps://*.ngrok.io)। डिफ़ॉल्ट:http://localhost:*,http://127.0.0.1:*,https://localhost:*,https://127.0.0.1:*।LOG_LEVEL- लॉगिंग स्तर (डिफ़ॉल्ट: info)
सुरक्षा:
- होस्ट हेडर मान्यता (DNS-रीबाइंडिंग सुरक्षा) — प्रत्येक HTTP अनुरोध में एक
Hostहेडर होना चाहिए जो अनुमतिसूची से मेल खाता हो। डिफ़ॉल्ट रूप से केवल लूपबैक होस्ट (localhost,127.0.0.1,::1) स्वीकार किए जाते हैं, चाहे पोर्ट कुछ भी हो।Hostएक ब्राउज़र-निषिद्ध हेडर है, इसलिए एक दुर्भावनापूर्ण वेब पेज इसे जाली नहीं बना सकता — यह DNS-रीबाइंडिंग पथ को बंद कर देता है जहाँ एक रीबाउंड पृष्ठ स्पूफ किए गएHostके साथ और बिनाOriginके सर्वर तक पहुँचता है। एक अनुमति-रहितHostको403के साथ अस्वीकार कर दिया जाता है। - ओरिजिन हेडर मान्यता — मौजूद-लेकिन-अनुमति-रहित
Origin/Refererवाले ब्राउज़र अनुरोध अस्वीकार कर दिए जाते हैं। बिनाOriginवाले अनुरोध (curl, Postman, MCP-over-HTTP क्लाइंट) अनुमत हैं; रीबाइंडिंग के खिलाफ बचाव Host मान्यता है। - डिफ़ॉल्ट रूप से localhost (127.0.0.1) से बाइंड होता है।
- वर्तमान संस्करण में कोई प्रमाणीकरण नहीं (OAuth समर्थन योजनाबद्ध)।
HTTP मोड को localhost से परे उजागर करना — यदि आप LAN/सार्वजनिक पते से बाइंड करते हैं या सर्वर को रिवर्स प्रॉक्सी या सार्वजनिक डोमेन के पीछे रखते हैं, तो आपको अवश्य ALLOWED_HOSTS को उन होस्टनामों पर सेट करना चाहिए जिनका क्लाइंट उपयोग करेंगे, अन्यथा हर गैर-लूपबैक अनुरोध 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 हेडर स्वीकार किए जाएंगे।
Docker / रिवर्स प्रॉक्सी / सार्वजनिक डोमेन: वही नियम लागू होता है। Docker में, अनुरोध आमतौर पर कंटेनर के प्रकाशित होस्टनाम या प्रॉक्सी के
Hostके साथ आते हैं, इसलिएALLOWED_HOSTSको तदनुसार सेट करें। एक रिवर्स प्रॉक्सी (nginx, Caddy, Traefik) को या तो मूलHostको आगे भेजना चाहिए और उस होस्टनाम कोALLOWED_HOSTSमें सूचीबद्ध करना चाहिए, या अपस्ट्रीमHostको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 बंडल बनाना
वितरण योग्य MCPB बंडल बनाने के लिए:
npm run mcpb:bundle
यह कमांड:
package.jsonसेmanifest.jsonमें संस्करण सिंक करेगा- पुरानी
.mcpbफ़ाइलें हटाएगा - TypeScript प्रोजेक्ट बनाएगा
dist/औरnode_modules/को एक.mcpbफ़ाइल में पैकेज करेगा- devDependencies हटाने के लिए
mcpb cleanचलाएगा (बंडल को ~47MB से ~10MB तक अनुकूलित करता है)
आउटपुट फ़ाइल का नाम anki-mcp-server-X.X.X.mcpb होगा और इसे एक-क्लिक इंस्टॉलेशन के लिए वितरित किया जा सकता है।
क्या बंडल किया जाता है
MCPB बंडल में शामिल हैं:
- संकलित JavaScript (
dist/निर्देशिका - सभी तीन प्रवेश बिंदु शामिल हैं) - केवल उत्पादन निर्भरताएँ (
node_modules/- devDependenciesmcpb cleanद्वारा हटाई गईं) - पैकेज मेटाडेटा (
package.json) - मैनिफेस्ट कॉन्फ़िगरेशन (
manifest.json-main-stdio.jsका उपयोग करने के लिए कॉन्फ़िगर किया गया) - आइकन (
icon.png)
स्रोत फ़ाइलें, परीक्षण और विकास कॉन्फ़िगरेशन .mcpbignore के माध्यम से स्वचालित रूप से बाहर रखे जाते हैं।
Claude Desktop में लॉगिंग
Claude Desktop में MCPB एक्सटेंशन के रूप में चलते समय, लॉग यहाँ लिखे जाते हैं:
लॉग स्थान: ~/Library/Logs/Claude/ (macOS)
लॉग कई फ़ाइलों में विभाजित हैं:
- main.log - सामान्य Claude Desktop एप्लिकेशन लॉग
- mcp-server-Anki MCP Server.log - इस एक्सटेंशन के लिए MCP प्रोटोकॉल संदेश
- mcp.log - सभी सर्वरों से संयुक्त MCP लॉग
नोट: pino लॉगर आउटपुट (सर्वर कोड से 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 इंस्पेक्टर का उपयोग करके और अपने IDE (WebStorm, VS Code, आदि) से डिबगर संलग्न करके MCP सर्वर को डिबग कर सकते हैं।
HTTP मोड के लिए नोट: MCP इंस्पेक्टर के साथ HTTP मोड (स्ट्रीमेबल HTTP) का परीक्षण करते समय, CORS त्रुटियों से बचने के लिए "Connection Type: Via Proxy" का उपयोग करें।
चरण 1: MCP इंस्पेक्टर में डिबग सर्वर कॉन्फ़िगर करें
mcp-inspector-config.json पहले से ही एक डिबग सर्वर कॉन्फ़िगरेशन शामिल करता है:
{
"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: डिबग सर्वर प्रारंभ करें
डिबग सर्वर के साथ MCP इंस्पेक्टर चलाएँ:
npm run inspector:debug
यह पोर्ट 9229 पर Node.js डिबगिंग सक्षम के साथ सर्वर शुरू करेगा और पहली पंक्ति पर निष्पादन रोक देगा।
चरण 3: अपने IDE से डिबगर संलग्न करें
WebStorm
- Run → Edit Configurations पर जाएँ
- एक नया Attach to Node.js/Chrome कॉन्फ़िगरेशन जोड़ें
- पोर्ट को
9229पर सेट करें - संलग्न करने के लिए Debug पर क्लिक करें
VS Code
- डिबग पैनल खोलें (Ctrl+Shift+D / Cmd+Shift+D)
- Debug MCP Server (Attach) कॉन्फ़िगरेशन चुनें
- संलग्न करने के लिए F5 दबाएँ
चरण 4: ब्रेकपॉइंट सेट करें और डिबग करें
एक बार संलग्न होने के बाद, आप यह कर सकते हैं:
- अपनी TypeScript स्रोत फ़ाइलों में ब्रेकपॉइंट सेट करें
- कोड निष्पादन के माध्यम से कदम बढ़ाएँ
- चर और कॉल स्टैक का निरीक्षण करें
- अभिव्यक्तियों का मूल्यांकन करने के लिए डिबग कंसोल का उपयोग करें
डिबगर स्रोत मानचित्रों के साथ काम करेगा, जिससे आप संकलित JavaScript के बजाय मूल TypeScript कोड को डिबग कर सकते हैं।
Claude Desktop के साथ डिबगिंग
आप Node.js डिबगर सक्षम करके और अपना IDE संलग्न करके Claude Desktop के अंदर चलते समय MCP सर्वर को भी डिबग कर सकते हैं।
चरण 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"
}
}
}
}
मुख्य परिवर्तन: dist/main-stdio.js के पथ से पहले --inspect=9229 जोड़ें
डिबग विकल्प:
--inspect=9229- डिबगर तुरंत प्रारंभ करें, ब्लॉक नहीं करता (अनुशंसित)--inspect-brk=9229- डिबगर संलग्न होने तक निष्पादन रोकें (स्टार्टअप समस्याओं की डिबगिंग के लिए)
चरण 2: Claude Desktop पुनः प्रारंभ करें
कॉन्फ़िग सहेजने के बाद, Claude Desktop पुनः प्रारंभ करें। MCP सर्वर अब पोर्ट 9229 पर डिबगिंग सक्षम के साथ चलेगा।
चरण 3: अपने IDE से डिबगर संलग्न करें
WebStorm
- Run → Edit Configurations पर जाएँ
- + बटन पर क्लिक करें और Attach to Node.js/Chrome चुनें
- कॉन्फ़िगर करें:
- नाम:
Attach to Anki MCP (Claude Desktop) - होस्ट:
localhost - पोर्ट:
9229 - संलग्न करें:
Node.js < 8याChrome or Node.js > 6.3(WebStorm संस्करण के आधार पर)
- नाम:
- 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"]
}
]
}
- डिबग पैनल खोलें (Ctrl+Shift+D / Cmd+Shift+D)
- Attach to Anki MCP (Claude Desktop) चुनें
- संलग्न करने के लिए F5 दबाएँ
चरण 4: वास्तविक समय में डिबग करें
एक बार अटैच हो जाने पर, आप यह कर सकते हैं:
- अपनी TypeScript सोर्स फ़ाइलों में ब्रेकपॉइंट सेट करें (जैसे,
src/mcp/primitives/essential/tools/create-model.tool.ts) - Claude Desktop का सामान्य रूप से उपयोग करें - टूल इनवोक होने पर ब्रेकपॉइंट हिट होंगे
- कोड निष्पादन के माध्यम से स्टेप करें
- वेरिएबल्स और कॉल स्टैक का निरीक्षण करें
- डीबग कंसोल का उपयोग करें
उदाहरण: create-model.tool.ts में लाइन 119 पर ब्रेकपॉइंट सेट करें, फिर Claude से एक नया मॉडल बनाने के लिए कहें। डीबगर आपके ब्रेकपॉइंट पर रुक जाएगा!
नोट: डीबगर तब तक अटैच रहता है जब तक Claude Desktop चल रहा है। आप Claude Desktop को पुनरारंभ किए बिना किसी भी समय डिटैच/रीअटैच कर सकते हैं।
बिल्ड कमांड
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% न्यूनतम कवरेज सीमा बनाए रखता है:
- ब्रांचेस
- फ़ंक्शन
- लाइन्स
- स्टेटमेंट्स
कवरेज रिपोर्ट coverage/ निर्देशिका में उत्पन्न होती हैं।
वर्ज़निंग
यह प्रोजेक्ट सेमेंटिक वर्ज़निंग का पालन करता है, जिसमें प्री-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 फ़्लैग), मीडिया फ़ाइल प्रबंधन, मॉडल/टेम्पलेट प्रबंधन, और व्यापक डेक आँकड़े शामिल हैं। फीडबैक और परीक्षण के आधार पर APIs बदल सकते हैं।
MCPB स्पेक विकास
यह प्रोजेक्ट Anthropic के MCPB बंडल स्पेसिफिकेशन को लक्षित करता है, जो अभी भी विकसित हो रहा है। हम स्पेक को https://github.com/modelcontextprotocol/mcpb पर ट्रैक करते हैं और अनुपालन बनाए रखने के लिए ब्रेकिंग परिवर्तन पेश कर सकते हैं। ब्रेकिंग परिवर्तन 0.x.x वर्ज़निंग योजना के तहत अनुमत हैं।
समान प्रोजेक्ट
यदि आप Anki MCP इंटीग्रेशन की खोज कर रहे हैं, तो यहाँ इस क्षेत्र के अन्य प्रोजेक्ट हैं:
scorzeth/anki-mcp-server
- स्थिति: परित्यक्त प्रतीत होता है (कोई हालिया अपडेट नहीं)
- Anki MCP इंटीग्रेशन का प्रारंभिक कार्यान्वयन
nailuoGG/anki-mcp-server
- दृष्टिकोण: हल्का, एकल-फ़ाइल कार्यान्वयन
- आर्किटेक्चर: प्रक्रियात्मक कोड संरचना जिसमें सभी टूल एक फ़ाइल में हैं
- इसके लिए अच्छा: सरल उपयोग के मामले, न्यूनतम निर्भरताएँ
यह प्रोजेक्ट क्यों अलग है:
- एंटरप्राइज़-ग्रेड आर्किटेक्चर: NestJS पर निर्भरता इंजेक्शन के साथ निर्मित
- मॉड्यूलर डिज़ाइन: प्रत्येक टूल एक अलग क्लास है जिसमें चिंताओं का स्पष्ट पृथक्करण है
- रखरखाव क्षमता: मौजूदा कोड को छुए बिना नई सुविधाओं के साथ विस्तार करना आसान
- परीक्षण: 70% कवरेज आवश्यकता के साथ व्यापक परीक्षण सूट
- टाइप सुरक्षा: Zod सत्यापन के साथ सख्त TypeScript
- त्रुटि हैंडलिंग: सहायक उपयोगकर्ता फीडबैक के साथ मजबूत त्रुटि हैंडलिंग
- प्रोडक्शन-रेडी: उचित लॉगिंग, प्रगति रिपोर्टिंग, और MCPB बंडल समर्थन
- स्केलेबिलिटी: बुनियादी टूल से जटिल वर्कफ़्लो तक आसानी से बढ़ सकता है
उपयोग का मामला: यदि आपको उन्नत Anki इंटीग्रेशन बनाने के लिए एक ठोस आधार की आवश्यकता है या कार्यक्षमता को महत्वपूर्ण रूप से विस्तारित करने की योजना है, तो इस प्रोजेक्ट का आर्किटेक्चरल दृष्टिकोण समय के साथ इसे बनाए रखना और स्केल करना आसान बनाता है।
उपयोगी लिंक
- मॉडल कॉन्टेक्स्ट प्रोटोकॉल दस्तावेज़ीकरण
- AnkiConnect API दस्तावेज़ीकरण
- Claude Desktop डाउनलोड
- डेस्कटॉप एक्सटेंशन बनाना (Anthropic ब्लॉग)
- MCP सर्वर रिपॉजिटरी
- NestJS दस्तावेज़ीकरण
- Anki आधिकारिक वेबसाइट
लाइसेंस और एट्रिब्यूशन
यह प्रोजेक्ट MIT लाइसेंस के तहत लाइसेंस प्राप्त है — पूर्ण पाठ के लिए LICENSE देखें।
कॉपीराइट © 2026 Anatoly Tarnavsky.
तृतीय-पक्ष एट्रिब्यूशन
-
Anki® Ankitects Pty Ltd का पंजीकृत ट्रेडमार्क है। यह प्रोजेक्ट एक अनौपचारिक तृतीय-पक्ष टूल है और Ankitects Pty Ltd से संबद्ध, समर्थित, या प्रायोजित नहीं है। Anki लोगो का उपयोग https://apps.ankiweb.net के लिंक के साथ Anki को संदर्भित करने के लिए वैकल्पिक लाइसेंस के तहत किया जाता है। आधिकारिक Anki एप्लिकेशन के लिए, https://apps.ankiweb.net पर जाएँ।
-
मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) Anthropic द्वारा एक खुला मानक है। MCP लोगो आधिकारिक MCP दस्तावेज़ीकरण रिपॉजिटरी से है और MIT लाइसेंस के तहत उपयोग किया जाता है। MCP के बारे में अधिक जानकारी के लिए, https://modelcontextprotocol.io पर जाएँ।
-
यह एक स्वतंत्र प्रोजेक्ट है जो Anki और MCP तकनीकों को जोड़ता है। सभी ट्रेडमार्क, सेवा चिह्न, व्यापार नाम, उत्पाद नाम, और लोगो उनके संबंधित स्वामियों की संपत्ति हैं।