Anki MCP

आधिकारिक

एक MCP सर्वर जो AI सहायकों को Anki, स्पेस्ड रिपीटीशन फ्लैशकार्ड एप्लिकेशन, के साथ इंटरैक्ट करने में सक्षम बनाता है।

Anki MCP के साथ आप क्या कर सकते हैं?

  • समीक्षा के लिए देय कार्ड इंटरैक्टिव रूप से देखें — अपने सहायक से get_due_cards के साथ देय कार्ड लाने, present_card के माध्यम से उन्हें प्रस्तुत करने और rate_card के साथ अपनी रेटिंग दर्ज करने के लिए कहें।
  • कस्टम नोट प्रकार बनाएं और स्टाइल करेंcreateModel, updateModelStyling, और updateModelTemplates का उपयोग करके विशिष्ट फ़ील्ड, कार्ड टेम्पलेट और CSS के साथ एक नया नोट प्रकार बनाएं।
  • सूची से बैच-एड फ्लैशकार्ड — नोटों का एक सेट प्रदान करें और सहायक से उन्हें एक साथ addNotes के साथ बनाने के लिए कहें, जो एक ही डेक और मॉडल साझा करते हों।
  • मौजूदा नोट खोजें और अपडेट करेंfindNotes के साथ डेक, टैग या देय स्थिति के आधार पर नोट खोजें, फिर updateNoteFields, addTags, या removeTags का उपयोग करके उनके फ़ील्ड या टैग संशोधित करें।
  • अपने संग्रह में मीडिया प्रबंधित करेंstoreMediaFile के साथ स्थानीय फ़ाइल पथ से चित्र या ऑडियो अपलोड करें, getMediaFilesNames के माध्यम से संग्रहीत फ़ाइलों की सूची देखें, या अप्रयुक्त मीडिया हटाएं।
  • मैन्युअल संपादन के लिए Anki का GUI खोलें — कार्ड ब्राउज़र खोलने के लिए guiBrowse, कार्ड जोड़ें संवाद को पूर्व-भरने के लिए guiAddCards, या किसी विशिष्ट नोट को संपादित करने के लिए guiEditNote का उपयोग करें।

दस्तावेज़

Anki MCP सर्वर

Tests npm version

Anki + MCP Integration

मॉडल संदर्भ प्रोटोकॉल के माध्यम से Anki को AI सहायकों के साथ सहजता से एकीकृत करें

बीटा - यह परियोजना सक्रिय विकास में है। API और सुविधाएँ बदल सकती हैं।

एक मॉडल संदर्भ प्रोटोकॉल (MCP) सर्वर जो AI सहायकों को Anki, स्पेस्ड रिपीटिशन फ्लैशकार्ड एप्लिकेशन के साथ इंटरैक्ट करने में सक्षम बनाता है।

प्राकृतिक भाषा इंटरैक्शन के साथ अपने Anki अनुभव को बदलें - जैसे एक निजी ट्यूटर होना। AI सहायक केवल प्रश्न और उत्तर प्रस्तुत नहीं करता; यह अवधारणाओं को समझा सकता है, सीखने की प्रक्रिया को अधिक आकर्षक और मानवीय बना सकता है, संदर्भ प्रदान कर सकता है, और आपकी सीखने की शैली के अनुकूल हो सकता है। यह तुरंत नोट्स बना और संपादित कर सकता है, आपके अध्ययन सत्रों को गतिशील बातचीत में बदल सकता है। जल्द ही और सुविधाएँ आ रही हैं!

उदाहरण और ट्यूटोरियल

Claude Desktop के साथ इस MCP सर्वर का उपयोग करने पर व्यापक गाइड, वास्तविक दुनिया के उदाहरण और चरण-दर-चरण ट्यूटोरियल के लिए, यहाँ जाएँ:

ankimcp.ai - व्यावहारिक उदाहरणों और उपयोग के मामलों के साथ पूर्ण दस्तावेज़ीकरण

पूरक दस्तावेज़ीकरण के लिए docs/ देखें, जिसमें समीक्षक सेटअप गाइड और नमूना Anki डेक शामिल है।

उदाहरण उपयोग के मामले

