{"_id":"@cenzontle/hilo-mcp","_rev":"3-828433d0cd0a16ddf92bca040d1f9b73","name":"@cenzontle/hilo-mcp","dist-tags":{"latest":"0.2.2"},"versions":{"0.2.0":{"name":"@cenzontle/hilo-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","whatsapp","hilo","messaging"],"license":"MIT","_id":"@cenzontle/hilo-mcp@0.2.0","maintainers":[{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"}],"homepage":"https://github.com/cnzontle/hilo-mcp#readme","bugs":{"url":"https://github.com/cnzontle/hilo-mcp/issues"},"bin":{"hilo-mcp":"dist/index.js"},"dist":{"shasum":"c5e42102da8a8211574bb48bd43d4241c1e1451b","tarball":"https://registry.npmjs.org/@cenzontle/hilo-mcp/-/hilo-mcp-0.2.0.tgz","fileCount":33,"integrity":"sha512-2t+8Y3HVH/u9tqFVaKbKLxhi1Hts2VhR0X/FXJPmVIOyv8vpX0SmLAqLgx2vN4TFYQS0SRSqo9rhXfR//y2VMw==","signatures":[{"sig":"MEYCIQDJ2ip0D5rTbhmzWpuOvFzt+jLcdTfcmCAg6y3TVnrOYgIhAO4nD0k+elYhpPdRTk+aC8bvZZ11+5UYPHTqhxYlfaQm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89687},"main":"dist/index.js","type":"module","_from":"file:cenzontle-hilo-mcp-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"},"_resolved":"/private/var/folders/f6/v7nnm7m57js4k88mdhp6pr_00000gn/T/13f766f13364c99ac9714030c4ce6483/cenzontle-hilo-mcp-0.2.0.tgz","_integrity":"sha512-2t+8Y3HVH/u9tqFVaKbKLxhi1Hts2VhR0X/FXJPmVIOyv8vpX0SmLAqLgx2vN4TFYQS0SRSqo9rhXfR//y2VMw==","repository":{"url":"git+https://github.com/cnzontle/hilo-mcp.git","type":"git"},"_npmVersion":"11.2.0","description":"Servidor MCP que acompaña la integración con Hilo: contrato de la API, validación de payloads, verificación de webhooks y pruebas contra sandbox.","directories":{},"_nodeVersion":"23.9.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/hilo-mcp_0.2.0_1785350190939_0.7982110454535991","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cenzontle/hilo-mcp","version":"0.2.1","keywords":["mcp","model-context-protocol","whatsapp","hilo","messaging"],"license":"MIT","_id":"@cenzontle/hilo-mcp@0.2.1","maintainers":[{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"}],"homepage":"https://github.com/cnzontle/hilo-mcp#readme","bugs":{"url":"https://github.com/cnzontle/hilo-mcp/issues"},"bin":{"hilo-mcp":"dist/index.js"},"dist":{"shasum":"be2d60334e3410851f979ace60b937d8d6c337bd","tarball":"https://registry.npmjs.org/@cenzontle/hilo-mcp/-/hilo-mcp-0.2.1.tgz","fileCount":33,"integrity":"sha512-/1QywId/dMZoLYTIX9ewNYqszSR+7C+g+gXm2gBiGv8kBq3J1+Hwt/fP1kguDkS67ey+6Z1pgFPcz+zbXlGr8w==","signatures":[{"sig":"MEUCIQDDUs9OxSd9XL7v5iUPtrijGA00glaT52dfXmO0Fd+nKQIgedYqFxZOIbBgs7EVlgrY09/OHFAJsdzRsUXpYtbxb64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90243},"main":"dist/index.js","type":"module","_from":"file:cenzontle-hilo-mcp-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"},"_resolved":"/private/var/folders/f6/v7nnm7m57js4k88mdhp6pr_00000gn/T/de45dacdfb21b0e773b0ac4660475ce2/cenzontle-hilo-mcp-0.2.1.tgz","_integrity":"sha512-/1QywId/dMZoLYTIX9ewNYqszSR+7C+g+gXm2gBiGv8kBq3J1+Hwt/fP1kguDkS67ey+6Z1pgFPcz+zbXlGr8w==","repository":{"url":"git+https://github.com/cnzontle/hilo-mcp.git","type":"git"},"_npmVersion":"11.2.0","description":"Servidor MCP que acompaña la integración con Hilo: contrato de la API, validación de payloads, verificación de webhooks y pruebas contra sandbox.","directories":{},"_nodeVersion":"23.9.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.20.1"},"_npmOperationalInternal":{"tmp":"tmp/hilo-mcp_0.2.1_1785353838533_0.5387938573512223","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cenzontle/hilo-mcp","version":"0.2.2","description":"Servidor MCP que acompaña la integración con Hilo: contrato de la API, validación de payloads, verificación de webhooks y pruebas contra sandbox.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/cnzontle/hilo-mcp.git"},"homepage":"https://github.com/cnzontle/hilo-mcp#readme","bugs":{"url":"https://github.com/cnzontle/hilo-mcp/issues"},"publishConfig":{"access":"public"},"type":"module","bin":{"hilo-mcp":"dist/index.js"},"main":"dist/index.js","engines":{"node":">=20"},"keywords":["mcp","model-context-protocol","whatsapp","hilo","messaging"],"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","zod":"^4.4.3"},"devDependencies":{"@types/node":"^22.20.1","typescript":"^5.9.3","vitest":"^2.1.9"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","typecheck":"tsc --noEmit"},"_id":"@cenzontle/hilo-mcp@0.2.2","types":"./dist/index.d.ts","_integrity":"sha512-45fymS8hwpaKipu3lvWv8TpDE/R8PlJ5zSAK1DymsPDy25nWAaFqPGsGdS6mpGsbkriUMHJ4Mqdgdas+G3MS3A==","_resolved":"/private/var/folders/f6/v7nnm7m57js4k88mdhp6pr_00000gn/T/e424f25bc353e58c952f52be0be45fa3/cenzontle-hilo-mcp-0.2.2.tgz","_from":"file:cenzontle-hilo-mcp-0.2.2.tgz","_nodeVersion":"23.9.0","_npmVersion":"11.2.0","dist":{"integrity":"sha512-45fymS8hwpaKipu3lvWv8TpDE/R8PlJ5zSAK1DymsPDy25nWAaFqPGsGdS6mpGsbkriUMHJ4Mqdgdas+G3MS3A==","shasum":"d6c8f672644a80ba767ed99590e2ad727eff212c","tarball":"https://registry.npmjs.org/@cenzontle/hilo-mcp/-/hilo-mcp-0.2.2.tgz","fileCount":33,"unpackedSize":90701,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC66itAvMT4XGb8R6KLyZDzFfB6BzecoVALKOIkJjSiTAiA8L1Z8/3Wh/ZNMq8ZBtJEKGLGMSennwJJHQBAw2WkpvQ=="}]},"_npmUser":{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"},"directories":{},"maintainers":[{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hilo-mcp_0.2.2_1785353979634_0.01617465585404121"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-29T18:36:30.735Z","modified":"2026-07-29T19:39:39.941Z","0.2.0":"2026-07-29T18:36:31.077Z","0.2.1":"2026-07-29T19:37:18.708Z","0.2.2":"2026-07-29T19:39:39.786Z"},"bugs":{"url":"https://github.com/cnzontle/hilo-mcp/issues"},"license":"MIT","homepage":"https://github.com/cnzontle/hilo-mcp#readme","keywords":["mcp","model-context-protocol","whatsapp","hilo","messaging"],"repository":{"type":"git","url":"git+https://github.com/cnzontle/hilo-mcp.git"},"description":"Servidor MCP que acompaña la integración con Hilo: contrato de la API, validación de payloads, verificación de webhooks y pruebas contra sandbox.","maintainers":[{"name":"cenzontle","email":"eliud.trejo@cenzontle.cloud"}],"readme":"# Hilo MCP\n\nServidor [MCP](https://modelcontextprotocol.io) para integrarse con **Hilo**, la plataforma de mensajería por WhatsApp de Cenzontle.\n\nSu objetivo es **acompañar a tu agente mientras construye la integración**: le da el contrato real de la API, herramientas para verificar su propio trabajo y un plan a seguir. Le dices «créame la integración con Hilo» y se pone a construirlo.\n\n> **Opera en sandbox por defecto.** Con una key de pruebas (`hilo_sbx_…`) los envíos no se cobran y solo llegan al número autorizado. Para operar en producción hace falta un opt-in explícito — ver [Producción](#producción).\n\n## Instalar en un comando\n\n**Claude Code:**\n\n```bash\nclaude mcp add hilo -e HILO_API_KEY=hilo_sbx_TU_KEY -- npx -y @cenzontle/hilo-mcp\n```\n\nDespués **reinicia Claude Code** (los servidores MCP se cargan al arrancar) y pide:\n\n> Créame la integración con Hilo.\n\n¿Aún no tienes la key? Instálalo igual, sin `-e`: el servidor arranca de todos modos, el agente puede leer el contrato de la API e ir escribiendo el código, y `hilo_diagnose` te dirá exactamente qué pedirle al operador de Hilo.\n\n## Requisitos\n\n- Node 20 o superior.\n- Una **API key de sandbox** (`hilo_sbx_…`). No hay registro en autoservicio: el operador de Hilo crea la cuenta y la entrega.\n\nEl servidor **arranca sin key**: el agente puede leer el contrato y avanzar en el código mientras la consigues, y te dirá exactamente qué pedir.\n\n## Instalación manual\n\nSi prefieres versionar la configuración con tu proyecto en vez de usar el comando de arriba. No necesitas instalar nada: `npx` descarga el paquete al vuelo.\n\n**Claude Code** (`.mcp.json` del proyecto, o `~/.claude.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"hilo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cenzontle/hilo-mcp\"],\n      \"env\": { \"HILO_API_KEY\": \"hilo_sbx_tu_key_aqui\" }\n    }\n  }\n}\n```\n\n**Claude Desktop** (`claude_desktop_config.json`): mismo bloque.\n\nReinicia el cliente. Deberías ver las herramientas `hilo_*`, los recursos `hilo://` y el prompt `integrar_con_hilo`.\n\n### Variables de entorno\n\n| Variable | Requerida | Default | Para qué |\n|---|---|---|---|\n| `HILO_API_KEY` | No (recomendada) | — | Tu API key. `hilo_sbx_…` de pruebas, `hilo_…` productiva. Sin ella el servidor arranca en modo sin credencial. |\n| `HILO_ALLOW_PRODUCTION` | Solo en producción | `false` | Debe ser `true` para aceptar una key productiva. |\n| `HILO_BASE_URL` | No | `https://api.hilo.cenzontle.cloud` | Solo para apuntar a otro entorno. Debe ser HTTPS (se acepta `http://localhost` para desarrollo). |\n| `HILO_TIMEOUT_MS` | No | `30000` | Timeout por request. |\n\n## Qué hace\n\nLe da al agente **el contrato de la API, herramientas para verificar su propio trabajo y un plan**. La idea es que puedas decir *\"créame la integración con Hilo\"* y no tener que supervisarlo.\n\n### El plan\n\nEl prompt **`integrar_con_hilo`** le da al agente el orden completo: credencial → plantillas reales → diseño → implementación → verificación → cierre. En Claude Code aparece como `/hilo:integrar_con_hilo`, o simplemente pídeselo en tus palabras.\n\n### El contrato (recursos)\n\n| Recurso | Contenido |\n|---|---|\n| `hilo://api/reference` | Endpoints, cuerpos, respuestas, estados y errores |\n| `hilo://api/webhook` | Firma HMAC, ejemplos en Node y Python, reglas de operación |\n| `hilo://integration/guide` | Orden recomendado y los errores que se repiten |\n\nSe leen **sin API key**: el agente puede avanzar en el código mientras consigues la credencial.\n\n### Verificación (no necesitan key)\n\n| Herramienta | Para qué |\n|---|---|\n| `hilo_diagnose` | Estado de la integración y siguiente paso concreto |\n| `hilo_webhook_sample` | Evento firmado real para probar **tu** handler sin exponer nada |\n| `hilo_verify_webhook_signature` | Depura por qué tu handler rechaza eventos legítimos |\n| `hilo_check_webhook_endpoint` | Revisa si tu URL sirve (HTTPS, host público) |\n\n### Contra tu cuenta\n\n| Herramienta | Para qué | Costo |\n|---|---|---|\n| `hilo_list_templates` / `hilo_get_template` | Qué plantillas existen y qué variables esperan | — |\n| `hilo_validate_send` / `hilo_validate_broadcast` | Valida el payload contra la plantilla real, **sin enviar** | — |\n| `hilo_get_usage` | Saldo y consumo | — |\n| `hilo_get_message` / `hilo_list_messages` | Estados de entrega | — |\n| `hilo_get_broadcast` / `hilo_list_broadcasts` | Avance de un envío masivo | — |\n| `hilo_send_message` | Envío real de prueba | 1 crédito |\n| `hilo_send_broadcast` | Envío masivo (solo producción) | 1 por destinatario |\n\nLos envíos van marcados como destructivos: tu cliente MCP debería pedirte confirmación.\n\nDar de alta plantillas **no** está incluido: se crean en la cuenta real de WhatsApp, las revisa Meta y no tienen ambiente de pruebas. Coordínalas con el operador.\n\n## Cómo se usa\n\nInstálalo, ábrelo en tu proyecto y pide la integración:\n\n> «Créame la integración con Hilo.»\n\nEl agente lee el contrato, corre `hilo_diagnose`, y si no hay credencial te dice exactamente qué pedirle al operador. Con la key de sandbox puesta, implementa el cliente, el envío y el handler del webhook, y **verifica su propio trabajo**: valida payloads contra las plantillas reales, manda un mensaje de prueba al número autorizado y comprueba que tu handler acepta un evento firmado y rechaza uno falso.\n\nTambién sirve suelto:\n\n> «¿Por qué mi webhook rechaza los eventos de Hilo?»\n> «Valida este broadcast antes de que lo mande.»\n> «¿Cómo va el broadcast de la boda de Ana?»\n\n## Sandbox\n\nEs el modo por defecto. Con una key `hilo_sbx_…`:\n\n- Los envíos **no se cobran**.\n- Solo llegan al **número de prueba** que el operador autorizó.\n- Hay un **tope de mensajes** por cuenta.\n- `hilo_send_broadcast` está deshabilitado — usa `hilo_send_message` para probar.\n\nTodo lo demás —consultar plantillas, estados, broadcasts y saldo— funciona igual que en producción.\n\n## Producción\n\nCuando el operador te entregue tu key productiva, cambia dos cosas en la configuración:\n\n```json\n\"env\": {\n  \"HILO_API_KEY\": \"hilo_tu_key_productiva\",\n  \"HILO_ALLOW_PRODUCTION\": \"true\"\n}\n```\n\nLas herramientas son **exactamente las mismas**: lo que construiste y probaste en sandbox sigue funcionando sin tocar una línea. Lo que cambia es que los envíos son reales, se cobran, llegan a cualquier número y se habilita `hilo_send_broadcast`.\n\nEl opt-in existe a propósito: sin él, instalar este servidor nunca puede provocar un envío real por accidente.\n\n## Desarrollo\n\n```bash\npnpm install\npnpm test         # 43 tests, sin red\npnpm typecheck\npnpm build\n```\n\nPara probar contra un Hilo local:\n\n```bash\nHILO_API_KEY=hilo_sbx_dev HILO_BASE_URL=http://localhost:3000 node dist/index.js\n```\n\n### Estructura\n\n```\nsrc/\n  config.ts          Lectura y validación del entorno\n  client.ts          Cliente HTTP de la API v1 (único punto que hace fetch)\n  server.ts          Registra recursos, prompt y herramientas\n  index.ts           Entrypoint stdio\n  reference/         Contrato y guías que se sirven como recursos MCP\n  tools/             Una familia de herramientas por archivo\n```\n\nLa lógica de herramientas no conoce el transporte, así que añadir un entrypoint HTTP remoto más adelante no obliga a tocarlas.\n\n## Licencia\n\nMIT\n","readmeFilename":"README.md"}