ஒரு வலை கருவியை (web tool) சார்புநிலை இல்லாத (zero-dependency) MCP சர்வராக மாற்றுதல்
நான் DomainIntel-ஐ நடத்துகிறேன். இது ஒரு சிறிய வலை செயலி (web app). இதை ஒரு Model Context Protocol (MCP) சர்வராக மாற்ற விரும்பினேன்.
பயனர்கள் ஒரே ஒரு கட்டளையை (command) இயக்க வேண்டும் என்று நான் விரும்பினேன்: npx -y @domainintel/mcp.
இதன் பொருள் எந்தத் தடங்கலும் (zero friction) இருக்காது. ரெப்போக்களை (repos) குளோன் செய்ய வேண்டியதில்லை. நீண்ட நிறுவல் நேரங்கள் இல்லை. சர்வர் எந்தவொரு runtime சார்புநிலைகளும் (dependencies) இல்லாமல் ஒரு ஒற்றை கோப்பாகச் செயல்பட வேண்டும்.
esbuild பயன்படுத்தி நான் இதை எவ்வாறு உருவாக்கினேன் என்பது இதோ.
சவால்: பேக்கேஜிங் (Packaging)
அனைத்தையும் ஒன்றாக இணைக்க (bundle) நான் esbuild-ஐப் பயன்படுத்தினேன். நான் பல தொழில்நுட்பத் தடைகளைத் தீர்க்க வேண்டியிருந்தது:
• Static Imports: esbuild-ஆல் runtime require அழைப்புகளைப் பின்தொடர முடியாது. நான் createRequire-லிருந்து நிலையான ESM இறக்குமதிகளுக்கு (imports) மாறினேன். இது esbuild-ஆல் சார்புநிலை வரைபடத்தைப் (dependency graph) பின்தொடர உதவியது.
• CommonJS Compatibility: ஒரு சார்புநிலை (dependency) உட்புறமாக require('net') என்பதைப் பயன்படுத்தியது. நான் esbuild உள்ளமைப்பில் (config) ஒரு banner-ஐச் சேர்த்தேன். இந்த banner createRequire-ஐச் செலுத்துகிறது (injects), இதனால் built-in தொகுதிகளுக்கான (modules) shim சரியாகச் செயல்படுகிறது.
• Logger Conflicts: MCP தொடர்பாடலுக்கு stdout-ஐப் பயன்படுத்துகிறது. எனது தற்போதைய logger ஒரு உள்ளூர் கோப்பகத்தில் (local directory) எழுத முயன்றது. இது ஒரு global CLI-இல் தோல்வியடையும். logger-ஐ stub செய்ய நான் an onResolve plugin-ஐப் பயன்படுத்தினேன்.
• Double Shebangs: எனது entry file மற்றும் எனது banner ஆகிய இரண்டிலும் shebangs இருந்தன. இது ஒரு தவறான கோப்பை உருவாக்கியது. நான் மூலக் குறியீட்டிலிருந்து (source code) shebang-ஐ நீக்கினேன்.
• Module Types: package.json-லிருந்து "type": "module"-ஐ நீக்கினேன். இது CommonJS கோப்புகளை ESM ஆக esbuild கருதுவதைத் தடுத்தது. .mjs entry file அதன் நீட்டிப்பு (extension) மூலம் ESM ஆகவே இருக்கும்.
• Version Pinning: ஒரு சார்புநிலை ESM-க்கு மாறியது எனது build-ஐப் பாதித்தது. bundle மீண்டும் உருவாக்கக்கூடியதாக (reproducible) இருக்க, நான் அதன் பதிப்பைப் (version) பின் (pin) செய்தேன்.
முடிவு
இறுதி கோப்பு mcp/dist/server.mjs ஆகும். இது சுமார் 1.7 MB அளவு கொண்டது. இதற்கு எந்த runtime சார்புநிலைகளும் இல்லை.
இதை நீங்கள் Claude-இல் இவ்வாறு சேர்க்கலாம்:
claude mcp add domainintel -- npx -y @domainintel/mcp
இப்போது உங்கள் ஏஜென்ட் (agent) "give me a full report on stripe.com" என்று இயக்கி உடனடித் தரவைப் பெற முடியும்.
உங்களிடம் ஒரு முக்கிய தர்க்கத்தைக் (core logic) கொண்ட கருவி இருந்தால், அதை ஒரு MCP சர்வராக மாற்றவும். இது உங்கள் கருவியை 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
