WhatsApp Web
Un servidor MCP para interactuar con WhatsApp Web, que permite enviar y recibir mensajes.
Documentación
Muy Importante
La automatización de mensajes de WhatsApp sin la API (de Negocios) de Meta va en contra de los Términos de Servicio de WhatsApp. Asumes toda la responsabilidad por todo lo que hagas con este servidor MCP. Es posible que tu cuenta sea marcada/restringida.
MCP WhatsApp Web (TypeScript)
Un servidor de Protocolo de Contexto de Modelo (MCP) para WhatsApp Web, implementado en TypeScript. Este proyecto es un port a TypeScript del repositorio original whatsapp-mcp.
Con este servidor MCP, puedes:
- Buscar y leer tus mensajes personales de WhatsApp (incluyendo multimedia)
- Buscar tus contactos
- Enviar mensajes a individuos o grupos
- Enviar y recibir archivos multimedia (imágenes, videos, documentos, audio)
Características
- Implementación en TypeScript: Código completamente tipado para una mejor experiencia de desarrollo y confiabilidad del código
- Backend de WhatsApp seleccionable: Usa whatsapp-web.js por defecto, con un backend opcional Baileys que funciona sin navegador
- Servidor MCP: Implementa el Protocolo de Contexto de Modelo para una integración perfecta con asistentes de IA
- Soporte multimedia: Envía y recibe imágenes, videos, documentos y mensajes de audio
- Múltiples opciones de transporte: Soporta transportes stdio y HTTP Streamable — incluso ambos a la vez desde un solo proceso (inicia con stdio y configura
MCP_HTTP_PORTpara exponer adicionalmentehttp://127.0.0.1:<port>/mcp, o ejecuta solo HTTP con--http) - Autenticación flexible: Código QR (como herramienta de imagen MCP), código de emparejamiento (herramienta
request_pairing_code, o impreso automáticamente en stderr al inicio medianteWHATSAPP_PAIRING_PHONE_NUMBER), y un flujo OAuth opcional para clientes HTTP (MCP_OAUTH=true) donde la página de autorización del navegador muestra el código QR de WhatsApp — desvincular WhatsApp revoca los tokens para que los clientes se re-autentiquen automáticamente
Arquitectura
Este servidor MCP consiste en:
- Servidor MCP TypeScript: Implementa el Protocolo de Contexto de Modelo para proporcionar herramientas estandarizadas para que los asistentes de IA interactúen con WhatsApp
- Backend de WhatsApp: Una interfaz de servicio compartida selecciona web.js/Puppeteer o Baileys/WebSocket, maneja la autenticación y gestiona el envío/recepción de mensajes
- Implementaciones de herramientas: Proporciona varias herramientas para contactos, chats, mensajes, multimedia y autenticación
Requisitos previos
- Node.js >= 22.0.0 (se recomienda Node 22 o 24 para la dependencia SQLite de Baileys)
- npm o yarn
- Para el backend
webjspor defecto: Google Chrome o Microsoft Edge (detección automática; necesario para soporte de códecs de video/GIF; otras operaciones pueden usar el Chromium incluido de Puppeteer) - Para
baileys: instala dependencias opcionales, incluido el módulo nativobetter-sqlite3. No se necesita Chrome, Edge o Chromium en tiempo de ejecución.
FFmpeg se incluye automáticamente a través del paquete npm ffmpeg-static — no se necesita instalación manual. Puedes apuntar la variable de entorno FFMPEG_PATH a tu propio binario para sobrescribirlo.
Instalación
Instalación manual
-
Clona este repositorio
git clone https://github.com/mario-andreschak/mcp-whatsapp-web.git cd mcp-whatsapp-web -
Instala las dependencias
npm install -
Compila el proyecto
npm run build -
Configura las variables de entorno (opcional)
Copia el archivo de entorno de ejemplo y modifícalo según sea necesario:
cp .env.example .envPuedes seleccionar el backend con
WHATSAPP_BACKEND, ajustar los niveles de registro, fijar la versión de WhatsApp Web o sobrescribir el navegador detectado automáticamente (BROWSER_EXECUTABLE_PATH) y el binario de ffmpeg (FFMPEG_PATH).WHATSAPP_HEADLESS=falsemuestra la ventana del navegador de web.js, yWHATSAPP_SESSION_DIRreubica su perfil persistente. Usa un directorio de sesión absoluto para mantenerlo consistente entre directorios de trabajo.
Elegir un backend
WHATSAPP_BACKEND=webjs es el predeterminado y conserva las sesiones existentes y los nombres de herramientas MCP. Usa un perfil persistente dedicado de LocalAuth, no tu perfil personal de Chrome. Ahora mantiene el agente de usuario nativo del navegador y los valores predeterminados de gráficos, omite el banner de automatización de Puppeteer y deja habilitado el sandbox del navegador. Los contenedores que requieran deshabilitar el sandbox pueden configurar explícitamente WHATSAPP_NO_SANDBOX=true. Estos ajustes no garantizan que la automatización sea indetectable.
Para usar el backend opcional de Baileys, configura estas variables en la configuración de tu cliente MCP o en .env, luego reinicia el servidor:
WHATSAPP_BACKEND=baileys
BAILEYS_SESSION_DIR=C:/path/to/your/baileys-sessions
BAILEYS_SESSION_DIR tiene como valor predeterminado <working directory>/baileys-sessions; el ejemplo anterior debe reemplazarse con tu propio directorio absoluto. Empareja este backend por separado con get_qr_code o request_pairing_code. La opción existente WHATSAPP_PAIRING_PHONE_NUMBER también funciona. Baileys no puede reutilizar el perfil del navegador de web.js. Puedes volver a webjs y reanudar su sesión existente.
Baileys y SQLite son dependencias opcionales fijadas que se instalan mediante el npm install normal. Si tu gestor de paquetes las omitió, ejecuta npm install --include=optional. SQLite usa un complemento nativo; se requiere un binario precompilado compatible o un conjunto de herramientas de compilación nativa local. Para evitar descargar Chromium al instalar para Baileys o un navegador de sistema existente, usa:
$env:PUPPETEER_SKIP_DOWNLOAD = 'true'
npm install --include=optional
npm run build
En macOS/Linux, el comando de instalación equivalente es PUPPETEER_SKIP_DOWNLOAD=true npm install --include=optional. Seleccionar Baileys carga solo su controlador y nunca inicia ni limpia procesos del navegador. Un backend no disponible produce un error; nunca cambia silenciosamente de controlador ni reintenta un envío a través de otro backend.
Sesiones e historial de Baileys
- Las credenciales, claves de Signal, contactos, chats y mensajes persisten en
BAILEYS_SESSION_DIR/session.sqlite. Mantén todo el directorio privado y fuera del control de versiones. Solo un servidor en ejecución puede ser propietario de un directorio de sesión. Usa directorios separados para cuentas independientes. - El apagado normal conserva la sesión. El cierre de sesión explícito o la autenticación no válida borra las credenciales de Baileys y los datos de cuenta almacenados en caché, y revoca sus tokens de acceso OAuth. El estado OAuth HTTP de Baileys se almacena por separado de web.js en
BAILEYS_SESSION_DIR/oauth-store.json. get_backend_statusinforma el backend activo, la autenticación, los recuentos de registros almacenados y el estado de sincronización del historial. Estar conectado no significa que el historial haya terminado de llegar. Un estado de historialavailablesignifica que los datos locales están disponibles, no que WhatsApp haya proporcionado un archivo completo.- Las herramientas de contactos e historial consultan el almacén local sincronizado. Se solicita la sincronización inicial completa del historial y puede llevar tiempo en cuentas grandes.
list_messagespuede solicitar hasta 100 mensajes antiguos adicionales cuando un chat conocido tiene menos de los solicitados, con una espera limitada y un período de enfriamiento por chat. Los lotes de historial tardíos se persisten para consultas posteriores. WhatsApp puede proporcionar solo parte del historial de una cuenta. - Trata los ID de mensaje devueltos como opacos y usa ID del backend activo. Se admiten entradas heredadas de números de teléfono
@c.us,@s.whatsapp.net, grupos e identificadores@lid; los mapeos conocidos de LID/teléfono se persisten. Los ID de mensaje de web.js no se pueden pasar a Baileys ni viceversa. - Texto, multimedia, descargas, notas de voz y las herramientas de autenticación existentes usan la misma interfaz MCP. Las entradas de notas de voz deben ser archivos locales o base64; FFmpeg las convierte a Opus/Ogg mono antes de enviarlas. Si la conversión falla, la herramienta informa un error sin enviar un tipo de mensaje diferente.
El backend de Baileys es opcional y está fijado a 7.0.0-rc14. Revisa los cambios ascendentes antes de actualizar, especialmente las migraciones de autenticación y formato de mensajes. Consulta la documentación de Baileys y el historial de versiones.
Instalación con FLUJO
FLUJO proporciona un proceso de instalación simplificado:
- Navega a la sección MCP en FLUJO
- Haz clic en "Agregar servidor"
- Copia y pega esta URL del repositorio de GitHub:
https://github.com/mario-andreschak/mcp-whatsapp-web - Haz clic en "Analizar", "Clonar", "Instalar", "Compilar" y "Actualizar servidor"
FLUJO manejará automáticamente la clonación, instalación de dependencias y el proceso de compilación por ti.
Uso
Iniciar el servidor MCP
npm start
Esto iniciará el servidor MCP usando el transporte stdio por defecto, que es adecuado para la integración con Claude Desktop o aplicaciones similares.
Importante: Después de iniciar el servidor por primera vez, debes autenticarte con WhatsApp usando la herramienta
get_qr_codey escanear el código QR con tu teléfono. Consulta la sección Autenticación para instrucciones detalladas.
Modo de desarrollo
npm run dev
Esto inicia el servidor en modo de desarrollo con modo de observación de TypeScript y reinicios automáticos del servidor.
Depuración con MCP Inspector
npm run debug
Esto lanza la herramienta MCP Inspector, que proporciona una interfaz web para probar y depurar tu servidor MCP. El inspector te permite:
- Ver todas las herramientas disponibles y sus esquemas
- Ejecutar herramientas directamente y ver sus respuestas
- Probar tu servidor sin necesidad de conectarlo a un asistente de IA
- Depurar la ejecución de herramientas e inspeccionar respuestas
Conexión a Claude Desktop
-
Crea un archivo de configuración para Claude Desktop:
{ "mcpServers": { "whatsapp": { "command": "node", "args": [ "PATH_TO/dist/index.js" ] } } }Reemplaza
PATH_TOcon la ruta absoluta al repositorio. -
Guarda esto como
claude_desktop_config.jsonen tu directorio de configuración de Claude Desktop:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
-
Reinicia Claude Desktop
Conexión a Cursor
-
Crea un archivo de configuración para Cursor:
{ "mcpServers": { "whatsapp": { "command": "node", "args": [ "PATH_TO/dist/index.js" ] } } }Reemplaza
PATH_TOcon la ruta absoluta al repositorio. -
Guarda esto como
mcp.jsonen tu directorio de configuración de Cursor:- macOS/Linux:
~/.cursor/mcp.json - Windows:
%USERPROFILE%\.cursor\mcp.json
- macOS/Linux:
-
Reinicia Cursor
Autenticación
La primera vez que ejecutes el servidor, necesitarás autenticarte con WhatsApp:
- Inicia el servidor MCP
- Importante: Debes usar la herramienta
get_qr_codepara generar un código QR- En Claude u otros asistentes de IA, pide explícitamente "usar la herramienta get_qr_code para autenticar WhatsApp"
- El asistente llamará a esta herramienta y mostrará la imagen del código QR
- Escanea el código QR con tu aplicación móvil de WhatsApp
- Abre WhatsApp en tu teléfono
- Ve a Configuración > Dispositivos vinculados > Vincular un dispositivo
- Apunta la cámara de tu teléfono al código QR mostrado
Tu sesión se guardará localmente en el directorio whatsapp-sessions y se reutilizará automáticamente en ejecuciones posteriores. Si no te autenticas usando el código QR, no podrás usar ninguna funcionalidad de WhatsApp.
Estado de autenticación y cierre de sesión
Puedes verificar tu estado de autenticación actual y gestionar tu sesión:
- Usa la herramienta
check_auth_statuspara verificar si estás autenticado actualmente - Si necesitas autenticarte con una cuenta de WhatsApp diferente o re-autenticarte:
- Usa la herramienta
logoutpara cerrar sesión en tu sesión actual - Luego usa la herramienta
get_qr_codepara autenticarte con un nuevo código QR
- Usa la herramienta
Esto es particularmente útil cuando:
- Quieres cambiar entre diferentes cuentas de WhatsApp
- Tu sesión ha expirado o ha sido invalidada
- Estás experimentando problemas de conexión y necesitas re-autenticarte
Herramientas MCP disponibles
Autenticación
get_qr_code- Obtener el código QR para la autenticación de WhatsApp Webcheck_auth_status- Verificar si estás autenticado actualmente con WhatsApplogout- Cerrar sesión de WhatsApp y limpiar la sesión actual
Contactos
search_contacts- Buscar contactos por nombre o número de teléfonoget_contact- Obtener información sobre un contacto específico
Chats
list_chats- Listar chats disponibles con metadatosget_chat- Obtener información sobre un chat específicoget_direct_chat_by_contact- Encontrar un chat directo con un contacto específico
Mensajes
list_messages- Recuperar mensajes con filtros opcionalesget_message- Obtener un mensaje específico por IDsend_message- Enviar un mensaje de texto a un chat
Multimedia
send_file- Enviar un archivo (imagen, video, documento) a un chatsend_audio_message- Enviar un mensaje de audio (nota de voz)download_media- Descargar multimedia de un mensaje
Gestión de procesos del navegador
Este servidor MCP utiliza Puppeteer para controlar navegadores Chrome para la conectividad con WhatsApp Web. El servidor incluye un sistema robusto de gestión de procesos del navegador para prevenir procesos Chrome huérfanos.
Limpieza automática del navegador
El servidor automáticamente:
- Rastrea los procesos del navegador Chrome utilizando un sistema de seguimiento de PID
- Limpia los procesos huérfanos al iniciar
- Cierra correctamente los procesos del navegador durante el apagado
- Mantiene un registro de los PID del navegador en
.chrome-pids.json
Limpieza manual del navegador
Si notas procesos Chrome huérfanos que no se limpiaron automáticamente, puedes utilizar la utilidad de limpieza incluida:
npm run cleanup-browsers
Esta utilidad:
- Escaneará los procesos Chrome que podrían estar relacionados con WhatsApp Web
- Mostrará una lista de procesos potencialmente huérfanos
- Pedirá confirmación antes de terminarlos
- Limpiará el archivo de seguimiento de PID
Desarrollo
Estructura del proyecto
src/index.ts- Punto de entradasrc/server.ts- Implementación del servidor MCPsrc/services/whatsapp.ts- Servicio de WhatsApp Websrc/tools/- Implementaciones de herramientas para varias funciones de WhatsAppsrc/types/- Definiciones de tipos TypeScriptsrc/utils/- Funciones de utilidad
Scripts
npm run build- Compilar el código TypeScriptnpm run dev- Ejecutar en modo de desarrollo con vigilancianpm run lint- Ejecutar ESLintnpm run format- Formatear código con Prettiernpm run cleanup-browsers- Detectar y limpiar procesos Chrome huérfanosnpm test- Ejecutar la suite de pruebas unitarias (rápida, sin necesidad de navegador)npm run test:watch- Ejecutar pruebas unitarias en modo de vigilancia durante el desarrollonpm run test:e2e- Compilar y luego ejecutar pruebas de extremo a extremo (inicia el servidor real incluyendo un navegador sin interfaz gráfica)
Solución de problemas
Problemas de autenticación
- Si el código QR no aparece, intenta reiniciar el servidor
- Si ya estás autenticado, no se mostrará ningún código QR (usa
check_auth_statuspara verificar) - Si necesitas reautenticarte, usa la herramienta
logoutprimero, luego solicita un nuevo código QR - WhatsApp limita el número de dispositivos vinculados; es posible que debas eliminar un dispositivo existente
- Si recibes un mensaje que dice "No hay ningún código QR disponible actualmente", pero ya estás autenticado, esto es un comportamiento normal: usa
check_auth_statuspara confirmar tu estado de autenticación
Problemas de conexión
- Asegúrate de tener una conexión a internet estable
- Si la conexión falla, intenta reiniciar el servidor
- Revisa los registros para ver mensajes de error detallados
Problemas con los procesos del navegador
- Si notas un alto uso de CPU o consumo de memoria, podría haber procesos Chrome huérfanos
- Ejecuta
npm run cleanup-browserspara detectar y limpiar procesos huérfanos - Si el servidor se bloquea con frecuencia, verifica si hay procesos huérfanos y límpialos
- En Windows, también puedes usar el Administrador de tareas para buscar múltiples procesos Chrome con "headless" en la línea de comandos
- En Linux/macOS, usa
ps aux | grep chromepara verificar procesos huérfanos
Licencia
MIT
Este proyecto es un puerto TypeScript del whatsapp-mcp original de lharries.