तीन प्रतिनिधि संकेत जो इस सर्वर द्वारा सक्षम टूल प्रवाह दिखाते हैं:

  1. "मेरे स्पैनिश डेक की समीक्षा करने में मेरी मदद करें।" — सहायक AnkiWeb के साथ सिंक करता है (sync), देय कार्ड लाता है (get_due_cards डेक फ़िल्टर के साथ), प्रत्येक कार्ड प्रस्तुत करता है (present_card), और आपकी रेटिंग रिकॉर्ड करता है (rate_card)। आपके अनुरूप स्पष्टीकरण के साथ प्राकृतिक अध्ययन वार्तालाप।

  2. "RTL स्टाइलिंग के साथ 10 अरबी शब्दावली कार्ड बनाएँ।" — सहायक नोट प्रकारों को सूचीबद्ध करता है (modelNames), यदि आवश्यक हो तो एक कस्टम RTL मॉडल बनाता है (createModel + updateModelStyling दाएँ-से-बाएँ CSS के लिए), फिर बैच में कार्ड बनाता है (addNotes)।

  3. "मेरे डाउनलोड फ़ोल्डर से इस छवि को चयनित नोट के सामने आयात करें।" — सहायक स्थानीय फ़ाइल अपलोड करता है (storeMediaFile फ़ाइल पथ के साथ), ब्राउज़र से वर्तमान में चयनित नोट पढ़ता है (guiSelectedNotes + notesInfo), और एक <img> टैग के साथ सामने के फ़ील्ड को अपडेट करता है (updateNoteFields)।

उपलब्ध उपकरण

सर्वर 42 MCP उपकरण प्रदान करता है — रोज़मर्रा के Anki संचालन के लिए 31 आवश्यक उपकरण और 11 GUI उपकरण जो नोट संपादन/निर्माण वर्कफ़्लो के लिए Anki डेस्कटॉप इंटरफ़ेस चलाते हैं।

आवश्यक उपकरण

समीक्षा और अध्ययन

  • sync - नवीनतम डेटा खींचने और परिवर्तनों को पुश करने के लिए AnkiWeb के साथ सिंक करें
  • get_due_cards - वे कार्ड प्राप्त करें जो समीक्षा के लिए देय हैं, वैकल्पिक रूप से डेक द्वारा फ़िल्टर किए गए
  • get_cards - स्थिति (देय, नया, सीखना, निलंबित, दफन) और डेक द्वारा लचीले फ़िल्टरिंग के साथ कार्ड प्राप्त करें
  • present_card - समीक्षा के लिए एक कार्ड उसके प्रश्न/सामने की ओर के साथ दिखाएँ
  • rate_card - कार्ड के प्रदर्शन को रेट करें (फिर से, कठिन, अच्छा, आसान) और अगली समीक्षा शेड्यूल करें

नोट: कार्ड front/back सामग्री प्रत्येक कार्ड के लिए उसके अपने टेम्पलेट से प्रस्तुत की जाती है (जैसा कि Anki इसे दिखाता है), इसलिए उल्टे और क्लोज़ कार्ड सही दिशा प्रदर्शित करते हैं। आपके कार्ड टेम्पलेट्स द्वारा जोड़ा गया स्थिर पाठ भी आउटपुट में दिखाई देता है।

डेक प्रबंधन

  • listDecks - सभी डेक सूचीबद्ध करें, वैकल्पिक रूप से प्रति-डेक कार्ड-गणना आँकड़ों के साथ
  • deckStats - एकल डेक के लिए व्यापक आँकड़े प्राप्त करें (गणना, सहजता/अंतराल वितरण)
  • createDeck - एक नया खाली डेक बनाएँ (Parent::Child का समर्थन करता है, अधिकतम 2 स्तर)
  • changeDeck - कार्डों को एक अलग डेक में ले जाएँ (यदि मौजूद नहीं है तो बनाया गया)

