Kubadilisha zana ya wavuti kuwa seva ya MCP isiyo na utegemezi
Ninaendesha DomainIntel. Ni programu ndogo ya wavuti. Nilitaka kuibadilisha kuwa seva ya Model Context Protocol (MCP).
Nilitaka watumiaji watumie amri moja tu: npx -y @domainintel/mcp.
Hii inamaanisha urahisi wa hali ya juu. Hakuna kunakili (cloning) repos. Hakuna muda mrefu wa kusakinisha. Seva lazima ifanye kazi kama faili moja pekee bila utegemezi wowote wakati wa utendaji (runtime dependencies).
Hivi ndivyo nilivyojenga kwa kutumia esbuild.
Changamoto: Kufunga (Packaging)
Nilitumia esbuild kuunganisha (bundle) kila kitu. Ilibidi nitatue vikwazo kadhaa vya kiufundi:
• Static Imports: esbuild haiwezi kufuata wito wa require wakati wa utendaji. Nilibadilisha kutoka createRequire kwenda import za kawaida za ESM. Hii iliruhusu esbuild kufuata mchoro wa utegemezi (dependency graph).
• Uoanishaji wa CommonJS: Utegemezi mmoja ulitumia require('net') ndani yake. Niliongeza kichwa (banner) kwenye usanidi wa esbuild. Kichwa hiki huingiza createRequire ili shim ifanye kazi kwa moduli za ndani (built-in modules).
• Migongano ya Logger: MCP hutumia stdout kwa mawasiliano. Logger yangu iliyokuwepo ilijaribu kuandika kwenye foldia ya ndani. Hii inafeli kwenye CLI ya kimataifa. Nilitumia plugin ya onResolve ili kuweka stub kwa logger.
• Shebangs Mbili: Faili langu la kuingilia (entry file) na kichwa changu vyote vilikuwa na shebangs. Hii ilisababisha faili kutofanya kazi vizuri. Niliondoa shebang kutoka kwenye msimbo chanzo (source code).
• Aina za Moduli: Niliondoa "type": "module" kutoka kwenye package.json. Hii ilizuia esbuild isichukulie faili za CommonJS kama ESM. Faili la kuingilia la .mjs linabaki kuwa ESM kwa sababu ya kiambishi tamati (extension).
• Kufunga Toleo (Version Pinning): Utegemezi mmoja ulibadilika kwenda ESM na kuharibu ujenzi wangu. Nilifunga toleo ili kuwezesha ujenzi unaoweza kurudiwa (reproducible bundle).
Matokeo
Faili la mwisho ni mcp/dist/server.mjs. Ni takriban MB 1.7. Lina utegemezi sifuri wakati wa utendaji.
Unaweza kuiongeza kwenye Claude kwa:
claude mcp add domainintel -- npx -y @domainintel/mcp
Sasa wakala wako (agent) anaweza kuendesha "give me a full report on stripe.com" na kupata data papo hapo.
Ikiwa una zana yenye mantiki ya msingi (core logic), iweke ndani ya seva ya MCP. Hii inafanya zana yako iwe muhimu kwa wakala wa AI.
Chanzo: https://dev.to/chris_morris/turning-a-web-tool-into-a-zero-dependency-mcp-server-21ca
Jumuiya ya hiari ya kujifunza: https://t.me/GyaanSetuAi
