whatsapp-mcp-server

Se conecta a tu cuenta personal de WhatsApp (de la misma manera que WhatsApp Web — escanea un código QR, mantén una sesión de dispositivo vinculado) a través de Baileys, y lo expone como un servidor MCP: send_message, list_chats, get_recent_messages, search_contacts, además de un flujo SSE simple de mensajes entrantes para cualquier cosa que quiera reaccionar a ellos en vivo.

Documentación

@clickonsearch/whatsapp-mcp-server

Vincula una cuenta personal de WhatsApp a los agentes de este repositorio, de la misma manera que lo hace WhatsApp Web: escanea un código QR una vez y permanece conectado. Normalmente no ejecutarás esto directamente; el README de whatsapp-agent te indica cuándo iniciarlo.

Aviso importante: esto no es la API oficial de WhatsApp Business — es una biblioteca no oficial (Baileys) que automatiza una cuenta personal, lo cual los términos de WhatsApp no cubren realmente. El riesgo es bajo para uso personal normal, pero existe una pequeña posibilidad de que la cuenta sea marcada.

whatsapp-agent (or any MCP client)
               │
               ▼
┌─────────────────────────────┐
│     whatsapp-mcp-server     │   Streamable HTTP MCP
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│           Baileys           │   WhatsApp Web protocol
└──────────────┬──────────────┘
               │
               ▼
your WhatsApp account

Ejecución

npx @clickonsearch/whatsapp-mcp-server

La primera vez, imprime un código QR — escanéalo con tu teléfono: WhatsApp → Configuración → Dispositivos vinculados → Vincular un dispositivo. Después de eso se reconecta automáticamente, sin necesidad de escanear de nuevo (a menos que desvincules el dispositivo desde tu teléfono).

Una vez conectado, queda a la escucha en http://127.0.0.1:4100 para cualquier agente que le apuntes. No se requieren variables de entorno para probarlo — todo lo siguiente tiene un valor predeterminado.

Referencia de configuración

Variable de entornoValor predeterminadoNotas
PORT4100
BIND_HOST127.0.0.1Quién puede conectarse. El valor predeterminado significa solo esta computadora
WHATSAPP_MCP_TOKENsin definirSecreto que todo llamador debe enviar. Requerido siempre que BIND_HOST no sea 127.0.0.1
WHATSAPP_AUTH_DIR./whatsapp-authTu sesión — nunca compartas ni confirmes esta carpeta
BAILEYS_LOG_LEVELsilentEstablécelo en info o debug para ver detalles de conexión

Permitir que otra máquina se conecte

Por defecto, solo los programas en la misma computadora pueden acceder a este servidor. Para permitir a otros (un agente en un contenedor, o en otra máquina), elige un secreto y establece ambos:

export WHATSAPP_MCP_TOKEN=$(openssl rand -hex 32)
BIND_HOST=0.0.0.0 npx @clickonsearch/whatsapp-mcp-server

Dale a whatsapp-agent el mismo WHATSAPP_MCP_TOKEN y lo enviará automáticamente. El servidor se niega a iniciar en cualquier otra dirección sin un token. Cualquiera que tenga el token puede leer tus chats y enviar mensajes como tú, así que trátalo como una contraseña — y dado que viaja por HTTP sin cifrar, úsalo solo en una red de confianza o detrás de TLS (por ejemplo, un proxy inverso).

Lo que expone

HerramientaQué hace
send_messageEnvía un mensaje de texto a un número de teléfono o chat
list_chatsLista los chats vistos desde la conexión (incluye el historial reciente propio de WhatsApp)
get_recent_messagesObtiene mensajes recientes de un chat (hasta 200, solo en memoria)
search_contactsEncuentra un contacto por nombre o número

Para desarrolladores

Ejecución desde el código fuente:

cd mcp-servers/whatsapp-mcp-server
npm install
cp .env.example .env
npm run dev

Esto se ejecuta como un servidor MCP estándar (HTTP Streamable en /mcp), por lo que cualquiera de los puentes de este repositorio puede conectarse sin necesidad de casos especiales — solo tenía que hablar el mismo protocolo que el servidor MCP remoto propio de GitHub. También expone GET /events (un flujo SSE simple de mensajes entrantes) y GET /health ({ ok, connected, self }) para cualquier cosa que quiera reaccionar a los mensajes en vivo, como hace whatsapp-agent.

import { WhatsAppConnection } from "./src/whatsapp.js";
import { createServer } from "./src/server.js";

const whatsapp = new WhatsAppConnection("./whatsapp-auth");
await whatsapp.start();

const app = createServer(whatsapp);
app.listen(4100);