Trasformare un web tool in un server MCP senza dipendenze
Gestisco DomainIntel. È una piccola web app. Volevo trasformarla in un server Model Context Protocol (MCP).
Volevo che gli utenti potessero eseguire un unico comando: npx -y @domainintel/mcp.
Questo significa zero attrito. Nessun clone di repository. Nessun tempo di installazione prolungato. Il server deve funzionare come un singolo file senza dipendenze di runtime.
Ecco come l'ho costruito usando esbuild.
La sfida: il packaging
Ho usato esbuild per fare il bundle di tutto. Ho dovuto superare diverse difficoltà tecniche:
• Static Imports: esbuild non può seguire le chiamate require a runtime. Sono passato da createRequire agli import ESM standard. Questo ha permesso a esbuild di seguire il grafo delle dipendenze.
• CommonJS Compatibility: una dipendenza utilizzava require('net') internamente. Ho aggiunto un banner nella configurazione di esbuild. Questo banner inietta createRequire in modo che lo shim funzioni per i moduli integrati.
• Logger Conflicts: MCP utilizza stdout per la comunicazione. Il mio logger esistente cercava di scrivere in una directory locale. Questo fallisce in una CLI globale. Ho usato un plugin onResolve per creare uno stub del logger.
• Double Shebangs: sia il mio file di entry che il mio banner contenevano degli shebang. Questo creava un file non valido. Ho rimosso lo shebang dal codice sorgente.
• Module Types: ho rimosso "type": "module" dal package.json. Questo ha impedito a esbuild di trattare i file CommonJS come ESM. Il file di entry .mjs rimane ESM per estensione.
• Version Pinning: una dipendenza è passata a ESM e ha interrotto la mia build. Ho bloccato la versione per mantenere il bundle riproducibile.
Il risultato
Il file finale è mcp/dist/server.mjs. È di circa 1,7 MB. Non ha dipendenze di runtime.
Puoi aggiungerlo a Claude con: claude mcp add domainintel -- npx -y @domainintel/mcp
Ora il tuo agente può eseguire "dammi un report completo su stripe.com" e ottenere dati istantanei.
Se hai uno strumento con una logica principale, avvolgilo come server MCP. Lo renderà utile per gli agenti AI.
Source: https://dev.to/chris_morris/turning-a-web-tool-into-a-zero-dependency-mcp-server-21ca
Optional learning community: https://t.me/GyaanSetu
