Menukarkan alat web kepada pelayan MCP tanpa kebergantungan (zero-dependency)
Saya mengendalikan DomainIntel. Ia adalah aplikasi web kecil. Saya mahu menukarkannya kepada pelayan Model Context Protocol (MCP).
Saya mahu pengguna hanya menjalankan satu arahan: npx -y @domainintel/mcp.
Ini bermakna tanpa sebarang geseran (zero friction). Tiada keperluan untuk mengklon repositori. Tiada masa pemasangan yang lama. Pelayan tersebut mestilah berfungsi sebagai satu fail tunggal tanpa sebarang kebergantungan masa larian (runtime dependencies).
Berikut adalah cara saya membinanya menggunakan esbuild.
Cabaran: Pembungkusan (Packaging)
Saya menggunakan esbuild untuk membungkus (bundle) segalanya. Saya perlu menyelesaikan beberapa halangan teknikal:
• Import Statik: esbuild tidak dapat mengikut panggilan require semasa masa larian. Saya beralih daripada createRequire kepada import ESM standard. Ini membolehkan esbuild mengikut graf kebergantungan.
• Keserasian CommonJS: Satu kebergantungan menggunakan require('net') secara dalaman. Saya menambah 'banner' dalam konfigurasi esbuild. Banner ini menyuntik createRequire supaya 'shim' berfungsi untuk modul terbina dalam.
• Konflik Logger: MCP menggunakan stdout untuk komunikasi. Logger sedia ada saya cuba menulis ke direktori tempatan. Ini akan gagal dalam CLI global. Saya menggunakan plugin onResolve untuk melakukan 'stub' pada logger tersebut.
• Shebang Berganda: Fail kemasukan dan banner saya kedua-duanya mempunyai shebang. Ini menghasilkan fail yang tidak sah. Saya telah membuang shebang daripada kod sumber.
• Jenis Modul: Saya membuang "type": "module" daripada package.json. Ini menghalang esbuild daripada melayan fail CommonJS sebagai ESM. Fail kemasukan .mjs kekal sebagai ESM melalui sambungan fail.
• Penetapan Versi (Version Pinning): Satu kebergantungan beralih kepada ESM dan merosakkan binaan (build) saya. Saya menetapkan versi tersebut untuk memastikan bundle tersebut boleh dihasilkan semula (reproducible).
Hasilnya
Fail akhir ialah mcp/dist/server.mjs. Saiznya kira-kira 1.7 MB. Ia mempunyai sifar kebergantungan masa larian.
Anda boleh menambahnya ke Claude dengan:
claude mcp add domainintel -- npx -y @domainintel/mcp
Kini ejen anda boleh menjalankan "give me a full report on stripe.com" dan mendapat data secara serta-merta.
Jika anda mempunyai alat dengan logik teras, bungkus ia sebagai pelayan MCP. Ini menjadikan alat anda berguna untuk ejen AI.
Sumber: https://dev.to/chris_morris/turning-a-web-tool-into-a-zero-dependency-mcp-server-21ca
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
