neto-whatsappmcp
Allows sending WhatsApp text messages and document attachments, listing WhatsApp groups, and checking the WhatsApp connection status through an Evolution API backend.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@neto-whatsappmcpsend my team a WhatsApp saying the deployment finished successfully"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
neto-whatsappmcp: avisos por WhatsApp desde tu asistente de IA
Con este proyecto, tu asistente de IA (Claude, Gemini o Codex) puede mandarte un mensaje de WhatsApp. Por ejemplo, cuando termina una tarea larga, cuando necesita que tomes una decisión o cuando algo falla. También puede avisar a tu equipo, mandar un reporte como archivo adjunto y listar tus grupos.
No necesitas saber programar: esta guía te lleva de cero hasta tu primer mensaje, paso a paso. Si sabes usar una terminal (la ventana negra donde se escriben comandos), puedes hacerlo.
Índice
Related MCP server: Evolution API MCP Server
1. ¿Cómo funciona? (con analogías)
Hay tres piezas que trabajan en cadena:
Tu asistente de IA ---> MCP (este proyecto) ---> Evolution API ---> WhatsApp
(el cliente) puerto 8787 puerto 8080Piensa en un restaurante: tu asistente es el cliente que pide, el MCP es el mesero que entiende el pedido y lo traduce, y Evolution es la cocina que sabe hablar con WhatsApp.
Palabra | Qué significa, sin tecnicismos |
Docker | Una "caja cerrada" donde un programa corre con todo lo que necesita. No instalas el programa en tu computadora: Docker lo ejecuta dentro de su caja y, si lo borras, no deja basura. |
Docker Compose | La "receta" (un archivo) que le dice a Docker qué cajas levantar y cómo conectarlas. En este proyecto hay dos recetas, explicadas abajo. |
API key | Una contraseña larga para programas. Evolution solo atiende a quien le muestra esa clave. La inventas tú (sección 4). |
MCP | Un "enchufe estándar" que permite a un asistente de IA usar herramientas externas. Este MCP le da cuatro herramientas: enviar texto, enviar documento, listar grupos y ver el estado de la conexión. |
Evolution API | Un programa gratuito que se conecta a tu WhatsApp (como lo hace WhatsApp Web) y permite que otros programas manden mensajes por él. |
Instancia | Una "línea de WhatsApp" dentro de Evolution. Cada instancia está vinculada a un teléfono. Tú creas una y le pones nombre. |
QR | El cuadro de puntitos que escaneas con tu celular para vincular WhatsApp, igual que cuando abres WhatsApp Web en una computadora. |
Postgres y Redis | La "libreta" (base de datos) y la "memoria rápida" que usa Evolution. Se instalan solos dentro de Docker; no tienes que tocarlos. |
Por qué hay dos archivos compose
Archivo | Qué levanta |
| Evolution + su base de datos (Postgres) + Redis. Es "la cocina". |
| Solo el servidor MCP de este proyecto. Es "el mesero". |
Si ya tienes tu propio Evolution funcionando, no necesitas el primer archivo: solo apunta EVOLUTION_BASE_URL a tu Evolution. Ojo: docker compose up -d (sin -f) levanta solo el MCP. Para Evolution siempre escribes -f docker-compose.evolution.yml.
2. Qué necesitas instalar
Docker Desktop (Windows o Mac) o Docker Engine con el plugin Compose (Linux): https://www.docker.com/products/docker-desktop/ . Después de instalarlo, ábrelo y espera a que diga que está funcionando.
Git, para descargar el proyecto: https://git-scm.com/downloads
Al menos un asistente de IA que soporte MCP:
Claude Code (terminal o extensión de VS Code) o Claude Desktop
Gemini CLI
Codex CLI
Un teléfono con WhatsApp (el que vas a vincular).
Node 24: solo si vas a desarrollar el proyecto o a usar los hooks de Claude Code (sección 9). Para lo demás no hace falta.
Los comandos de esta guía se escriben en una terminal: en Windows usa PowerShell; en Mac o Linux usa la Terminal. Cuando un comando cambia según el sistema, se muestran los dos.
3. Paso a paso: de cero al primer mensaje
Paso 1. Descargar el proyecto
git clone https://github.com/wlnaim/neto-whatsappmcp.git
cd neto-whatsappmcpTodo lo que sigue se escribe dentro de la carpeta neto-whatsappmcp.
Paso 2. Crear tu archivo .env
El archivo .env guarda tus claves y ajustes. Es tuyo y nunca se sube a GitHub. Se crea copiando la plantilla:
# Windows (PowerShell)
Copy-Item .env.example .env# Mac / Linux
cp .env.example .envPaso 3. Inventar tu API key y tu contraseña de base de datos
Necesitas dos textos largos y aleatorios. Genéralos con estos comandos (cada vez que lo ejecutas sale uno distinto):
# Windows (PowerShell): API key
$b = New-Object byte[] 32; (New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($b); -join ($b | ForEach-Object { $_.ToString('x2') })Ejecútalo otra vez para obtener la contraseña de la base de datos (es otro texto distinto).
# Mac / Linux
openssl rand -hex 32 # API key
openssl rand -hex 16 # contraseña de la base de datosAhora abre el archivo .env con un editor de texto (notepad .env en Windows, nano .env en Mac/Linux) y reemplaza los textos de ejemplo:
EVOLUTION_API_KEY=pega-aquí-el-primer-texto
EVOLUTION_DB_PASSWORD=pega-aquí-el-segundo-textoReglas: sin comillas, sin espacios alrededor del = y, en la contraseña, solo letras y números (los textos que generaste ya cumplen esto).
Paso 4. Levantar Evolution
Asegúrate de que Docker Desktop esté abierto y ejecuta:
docker compose -f docker-compose.evolution.yml up -dLa primera vez descarga varios archivos y puede tardar unos minutos. Para comprobar que funciona, abre en tu navegador http://localhost:8080 . Debe aparecer un mensaje parecido a este (en inglés) con el número de versión:
{"status":200,"message":"Welcome to the Evolution API, it is working!","version":"2.3.7", ...}Si no abre, espera medio minuto y recarga.
Paso 5. Crear la instancia y vincular tu WhatsApp (el QR)
Abre el panel de Evolution: http://localhost:8080/manager/ (viene incluido; no hay que instalar nada más).
Para entrar te pide la URL del servidor (
http://localhost:8080) y la API key (la que pusiste enEVOLUTION_API_KEY). Los nombres exactos de los campos pueden variar un poco.Crea una instancia nueva: ponle un nombre sencillo, por ejemplo
mi-whatsapp(solo letras, números y guiones), y como tipo de conexión elige WHATSAPP-BAILEYS.El panel muestra un código QR. En tu celular abre WhatsApp, entra a Configuración (o Ajustes) > Dispositivos vinculados > Vincular un dispositivo y escanea el QR. Si el QR caduca, genera otro desde el panel.
Cuando el panel marque la instancia como conectada (estado
open), listo.
Los nombres exactos de los botones del panel pueden cambiar entre versiones y no se verificaron uno por uno (sin verificar). Lo importante es: crear la instancia, ver el QR y escanearlo.
Alternativa sin panel (para quien prefiera la terminal). Reemplaza TU_API_KEY por tu clave:
curl.exe -X POST http://localhost:8080/instance/create -H "apikey: TU_API_KEY" -H "Content-Type: application/json" -d "{\"instanceName\":\"mi-whatsapp\",\"qrcode\":true,\"integration\":\"WHATSAPP-BAILEYS\"}"(En Mac/Linux usa curl y comillas simples alrededor del JSON: -d '{"instanceName":"mi-whatsapp","qrcode":true,"integration":"WHATSAPP-BAILEYS"}'.) La respuesta incluye el QR en formato base64, que es más cómodo de ver en el panel.
Para comprobar el estado de la conexión: curl.exe -H "apikey: TU_API_KEY" http://localhost:8080/instance/connectionState/mi-whatsapp (verás "state":"open" cuando esté conectada).
Paso 6. Decirle al MCP cuál es tu instancia y tu número
Abre .env otra vez y completa:
EVOLUTION_INSTANCE=mi-whatsapp
WHATSAPP_ME=52XXXXXXXXXX
WHATSAPP_TEAM=EVOLUTION_INSTANCE: el nombre exacto que le pusiste a la instancia.WHATSAPP_ME: tu número con código de país y solo dígitos: sin+, sin espacios, sin guiones. Ejemplo ficticio de México:52XXXXXXXXXX(52 = código de país, seguido de tu número). El mensaje te llegará a ti mismo, en el chat "Tú".WHATSAPP_TEAM: déjalo vacío (como arriba) si no vas a usar grupos. Más adelante se explica cómo llenarlo.
Deja EVOLUTION_BASE_URL=http://localhost:8080 como está.
Paso 7. Construir y levantar el MCP
docker compose up -d --buildLa primera vez construye la imagen whatsapp-mcp (unos minutos). Comprueba que está vivo:
# Windows (PowerShell)
curl.exe http://127.0.0.1:8787/healthz# Mac / Linux
curl http://127.0.0.1:8787/healthzDebe responder ok. (También puedes abrir esa dirección en el navegador.)
Paso 8. Mandar tu primer mensaje de prueba
Sin usar todavía ningún asistente, prueba el envío con la herramienta de línea de comandos del proyecto, que corre dentro de Docker:
docker run --rm --env-file .env --entrypoint node whatsapp-mcp dist/cli.js send --to me "Hola desde mi MCP"Debe imprimir una línea como ✔ 52XXXXXXXXXX enviado y el mensaje llega a tu WhatsApp. Si dice error, ve a la sección 11.
(Si tienes Node 24, también puedes usar npm ci, npm run build y node dist/cli.js send ..., pero entonces las variables del .env deben estar cargadas en tu terminal: Node no lee el .env por sí solo.)
Paso 9. Conectar tu asistente
Sigue la sección 7 con el asistente que uses y pídele: "Avísame por WhatsApp que ya quedó todo listo".
Cómo apagar o encender todo
docker compose down # apaga el MCP
docker compose -f docker-compose.evolution.yml down # apaga Evolution (conserva tu WhatsApp vinculado)
docker compose up -d # enciende el MCP
docker compose -f docker-compose.evolution.yml up -d # enciende EvolutionNo uses down -v en Evolution: el -v borra los datos (y tendrías que escanear el QR otra vez). Los contenedores arrancan solos cuando Docker Desktop se inicia (restart: unless-stopped).
4. Personalizar tu API key de Evolution
Qué es: la contraseña con la que programas (como este MCP) piden cosas a Evolution. Quien tenga tu API key puede mandar mensajes desde tu WhatsApp, así que debe ser larga, aleatoria y secreta.
La inventas tú. En este proyecto no existe una clave "oficial" ni por defecto: Evolution no arranca si EVOLUTION_API_KEY está vacía (el compose muestra un mensaje de error en español). Así nadie usa por accidente una clave conocida.
Cómo generar una buena (solo letras y números, 64 caracteres):
# Windows (PowerShell, versión 5.1 o superior)
$b = New-Object byte[] 32; (New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($b); -join ($b | ForEach-Object { $_.ToString('x2') })# Mac / Linux
openssl rand -hex 32Dónde se escribe: en un solo lugar, el archivo .env, en la variable EVOLUTION_API_KEY. La misma clave la usan Evolution (para exigirla) y el MCP (para presentarla), por eso no hay que escribirla en dos archivos.
Cómo cambiarla después:
Genera una nueva y pégala en
.env(EVOLUTION_API_KEY=...).Reinicia las dos piezas para que lean la clave nueva:
docker compose -f docker-compose.evolution.yml up -d
docker compose up -dDocker detecta que cambió el ajuste y recrea el contenedor automáticamente. En la prueba de esta guía, después de cambiar la clave y ejecutar up -d: la clave vieja dio error 401, la nueva funcionó (200) y la instancia creada antes siguió existiendo (no hubo que volver a crearla). Si usas el panel, entra con la clave nueva.
Nunca la subas a GitHub: el archivo .env está en .gitignore. Si alguna vez la pegas por error en un lugar público, cámbiala de inmediato con los pasos de arriba.
Misma idea para la contraseña de la base de datos
EVOLUTION_DB_PASSWORD se genera igual (usa openssl rand -hex 16 o el comando de PowerShell) y vive solo en .env.
Ojo, aquí hay una diferencia importante: la contraseña se guarda dentro de la base de datos la primera vez que se crea. Si solo cambias el texto en .env, Evolution ya no podrá entrar y se queda reiniciando con un error de autenticación (lo comprobamos: P1000 Authentication failed). Si te pasa, vuelve a poner la contraseña anterior y todo regresa a la normalidad. Para cambiarla de verdad, con Evolution encendido:
docker compose -f docker-compose.evolution.yml exec postgres psql -U evolution -d evolution -c "ALTER USER evolution WITH PASSWORD 'TU_NUEVA_CONTRASEÑA';"(escribe la nueva contraseña, solo letras y números, sin acentos ni la ñ), luego pon esa misma contraseña en .env y ejecuta docker compose -f docker-compose.evolution.yml up -d. Esa forma conserva tu WhatsApp vinculado y fue la que probamos. La otra opción es borrar los datos con docker compose -f docker-compose.evolution.yml down -v, pero entonces pierdes la vinculación y debes escanear el QR de nuevo.
5. Por qué usamos la versión v2.3.7 de Evolution
En docker-compose.evolution.yml la imagen es evoapicloud/evolution-api:v2.3.7. Esto es lo que pudimos comprobar (consultas hechas el 25 de octubre de 2026):
Es la imagen oficial vigente.
evoapicloud/evolution-apies la imagen que usa el propio compose del proyecto Evolution y la que mantienen hoy en Docker Hub (https://hub.docker.com/r/evoapicloud/evolution-api). La imagen antiguaatendai/evolution-apiya no se encontró en Docker Hub al consultarla. El repositorio de código también cambió de dueño:github.com/EvolutionAPI/evolution-apiahora redirige agithub.com/evolution-foundation/evolution-api.v2.3.7 es la última versión estable publicada. Salió el 5 de diciembre de 2025. Las versiones más nuevas que existen son pruebas (marcadas como pre-release en GitHub):
2.4.0-rc1(6 de mayo de 2026) y2.4.0-rc2(17 de mayo de 2026). Sus propias notas dicen "usar solo para validación; no desplegar en producción" y anuncian un cambio importante: la 2.4.0 exige activar una licencia antes de responder (sin activar, devuelve un error 503LICENSE_REQUIRED). Notas oficiales: https://github.com/evolution-foundation/evolution-api/releasesUn número de versión fijo evita sorpresas. Con el tag
latest, un día tu instalación podría descargar una versión distinta sin que lo decidas. Hoylatestapunta, en la práctica, al mismo código que la 2.3.7 más cuatro cambios de documentación/licencia (lo revisamos comparando la imagen con el repositorio). Pero si algún díalatestpasa a la 2.4.x, tu instalación cambiaría sola. Conv2.3.7siempre obtienes lo mismo.Es la versión con la que se desarrolló y probó este MCP. Las rutas que usa el MCP (están en
src/evolution.ts) son:POST /message/sendText/{instancia},POST /message/sendMedia/{instancia},GET /group/fetchAllGroups/{instancia},GET /instance/connectionState/{instancia}, y la clave viaja en el encabezadoapikey. Para esta guía levantamos Evolution v2.3.7 desde cero con el compose incluido y comprobamos que responden las rutas de estado y de grupos, que se puede crear una instancia y que entrega el QR. El envío real de mensajes necesita un WhatsApp vinculado, así que en esa prueba desde cero no se ejecutó; está cubierto por las pruebas automáticas del proyecto (con Evolution simulado) y, en la instalación del autor con esta misma versión,whatsapp_statusrespondeopen.El panel
/managerya viene incluido en esta versión (respondió 200 enhttp://localhost:8080/manager/), así que no hace falta un contenedor extra.Además, las notas de la 2.3.7 mencionan arreglos que interesan a este uso: por ejemplo un error de "Unique constraint failed on the fields: (remoteJid)" al enviar a grupos.
No encontramos un motivo mágico más allá de estos: es la última versión estable, funciona con este MCP y fijarla evita cambios inesperados.
Última versión publicada que encontramos: estable 2.3.7 (2025-12-05); pruebas 2.4.0-rc2 (2026-05-17).
Cómo actualizar en el futuro
Lee las notas de la versión nueva (enlace de arriba) y decide si te conviene.
Haz una copia de seguridad de la base de datos (comando sin verificar en esta guía):
docker compose -f docker-compose.evolution.yml exec -T postgres pg_dump -U evolution evolution > respaldo.sqlCambia el número en
docker-compose.evolution.yml, por ejemploevoapicloud/evolution-api:v2.3.7por la versión nueva.Descarga y reinicia:
docker compose -f docker-compose.evolution.yml pull
docker compose -f docker-compose.evolution.yml up -dPruébalo: pídele a tu asistente
whatsapp_status(debe deciropen) y manda un mensaje de prueba (paso 8).Para volver atrás: pon otra vez el número anterior en el archivo y ejecuta
up -d. Ten en cuenta que una versión nueva puede modificar la base de datos, y la vieja quizá no la entienda; por eso conviene el respaldo del paso 2.
6. Variables del archivo .env
El archivo .env se crea copiando .env.example (paso 2).
Variable | Para qué sirve | Valor típico |
| Dirección de Evolution, escrita como la ves desde tu computadora. Dentro de Docker, |
|
| Tu API key (la usan Evolution y el MCP). Obligatoria. | texto largo generado por ti |
| Contraseña de la base de datos de Evolution. Solo la usa | texto largo generado por ti |
| Nombre de la instancia de WhatsApp. Obligatoria. |
|
| Tu número: código de país + número, solo dígitos. Es el alias |
|
| Números o identificadores de grupo ( | vacío |
| Tiempo máximo de espera por llamada a Evolution, en milisegundos. |
|
| Forma de comunicarse con el asistente: |
|
| Puerto del propio MCP (no es el de Evolution). |
|
| Interfaz donde escucha el MCP. |
|
Cómo llenar WHATSAPP_TEAM: pídele a tu asistente que use whatsapp_list_groups, copia los identificadores de los grupos que quieras (terminan en @g.us) y pégalos separados por comas, junto con números de personas si quieres. Ejemplo: WHATSAPP_TEAM=52XXXXXXXXXX,120363XXXXXXXXXXXXXX@g.us. Después ejecuta docker compose up -d para que el MCP lea el cambio.
7. Conectar tu asistente (Claude, Gemini, Codex)
Hay dos formas de conectar, y puedes elegir la que prefieras:
Variante HTTP (la más simple): el MCP ya está corriendo con
docker compose up -dy el asistente se conecta ahttp://127.0.0.1:8787/mcp.Variante stdio: el asistente inicia su propio contenedor cada vez que lo necesita, con
docker run -i --rm --env-file <ruta>/.env whatsapp-mcp. No necesita el compose del MCP encendido, pero sí que la imagenwhatsapp-mcpya esté construida (paso 7). Para esta variante, dejaMCP_TRANSPORT=stdioen.env.
En todos los ejemplos, reemplaza C:\ruta\a\neto-whatsappmcp por la carpeta real donde clonaste el proyecto (en Mac/Linux, algo como /ruta/a/neto-whatsappmcp). Para ver tu ruta completa: en PowerShell escribe (Get-Location).Path; en Mac/Linux, pwd. En los archivos JSON las barras invertidas se escriben dobles (C:\\ruta\\a\\...).
Claude Code (terminal) y la extensión de VS Code
HTTP:
claude mcp add --transport http whatsapp http://127.0.0.1:8787/mcpstdio:
claude mcp add --transport stdio whatsapp -- docker run -i --rm --env-file C:\ruta\a\neto-whatsappmcp\.env whatsapp-mcpNota (Claude Code y Codex CLI): En PowerShell, si instalaste Claude Code o Codex con npm, escribe el separador entre comillas simples:
'--'(si no, PowerShell lo borra y el comando falla). En Mac/Linux o si el programa se instaló con su instalador oficial,--funciona tal cual. Aplica igual al comando de Codex CLI que aparece más abajo.
Por defecto queda disponible solo en la carpeta donde lo ejecutas; agrega --scope user justo después de claude mcp add para tenerlo en todos tus proyectos. Verifica con claude mcp list (o escribe /mcp dentro de Claude Code). La extensión de VS Code comparte esa configuración: puedes ejecutar el comando en la terminal integrada o administrar los servidores con /mcp en el panel de chat. También hay un archivo de ejemplo para copiar como .mcp.json en un proyecto: examples/claude-code.mcp.json.
Fuente: https://code.claude.com/docs/en/mcp y https://code.claude.com/docs/en/vs-code
Claude Desktop
Claude Desktop lee un archivo de configuración. Ábrelo desde Settings > Developer > Edit Config, o búscalo en:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonMac:
~/Library/Application Support/Claude/claude_desktop_config.json
Para este archivo usa la variante stdio. Agrega esto dentro de mcpServers (junto a los servidores que ya tengas) y reinicia Claude Desktop por completo:
{
"mcpServers": {
"whatsapp": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "C:\\ruta\\a\\neto-whatsappmcp\\.env", "whatsapp-mcp"]
}
}
}Está también en examples/claude_desktop_config.json. Fuente: https://modelcontextprotocol.io/docs/develop/connect-local-servers
Gemini CLI
HTTP (por la terminal):
gemini mcp add --transport http whatsapp http://127.0.0.1:8787/mcpPor defecto lo guarda en la carpeta actual (.gemini/settings.json); agrega --scope user para guardarlo en el archivo global ~/.gemini/settings.json (en Windows, .gemini\settings.json dentro de tu carpeta de usuario).
O edita el archivo settings.json a mano. HTTP:
{
"mcpServers": {
"whatsapp": { "httpUrl": "http://127.0.0.1:8787/mcp" }
}
}stdio:
{
"mcpServers": {
"whatsapp": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "C:\\ruta\\a\\neto-whatsappmcp\\.env", "whatsapp-mcp"]
}
}
}Fuente: documentación oficial de Gemini CLI, https://github.com/google-gemini/gemini-cli (archivo docs/tools/mcp-server.md). Estos pasos se tomaron de esa documentación; Gemini CLI no estaba instalado en la computadora donde se preparó esta guía, así que no se ejecutaron (sin verificar en la práctica). Tampoco se probó gemini mcp add con la variante stdio (sin verificar); para stdio usa el settings.json de arriba.
Codex CLI
HTTP:
codex mcp add whatsapp --url http://127.0.0.1:8787/mcpstdio:
codex mcp add whatsapp -- docker run -i --rm --env-file C:\ruta\a\neto-whatsappmcp\.env whatsapp-mcpO edita el archivo ~/.codex/config.toml (en Windows, .codex\config.toml dentro de tu carpeta de usuario). HTTP:
[mcp_servers.whatsapp]
url = "http://127.0.0.1:8787/mcp"stdio (las comillas simples en TOML evitan problemas con las barras invertidas):
[mcp_servers.whatsapp]
command = "docker"
args = ["run", "-i", "--rm", "--env-file", 'C:\ruta\a\neto-whatsappmcp\.env', "whatsapp-mcp"]Fuentes: https://learn.chatgpt.com/docs/extend/mcp?surface=cli (la antigua dirección developers.openai.com/codex/mcp redirige ahí) y la ayuda del propio comando (codex mcp add --help), que confirma codex mcp add <nombre> (--url <URL> | -- <COMANDO>...).
Herramientas que obtiene tu asistente
Herramienta | Qué hace |
| Envía un texto a uno o varios destinatarios ( |
| Envía un reporte como archivo adjunto ( |
| Lista tus grupos (identificador y nombre). |
| Muestra si la instancia está conectada. |
En to puedes poner me (tú), team (todo WHATSAPP_TEAM), un número (solo dígitos, con código de país) o el identificador de un grupo (...@g.us).
8. Ejemplos de uso
Escribe estos pedidos tal cual en tu asistente (o adáptalos). Funcionan igual en los tres; abajo hay ejemplos propios para cada uno.
Escenarios útiles
Escenario | Qué le pides | Herramienta que usa |
Aviso al terminar una tarea larga | "Cuando termines el build, avísame por WhatsApp con un resumen de dos líneas." |
|
Reporte de pruebas como archivo | "Corre las pruebas y mándame por WhatsApp el resultado como documento |
|
Avisar al equipo | "Cuando termines el despliegue, avisa al equipo ( |
|
Descubrir tus grupos | "Lista mis grupos de WhatsApp para que yo copie los identificadores." |
|
Revisar la conexión | "Revisa si mi WhatsApp está conectado al MCP." |
|
Pedir una decisión | "Si necesitas una decisión mía, avísame por WhatsApp antes de detenerte y dime qué opciones hay." |
|
Guardia de despliegue o monitoreo | "Ejecuta el despliegue. Si algo falla, mándame por WhatsApp el error; si todo sale bien, avisa al equipo." |
|
Aviso cuando Claude Code espera un permiso | No es un pedido: se configura una vez con hooks (sección 9). Solo Claude Code. | (lo hace el hook) |
Ejemplos para Claude (Claude Code, extensión de VS Code, Claude Desktop)
"Refactoriza el módulo de pagos y, cuando termines, mándame un WhatsApp con qué cambió y si las pruebas pasaron."
"Ejecuta la suite de pruebas completa. Sea cual sea el resultado, envíame por WhatsApp un documento
resultado-pruebas.mdcon el detalle.""Usa
whatsapp_list_groups, dime los grupos y espera mi respuesta; después manda al grupo que te indique el resumen de la semana.""Trabaja en esto sin preguntarme nada salvo que sea imprescindible. Si te bloqueas, avísame por WhatsApp y explícame qué necesitas."
Ejemplos para Gemini (Gemini CLI)
"Analiza los logs de la carpeta
logs/y mándame por WhatsApp un resumen con los 5 errores más frecuentes.""Revisa con
whatsapp_statussi mi WhatsApp está conectado; si no lo está, dime cómo reconectar.""Genera el reporte de cobertura y envíalo como documento al equipo (
team) con el texto 'Reporte de hoy'.""Cuando termines de migrar los archivos, avísame por WhatsApp con el número de archivos migrados."
Ejemplos para Codex (Codex CLI)
"Implementa el endpoint de búsqueda y, al terminar, avísame por WhatsApp con el nombre de la rama de trabajo y el resultado de las pruebas."
"Si las pruebas fallan, envíame por WhatsApp los nombres de las pruebas que fallaron; si pasan, no me escribas."
"Despliega a pruebas. Si el despliegue falla, mándame el error a mí; si sale bien, avisa al equipo (
team).""Escribe un resumen del cambio en formato Markdown y envíalo como documento llamado
cambio.mdame."
Prueba rápida desde la terminal (sin asistente)
docker run --rm --env-file .env --entrypoint node whatsapp-mcp dist/cli.js send --to me "Texto de prueba"Puedes poner varios destinos separados por coma: --to me,team.
9. Avisos automáticos con hooks de Claude Code
Cuando Claude Code se detiene a esperar un permiso o a que termines de decidir algo, no usa ninguna herramienta, así que un pedido en el prompt no sirve para avisarte. Para eso existen los hooks: pequeños comandos que ejecuta el propio programa en ciertos momentos. Esto solo funciona con Claude Code (no con Gemini ni Codex) y requiere Node 24 y Windows PowerShell.
Evento
Notification(pide un permiso, queda esperando, etc.): manda ameel título, el mensaje y la carpeta de trabajo.Evento
Stop(Claude terminó su turno): manda ameel último mensaje del asistente, recortado.
Instalación:
En la carpeta del proyecto:
npm ciy luegonpm run build(creadist/cli.js). El script lee las variables del.envdel proyecto automáticamente.Abre
examples/hooks.settings.json, reemplazaC:\\ruta\\a\\neto-whatsappmcppor tu carpeta real y copia el bloquehooksdentro de tu archivo de ajustes de Claude Code,%USERPROFILE%\.claude\settings.json(si ya tienes una secciónhooks, combina los eventosNotificationyStop).El script
examples/hook-notify.ps1siempre termina sin error, así que un fallo de envío nunca bloquea a Claude Code.
Prueba manual (reemplaza la ruta):
'{"hook_event_name":"Notification","title":"Prueba","message":"Aviso de prueba","cwd":"C:\\proyecto"}' | powershell -NoProfile -ExecutionPolicy Bypass -File "C:\ruta\a\neto-whatsappmcp\examples\hook-notify.ps1"El evento Stop manda un mensaje al final de cada respuesta; si te resulta mucho, deja solo Notification.
10. Seguridad
Puertos solo locales. Evolution (
8080) y el MCP (8787) se publican solo en127.0.0.1: únicamente tu propia computadora puede entrar. Postgres y Redis no publican ningún puerto.El endpoint HTTP del MCP no tiene contraseña propia. Cualquier programa que corra en tu computadora puede pedirle que mande mensajes desde tu WhatsApp. No lo expongas a la red ni lo publiques en internet.
Validación de
Host. El MCP rechaza (error 403) las peticiones cuyo encabezadoHostno sea127.0.0.1,localhost,[::1]o la dirección que configuraste enMCP_HOST. Es una protección contra ataques desde páginas web (DNS rebinding).Tu API key y tu contraseña de base de datos no se versionan. Viven solo en
.env, que.gitignoreexcluye. La imagen del MCP no lleva secretos; todo llega por variables de entorno..env.bak. La ventana de configuración (sección 12) deja una copia.env.bakdel archivo anterior, con tus claves. También está ignorada por Git, pero bórrala cuando ya no la necesites.Cuida a quién le das acceso. Un asistente con este MCP puede escribir a cualquier número o grupo desde tu cuenta. Revisa los destinatarios de
WHATSAPP_TEAMy los permisos que concedes.
11. Solución de problemas
Para ver qué pasa por dentro:
docker compose -f docker-compose.evolution.yml logs
docker compose logsSíntoma | Qué significa y qué hacer |
No sé qué puerto es cuál | 8080 = Evolution (la cocina). 8787 = el MCP (el mesero). Tu asistente siempre se conecta a |
Error 401 | La API key es incorrecta. Comprueba que |
Error 404 | El nombre de |
| El número no tiene WhatsApp o está mal escrito. Usa código de país y solo dígitos, sin |
El MCP no llega a Evolution (usa | Comprueba con |
El puerto 8080 está ocupado | En |
El QR no aparece o caduca | Espera unos segundos y genera otro desde el panel ( |
El comando dice "Falta EVOLUTION_API_KEY" o "Falta EVOLUTION_DB_PASSWORD" | Aún no llenaste esa variable en |
Evolution se reinicia sin parar con | Cambiaste |
| Mira |
El puerto 8787 está ocupado | Cambia |
12. Ventana de configuración (opcional, solo Windows)
Si prefieres llenar el .env con una ventana en lugar de un editor de texto, existe Configure-WhatsAppMCP.ps1. Es opcional y solo funciona en Windows (usa PowerShell y formularios de Windows; no necesita instalar nada).
powershell -ExecutionPolicy Bypass -File .\Configure-WhatsAppMCP.ps1Así se ve la ventana al abrirla (los datos son de ejemplo; la API key aparece como puntitos para que nadie la lea por encima de tu hombro):

Después de llenar los campos, pulsa Probar conexión. Si todo está bien, abajo de los botones aparece en verde Estado: open (WhatsApp vinculado y listo):

Si la API key no coincide con la de Evolution, verás un mensaje rojo como este; corrige la clave y vuelve a probar (la ventana nunca muestra tu clave en los mensajes):

Qué hace:
Lee el archivo
.envy muestra sus valores en campos (la API key va oculta).Probar conexión: consulta a Evolution con tu API key y dice si la instancia está conectada, sin mostrar la clave.
Guardar: escribe el
.envy deja una copia del anterior como.env.bak. Conserva las variables que no conoce.Guardar y reiniciar contenedor: guarda y reinicia solo el MCP (
docker compose up -d). Si cambiaste la API key, reinicia también Evolution:docker compose -f docker-compose.evolution.yml up -d.
13. Para desarrolladores
Requiere Node 24.
npm ci # instala las dependencias
npm run build # compila TypeScript a dist/ (dist/index.js = servidor, dist/cli.js = CLI)
npm test # compila y ejecuta las pruebas (con Evolution simulado, sin red)Ejecutar sin Docker (las variables se toman del entorno de tu terminal, no del .env):
node dist/index.js # stdio por defecto; con MCP_TRANSPORT=http escucha en MCP_PORTEstructura:
src/ código: configuración, cliente de Evolution, servidor MCP, entradas index.ts y cli.ts
src/tests/ pruebas con fetch simulado
examples/ configuraciones para Claude Code y Claude Desktop, hooks y hook-notify.ps1
docker-compose.yml el servidor MCP
docker-compose.evolution.yml Evolution + Postgres + Redis
Dockerfile imagen del MCP
Configure-WhatsAppMCP.ps1 ventana opcional (Windows)
.env.example plantilla de configuración14. Aviso legal y licencia
Usa esto de forma responsable. Está prohibido enviar spam o mensajes a personas que no los esperan.
Evolution se conecta a WhatsApp imitando a WhatsApp Web; no es la API oficial de Meta. WhatsApp puede bloquear o suspender números que usen herramientas no oficiales o que envíen mensajes masivos. El riesgo es tuyo; úsalo con moderación y, de preferencia, con un número que puedas permitirte perder.
Licencia: GPL-3.0. Consulta el archivo
LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
- WhatSyncOAuthapp.whatsync
WhatsApp for Claude, ChatGPT or any AI agent: search, reply and send. Personal or Business API.
Your own WhatsApp in Claude and ChatGPT: read chats, draft replies, send messages you approve.
Read, search and reply to your WhatsApp chats from your AI, using your own number.
WhatsMCP connects Claude and other MCP-compatible AI agents directly to WhatsApp. Send and receive text, images, documents, and voice notes; manage groups (create, add/remove members, promote admins); look up contacts and profiles; follow channels; and read call and message history — all through a standard MCP interface. For voice use cases, WhatsMCP offers SIP-based calling plans (inbound-only, or full inbound/outbound) so AI voice agents can answer and place WhatsApp calls, plus low-latency WebSocket integrations with voice agent providers like ElevenLabs. Multiple WhatsApp accounts can be paired and managed per workspace, with webhook support for real-time inbound message delivery to your own infrastructure.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables WhatsApp Business messaging through Evolution API with support for creating instances, sending messages using dynamic templates, and managing contacts and groups. Includes 10+ predefined message templates for common business scenarios like order confirmations, appointment reminders, and promotional messages.25MIT
- AlicenseNot gradedqualityCmaintenanceEnables WhatsApp integration through Evolution API, allowing users to send messages, manage media, track conversations, and control presence status directly from Claude.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to send WhatsApp messages, templates, and retrieve media through the WhatsApp Cloud API. Provides webhook handling and seamless integration with Meta's WhatsApp Business platform.23ISC
- AlicenseBqualityDmaintenanceEnables WhatsApp messaging and management through the Evolution API, supporting sending texts, checking numbers, listing contacts and groups, and more.25MIT