Een webtool omzetten in een MCP-server zonder afhankelijkheden
Ik beheer DomainIntel. Het is een kleine web-app. Ik wilde het omzetten naar een Model Context Protocol (MCP) server.
Ik wilde dat gebruikers slechts één commando hoefden uit te voeren: npx -y @domainintel/mcp.
Dit betekent minimale frictie. Geen repos klonen. Geen lange installatietijden. De server moet werken als een enkel bestand zonder runtime-afhankelijkheden.
Hier lees je hoe ik dit heb gebouwd met esbuild.
De uitdaging: Verpakken
Ik heb esbuild gebruikt om alles te bundelen. Ik moest verschillende technische hindernissen overwinnen:
• Static Imports: esbuild kan geen runtime require-aanroepen volgen. Ik ben overgestapt van createRequire naar standaard ESM-imports. Hierdoor kon esbuild de dependency graph volgen.
• CommonJS Compatibility: Eén afhankelijkheid gebruikte intern require('net'). Ik heb een banner toegevoegd aan de esbuild-configuratie. Deze banner injecteert createRequire, zodat de shim werkt voor ingebouwde modules.
• Logger Conflicts: MCP gebruikt stdout voor communicatie. Mijn bestaande logger probeerde naar een lokale directory te schrijven. Dit mislukt in een globale CLI. Ik heb een onResolve-plugin gebruikt om de logger te stubben.
• Double Shebangs: Zowel mijn entry-bestand als mijn banner bevatten shebangs. Dit resulteerde in een ongeldig bestand. Ik heb de shebang uit de broncode verwijderd.
• Module Types: Ik heb "type": "module" verwijderd uit de package.json. Hierdoor behandelt esbuild CommonJS-bestanden niet langer als ESM. Het .mjs entry-bestand blijft via de extensie ESM.
• Version Pinning: Een afhankelijkheid is overgestapt naar ESM en verbrak mijn build. Ik heb de versie vastgelegd om de bundle reproduceerbaar te houden.
Het resultaat
Het uiteindelijke bestand is mcp/dist/server.mjs. Het is ongeveer 1,7 MB groot. Het heeft nul runtime-afhankelijkheden.
Je kunt het toevoegen aan Claude met:
claude mcp add domainintel -- npx -y @domainintel/mcp
Nu kan je agent "give me a full report on stripe.com" uitvoeren en direct data ontvangen.
Als je een tool hebt met kernlogica, wikkel deze dan in een MCP-server. Dit maakt je tool bruikbaar voor AI-agents.
Bron: https://dev.to/chris_morris/turning-a-web-tool-into-a-zero-dependency-mcp-server-21ca
Optionele leercommunity: https://t.me/GyaanSetuAi
