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