वेब टूलचे झिरो-डिपेंडन्सी MCP सर्व्हरमध्ये रूपांतर करणे

मी DomainIntel चालवतो. ते एक छोटे वेब ॲप आहे. मला त्याचे Model Context Protocol (MCP) सर्व्हरमध्ये रूपांतर करायचे होते.

मला वापरकर्त्यांनी फक्त एक कमांड चालवावी असे वाटत होते: npx -y @domainintel/mcp.

याचा अर्थ असा की कोणताही अडथळा नसेल. रिपॉझिटरी क्लोन करण्याची किंवा दीर्घ इन्स्टॉलेशन वेळेची गरज नाही. सर्व्हर कोणत्याही रनटाइम डिपेंडन्सीशिवाय (runtime dependencies) एका सिंगल फाईलप्रमाणे काम केला पाहिजे.

मी esbuild वापरून ते कसे तयार केले ते खाली दिले आहे.

आव्हान: पॅकेजिंग

मी सर्व काही बंडल करण्यासाठी esbuild वापरले. मला अनेक तांत्रिक अडथळे दूर करावे लागले:

Static Imports: esbuild रनटाइम require कॉल्स फॉलो करू शकत नाही. मी createRequire ऐवजी स्टँडर्ड ESM imports वापरण्यास सुरुवात केली. यामुळे esbuild ला डिपेंडन्सी ग्राफ फॉलो करणे शक्य झाले.

CommonJS Compatibility: एका डिपेंडन्सीमध्ये अंतर्गतरीत्या require('net') वापरले जात होते. मी esbuild कॉन्फिगरेशनमध्ये एक 'banner' जोडला. हा बॅनर createRequire इंजेक्ट करतो जेणेकरून बिल्ट-इन मॉड्यूल्ससाठी 'shim' काम करेल.

Logger Conflicts: MCP संवादासाठी stdout वापरते. माझा सध्याचा logger स्थानिक डिरेक्टरीमध्ये लिहिण्याचा प्रयत्न करत होता. ग्लोबल CLI मध्ये हे अयशस्वी होते. मी logger ला stub करण्यासाठी onResolve प्लगइनचा वापर केला.

Double Shebangs: माझ्या एंट्री फाईलमध्ये आणि बॅनरमध्ये दोन्ही ठिकाणी shebangs होते. यामुळे एक अवैध (invalid) फाईल तयार होत होती. मी सोर्स कोडमधून shebang काढून टाकला.

Module Types: मी package.json मधून "type": "module" काढून टाकले. यामुळे esbuild ने CommonJS फाईल्सना ESM म्हणून ट्रीट करणे थांबवले. .mjs एंट्री फाईल त्याच्या एक्सटेंशनमुळे ESM राहते.

Version Pinning: एका डिपेंडन्सीने ESM मध्ये स्विच केल्यामुळे माझे बिल्ड बिघडले. बंडल रिप्रॉड्युसिबल (reproducible) ठेवण्यासाठी मी ती व्हर्जन 'pin' केली.

निकाल

अंतिम फाईल mcp/dist/server.mjs ही आहे. ती सुमारे 1.7 MB ची आहे. तिला शून्य रनटाइम डिपेंडन्सीज आहेत.

तुम्ही ते Claude मध्ये खालीलप्रमाणे जोडू शकता: claude mcp add domainintel -- npx -y @domainintel/mcp

आता तुमचा एजंट "give me a full report on stripe.com" ही कमांड चालवून त्वरित डेटा मिळवू शकतो.

जर तुमच्याकडे कोअर लॉजिक असलेले एखादे टूल असेल, तर त्याला MCP सर्व्हर म्हणून रॅप (wrap) करा. यामुळे तुमचे टूल AI एजंट्ससाठी उपयुक्त ठरेल.

Source: https://dev.to/chris_morris/turning-a-web-tool-into-a-zero-dependency-mcp-server-21ca

Optional learning community: https://t.me/GyaanSetuAi