ఒక వెబ్ టూల్‌ను జీరో-డిపెండెన్సీ (zero-dependency) MCP సర్వర్‌గా మార్చడం

నేను DomainIntel నడుపుతున్నాను. ఇది ఒక చిన్న వెబ్ యాప్. దీనిని Model Context Protocol (MCP) సర్వర్‌గా మార్చాలని నేను అనుకున్నాను.

వినియోగదారులు కేవలం ఒకే ఒక్క కమాండ్ రన్ చేయాలని నేను కోరుకున్నాను: npx -y @domainintel/mcp.

దీనివల్ల ఎటువంటి ఇబ్బందులు ఉండవు. రిపోజిటరీలను క్లోన్ చేయాల్సిన అవసరం లేదు, ఇన్‌స్టాలేషన్ కోసం ఎక్కువ సమయం పట్టదు. సర్వర్ ఎటువంటి రన్‌టైమ్ డిపెండెన్సీలు లేకుండా ఒకే ఒక ఫైల్‌గా పనిచేయాలి.

esbuild ఉపయోగించి నేను దీనిని ఎలా నిర్మించానో ఇక్కడ ఉంది.

సవాలు: ప్యాకేజింగ్ (Packaging)

అన్నింటినీ బండిల్ చేయడానికి నేను esbuildని ఉపయోగించాను. నేను కొన్ని సాంకేతిక అడ్డంకులను అధిగమించాల్సి వచ్చింది:

Static Imports: esbuild రన్‌టైమ్ require కాల్స్‌ను అనుసరించలేదు. నేను createRequire నుండి స్టాండర్డ్ ESM ఇంపోర్ట్స్‌కు మారాను. దీనివల్ల esbuild డిపెండెన్సీ గ్రాఫ్‌ను అనుసరించగలిగింది.

CommonJS Compatibility: ఒక డిపెండెన్సీ అంతర్గతంగా require('net')ని ఉపయోగించింది. నేను esbuild కాన్ఫిగరేషన్‌లో ఒక bannerని జోడించాను. ఈ banner createRequireని ఇంజెక్ట్ చేస్తుంది, తద్వారా built-in మాడ్యూల్స్ కోసం shim పనిచేస్తుంది.

Logger Conflicts: కమ్యూనికేషన్ కోసం MCP stdoutని ఉపయోగిస్తుంది. నా పాత logger లోకల్ డైరెక్టరీలో రాయడానికి ప్రయత్నించింది. గ్లోబల్ CLIలో ఇది విఫలమవుతుంది. loggerని stub చేయడానికి నేను onResolve ప్లగిన్‌ను ఉపయోగించాను.

Double Shebangs: నా ఎంట్రీ ఫైల్ మరియు నా banner రెండింటిలోనూ shebangs ఉన్నాయి. దీనివల్ల ఇన్వాలిడ్ ఫైల్ ఏర్పడింది. నేను సోర్స్ కోడ్ నుండి 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 సర్వర్‌గా ప్యాక్ చేయండి. ఇది మీ టూల్‌ను 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