नोट प्रबंधन

  • 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 सर्वर को स्थापित करने का सबसे आसान तरीका:

  1. रिलीज़ पृष्ठ से नवीनतम .mcpb बंडल डाउनलोड करें
  2. Claude Desktop में, एक्सटेंशन स्थापित करें:
    • विधि 1: सेटिंग्स → एक्सटेंशन पर जाएँ, फिर .mcpb फ़ाइल को खींचें और छोड़ें
    • विधि 2: सेटिंग्स → डेवलपर → एक्सटेंशन → एक्सटेंशन स्थापित करें पर जाएँ, फिर .mcpb फ़ाइल चुनें
  3. यदि आवश्यक हो तो AnkiConnect URL कॉन्फ़िगर करें (डिफ़ॉल्ट http://localhost:8765 है)
  4. Claude Desktop को पुनरारंभ करें

बस इतना ही! बंडल में सर्वर को स्थानीय रूप से चलाने के लिए आवश्यक सब कुछ शामिल है।

Anthropic MCP निर्देशिका समीक्षकों के लिए: एक पूर्व-आबादी नमूना डेक के साथ शून्य-से-एकीकरण वॉकथ्रू docs/reviewer-setup.md में रहता है।

स्रोत से स्थापित करें (विकास के लिए)

विकास या उन्नत उपयोग के लिए:

npm install
npm run build

AI क्लाइंट कनेक्ट करना

दो तरीके हैं जिनसे एक AI सहायक इस सर्वर तक पहुँच सकता है, यह इस पर निर्भर करता है कि सहायक कहाँ चलता है:

  • स्थानीय — सर्वर AI क्लाइंट (Claude Desktop, Cursor, Cline, Zed, या एक स्थानीय ब्राउज़र सत्र) के समान मशीन पर चलता है। डेस्कटॉप MCP क्लाइंट के लिए STDIO का उपयोग करें, स्थानीय वेब-आधारित उपकरणों के लिए HTTP
  • दूरस्थ — एक होस्टेड/दूरस्थ AI (जैसे क्लाउड में ChatGPT या Claude.ai) को आपकी स्थानीय मशीन पर चल रहे Anki तक पहुँचने की आवश्यकता है। प्रबंधित टनल (✅ अनुशंसित — प्रमाणीकृत) या, एक हल्के गैर-प्रमाणीकृत विकल्प के रूप में, 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 तक पहुँचने देता है। सर्वर एक WebSocket के माध्यम से प्रबंधित AnkiMCP टनल सेवा (wss://tunnel.ankimcp.ai) से जुड़ता है और उसे एक सार्वजनिक 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 सर्वर को इन-प्रोसेस एक इन-मेमोरी ट्रांसपोर्ट के पीछे चलाता है (McpModule बिना किसी अंतर्निहित ट्रांसपोर्ट के शुरू होता है)। TunnelMcpService उस इन-मेमोरी ट्रांसपोर्ट को MCP सर्वर से जोड़ता है, और TunnelClient इसे एक WebSocket पर रिमोट टनल सेवा से जोड़ता है — MCP अनुरोधों को अंदर और प्रतिक्रियाओं को बाहर रिले करता है। AnkiConnect अभी भी केवल आपकी स्थानीय मशीन पर ही पहुँचा जाता है।

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 <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

केवल-पढ़ने का मोड (सभी मोड)

--read-only फ्लैग आपके Anki संग्रह में किसी भी संशोधन को रोकता है। सक्षम होने पर:

  • सभी पढ़ने के संचालन सामान्य रूप से काम करते हैं (डेक ब्राउज़ करना, कार्ड देखना, नोट्स खोजना)
  • समीक्षा संचालन की अनुमति है (सिंक, answerCards, निलंबित/अन-निलंबित)
  • सामग्री संशोधन अवरुद्ध हैं (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 में निम्नलिखित में से किसी भी तरीके से कॉन्फ़िगर कर सकते हैं:

  • यहाँ जाकर: सेटिंग्स → डेवलपर → कॉन्फ़िग संपादित करें
  • या कॉन्फ़िग फ़ाइल को मैन्युअल रूप से संपादित करके

कॉन्फ़िगरेशन

अपने 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_URLAnkiConnect URLhttp://localhost:8765
ANKI_CONNECT_API_VERSIONAPI संस्करण6
ANKI_CONNECT_API_KEYAPI कुंजी यदि AnkiConnect में कॉन्फ़िगर की गई है-
ANKI_CONNECT_TIMEOUTअनुरोध टाइमआउट मिलीसेकंड में5000
READ_ONLYकेवल-पढ़ने का मोड सक्षम करें (true या 1)false
ALLOWED_HOSTSHTTP मोड: लूपबैक से परे स्वीकार करने के लिए अतिरिक्त Host हेडर मान (अल्पविराम से अलग किए गए होस्टनाम)। LAN/सार्वजनिक पते पर बाइंड करते समय या रिवर्स प्रॉक्सी के पीछे चलते समय आवश्यक। देखें HTTP मोड कॉन्फ़िगरेशनकेवल लूपबैक
ALLOWED_ORIGINSHTTP मोड: ब्राउज़र 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_HOSTSURL आयात के लिए विशिष्ट निजी नेटवर्क होस्ट की अनुमति दें (अल्पविराम से अलग, जैसे, 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" - "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 (डिफ़ॉल्ट: लोकलहोस्ट) से बात करता है। यदि आप 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 (PORT env var के माध्यम से कॉन्फ़िगर करने योग्य)
  • डिफ़ॉल्ट होस्ट: 127.0.0.1 (HOST env var के माध्यम से कॉन्फ़िगर करने योग्य)
  • MCP समापन बिंदु: http://127.0.0.1:3000/ (रूट पथ)

टनल मोड (प्रबंधित वेबसॉकेट टनल)

  • अंतर्निहित प्रमाणीकरण के साथ, प्रबंधित AnkiMCP टनल सेवा के माध्यम से वेब-आधारित AI सहायकों के लिए
  • MCP सर्वर इन-मेमोरी ट्रांसपोर्ट के पीछे इन-प्रोसेस चलता है; TunnelMcpService इसे MCP सर्वर से जोड़ता है और TunnelClient इसे वेबसॉकेट पर टनल सेवा से जोड़ता है
  • प्रवेश बिंदु: 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 - अंतर्निहित लूपबैक सेट (localhost, 127.0.0.1, ::1) से परे स्वीकार करने के लिए अल्पविराम से अलग किए गए अतिरिक्त Host हेडर मान। केवल होस्टनाम और पोर्ट-अज्ञेयवादी। डिफ़ॉल्ट: केवल लूपबैक।
  • 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 क्लाइंट) की अनुमति है; होस्ट सत्यापन रीबाइंडिंग के खिलाफ बचाव है।
  • डिफ़ॉल्ट रूप से लोकलहोस्ट (127.0.0.1) से बाइंड करता है।
  • वर्तमान संस्करण में कोई प्रमाणीकरण नहीं (OAuth समर्थन की योजना है)।

HTTP मोड को लोकलहोस्ट से परे उजागर करना — यदि आप किसी 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

जब आप ALLOWED_HOSTS के बिना 0.0.0.0/:: से बाइंड करते हैं, तो सर्वर एक स्टार्टअप चेतावनी लॉग करता है कि केवल लूपबैक Host हेडर स्वीकार किए जाएंगे।

डॉकर / रिवर्स प्रॉक्सी / सार्वजनिक डोमेन: वही नियम लागू होता है। डॉकर में, अनुरोध आमतौर पर कंटेनर के प्रकाशित होस्टनाम या प्रॉक्सी के 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

यह कमांड करेगा:

  1. package.json से manifest.json में संस्करण सिंक करें
  2. पुरानी .mcpb फ़ाइलें हटाएँ
  3. TypeScript प्रोजेक्ट बनाएँ
  4. dist/ और node_modules/ को एक .mcpb फ़ाइल में पैकेज करें
  5. devDependencies हटाने के लिए mcpb clean चलाएँ (बंडल को ~47MB से ~10MB तक अनुकूलित करता है)

आउटपुट फ़ाइल का नाम anki-mcp-server-X.X.X.mcpb होगा और इसे एक-क्लिक इंस्टॉलेशन के लिए वितरित किया जा सकता है।

क्या बंडल होता है

MCPB बंडल में शामिल हैं:

  • संकलित जावास्क्रिप्ट (dist/ निर्देशिका - सभी तीन प्रवेश बिंदु शामिल हैं)
  • केवल उत्पादन निर्भरताएँ (node_modules/ - mcpb clean द्वारा हटाए गए devDependencies)
  • पैकेज मेटाडेटा (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 लॉग

नोट: पिनो लॉगर आउटपुट (सर्वर कोड से INFO, ERROR, WARN संदेश) stderr पर जाता है और MCP-विशिष्ट लॉग फ़ाइलों में दिखाई देता है। Claude Desktop निर्धारित करता है कि कौन सी लॉग फ़ाइल कौन से संदेश प्राप्त करती है, लेकिन आम तौर पर:

  • एप्लिकेशन स्टार्टअप और MCP प्रोटोकॉल संचार → MCP-विशिष्ट लॉग
  • सर्वर आंतरिक लॉगिंग (पिनो) → 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 त्रुटियों से बचने के लिए "कनेक्शन प्रकार: प्रॉक्सी के माध्यम से" का उपयोग करें।

चरण 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
  1. Run → Edit Configurations पर जाएँ
  2. एक नया Attach to Node.js/Chrome कॉन्फ़िगरेशन जोड़ें
  3. पोर्ट को 9229 पर सेट करें
  4. संलग्न करने के लिए Debug पर क्लिक करें
VS Code
  1. डीबग पैनल खोलें (Ctrl+Shift+D / Cmd+Shift+D)
  2. Debug MCP Server (Attach) कॉन्फ़िगरेशन चुनें
  3. संलग्न करने के लिए F5 दबाएँ

चरण 4: ब्रेकप्वाइंट सेट करें और डीबग करें

एक बार संलग्न होने के बाद, आप यह कर सकते हैं:

  • अपनी TypeScript स्रोत फ़ाइलों में ब्रेकप्वाइंट सेट करें
  • कोड निष्पादन के माध्यम से कदम दर कदम आगे बढ़ें
  • चर और कॉल स्टैक का निरीक्षण करें
  • अभिव्यक्तियों के मूल्यांकन के लिए डीबग कंसोल का उपयोग करें

डीबगर स्रोत मानचित्रों के साथ काम करेगा, जिससे आप संकलित जावास्क्रिप्ट के बजाय मूल 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
  1. Run → Edit Configurations पर जाएँ
  2. + बटन पर क्लिक करें और Attach to Node.js/Chrome चुनें
  3. कॉन्फ़िगर करें:
    • नाम: Attach to Anki MCP (Claude Desktop)
    • होस्ट: localhost
    • पोर्ट: 9229
    • से संलग्न करें: Node.js < 8 या Chrome or Node.js > 6.3 (WebStorm संस्करण पर निर्भर करता है)
  4. OK पर क्लिक करें
  5. संलग्न करने के लिए Debug (Shift+F9) पर क्लिक करें
VS Code
  1. .vscode/launch.json में जोड़ें:
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach to Anki MCP (Claude Desktop)",
      "port": 9229,
      "skipFiles": ["<node_internals>/**"],
      "sourceMaps": true,
      "outFiles": ["${workspaceFolder}/dist/**/*.js"]
    }
  ]
}
  1. डीबग पैनल खोलें (Ctrl+Shift+D / Cmd+Shift+D)
  2. Attach to Anki MCP (Claude Desktop) चुनें
  3. संलग्न करने के लिए 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 फ्लैग), मीडिया फ़ाइल प्रबंधन, मॉडल/टेम्पलेट प्रबंधन और व्यापक डेक आँकड़े शामिल हैं। API प्रतिक्रिया और परीक्षण के आधार पर बदल सकते हैं।

MCPB स्पेक विकास

यह परियोजना एंथ्रोपिक के 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 एकीकरण बनाने या कार्यक्षमता का महत्वपूर्ण रूप से विस्तार करने की योजना के लिए एक ठोस आधार की आवश्यकता है, तो इस परियोजना का वास्तुशिल्प दृष्टिकोण समय के साथ रखरखाव और मापनीयता को आसान बनाता है।

उपयोगी लिंक

लाइसेंस और श्रेय

यह परियोजना 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 प्रौद्योगिकियों को जोड़ती है। सभी ट्रेडमार्क, सेवा चिह्न, व्यापार नाम, उत्पाद नाम और लोगो उनके संबंधित स्वामियों की संपत्ति हैं।