WhatsApp MCP Stream
WhatsApp MCP Stream

Un servidor de Interfaz de Contexto de Protocolos (MCP) de WhatsApp construido al rededor del transporte Streamable HTTP, usando Baileys para la conexión con WhatsApp, con un interfaz de administración web y flujo bidirccional de archivos multimedia (subida + descarga).
Puntos claves:
Transporte: Streamable HTTP en
/mcpMotor: Baileys
Interfaz de administración: QR, estdo, cierre de sesión, ajustes de ejecución, visor de historial de chats
Archivos: endpoints de subida + alojamiento
/media+ herramienta de descarga MCP
Inicio rápido (Docker)
# build and run
docker compose build
docker compose up -dEl servidor estará disponible en:
Interfaz de administración:
http://localhost:3003/adminPunto de acceso MCP:
http://localhost:3003/mcpArchivos multimedi:
http://localhost:3003/media/<file>
Related MCP server: lingtai-whatsapp
DNS en hosts con --iptables=false
En algunos hosts NAS o más seguros (pad e: j. sinología con dockerd --iptables=false), el proxy DNS limitado por Docker (127.0.0.11) no dispone de reglas de enmascarado para iptables y rechaza las conexiones dentro de los contenedores.
Solución: copie resolv.conf.example a resolv.conf y añada una anulación de volumen:
cp resolv.conf.example resolv.confDespués, añadalo a un docker-compose.override.yml local (no versionado):
services:
mcp-whatsapp:
volumes:
- ./resolv.conf:/etc/resolv.conf:rodocker compose up recoge la anulación automáticamente.
Ajustes de ejecución
Los ajustes se pueden editar en la interfaz de administración y se guardan en SETTINGS_PATH (por defecto, MEDIA_DIR/settings.json).
Interfaz de administración
Panel de administración con ajustes de ejecucción, vinculación de QR, visor de historial de chats, exportación y estado.
Estatutos admitidos:
media_public_base_urlupload_max_mbupload_enabledmax_files_per_uploadrequire_upload_tokenupload_tokenauto_download_mediaauto_download_max_mb
Autenticación
La autenticación integrada todavía no está implementada. En producción, use una pasare que imponga la autenticación. Este proyecto funciona bien detrás de authmcp-gateway:
https://github.com/loglux/authmcp-gatewayAPI de subida de archivos multimedia
Base64 JSON:
curl -X POST http://localhost:3003/api/upload \
-H "Content-Type: application/json" \
-d {filename:photo.jpg,mime_type:image/jpeg,data:<base64>}Multipart (recomendado para archivos grandes):
curl -X POST http://localhost:3003/api/upload-multipart \
-F "file=@/path/to/file.jpg"Ambos devuelven url y (si está configurado) publicUrl.
Envío de archivos locales mediante send\_media
El directorio ./files/ en la raíz del proyecto está montado dentro del contenedor en /app/files. Coloque cualquier archivo ahí y refiera a él inmediatamente — no necesita reiniciar el contenedor:
# On host:
cp report.pdf /path/to/whatsapp-mcp-stream/files/
# In send_media:
media_path: /app/files/report.pdfPara un origen HTTPS, pase media_url directamente a send_media o stage_media — el servidor descargará el propio archivo sin base64.
Autenticación de subida (Opcional)
Si require_upload_token=true, proporcione el token con cualquiera de estas opciones:
x-upload-token: <token>Authorization: Bearer <token>
Transporte MCP
El servidor expone Streamable HTTP en /mcp.
Flujo típico:
POST /mcpcon JSON-RPCinitializeUse el encabezado
mcp-session-iddevuelto para las solicitudes posterioresPOST /mcppara llamadas de herramientas
Nota: los clientes deben enviar Accept: application/json, text/event-stream en initialize.
Prueba de humo
Prueba de humo de regresión rápida para las herramientas MCP:
npm run smoke:mcpDestino personalizado opcional:
MCP_BASE_URL=http://localhost:3003 npm run smoke:mcpHerramientas MCP
Autenticación
Herramienta | Descripción |
| Obtener el último código QR de WhatsApp como imagen para la autenticación. |
| Comprobar si el cliente de WhatsApp está autenticado y listo. |
| Cerrar la sesión de WhatsApp y borrar la sesión actual. |
Contactos
Herramienta | Descripción |
| Busca contactos por nombre o número de teléfono. |
| Resuelve un contacto por nombre o número de teléfono (mejores coincidencias). |
| Obtiene los detalles del contacto por JID. |
| Obtiene la URL de la imagen de perfil para un JID. |
| Obtiene los metadatos del grupo y sus participantes a través del JID del grupo. |
Chat
Herramienta | Descripción |
| Lista los chats con metadatos y opcionalmente el último mensaje. |
| Obtiene los metadatos del chat a través del JID. |
| Lista solo los chats de grupo. |
| Resuelve un JID de chat directo por número de teléfono. |
| Resuelve un contacto por nombre o número y devuelve los metadatos del chat. |
| Encuentra miembros que coinciden en varios grupos. |
| Encuentra miembros de grupo sin chat directo. |
| Encuentra miembros de grupo no presentes en los contactos. |
| Ejecuta la auditoría de grupo combinada como una única operación de rutina. |
Mensajes
Herramienta | Descripción |
| Obtener mensajes de un chat específico. |
| Busca mensajes por texto (opcionalmente delimitados a un chat). |
| Obtener un mensaje concreto mediante su ID ( |
| Obtener mensajes recientes alrededor de un mensaje específico. |
| Obtener el mensaje más reciente a través de un JID. |
| Enviar un mensaje de texto a un contacto o grupo. Admite |
Archivos
Herramienta | Descripción |
| Enviar contenido (imagen/vídeo/documento/audio). Acepta |
| Guardar un archivo en el directorio de archivos del server y devolver su path local. Use el |
| Descargar el archivo de un mensaje. |
Utilidades
Herramienta | Descripción |
| Herramienta de comprobación de salud. |
Ajustes de recuperación
Este servicio contiene una solución de recuperación diseñada para corrupción del estado de sesión de Baileys/WhatsApp.
Por qué existe:
En producción observamos casos en los que el contenedor permanecía activo y el MCP respondía, pero la sesión de WhatsApp estaba funcionalmente rota.
Los indicadores más comunes eran errores de Baileys como
failed to find key ... to decode mutationyfailed to sync state from version.En ese estado, un reinicio manual del contenedor a menudo restablecía el servicio.
Comportamiento actual:
Cuando aparecen señales de corrupción del estado de la aplicación, el servicio primero intenta una recuperación suave con
forceResync().Si la misma clase de error se repite dentro de una ventana de tiempo, llega a un reinicio interno del cliente de WhatsApp.
En desconexiones como
Connection Terminated, el servicio programa un watchdog de desconexión y salta a un reinicio interno si la conexión no vuelve aopena tiempo.El ciclo de reconexión está protegido contra los bloqueos de bloqueo anidados, por lo que la recuperación de desconexiones puede completarse sin requerir un reinicio manual del contenedor.
Observaciones recientes en producción muestran que los socket desconexiones repetidas (
428 Connection Terminated,503 Stream Errored) se recuperan automáticamente volviendo aopen.Un endpoint dedicado
/healthzsolo reporta503cuando el servicio está genuinamente bloquedo fuere de la ventana de recuperación permitida.Docker comprueba la salud usando
/healthz, por lo que container se reinicia solo después de que la recuperación en proceso ha tenido la oportunidad de funcionar.
Estos meónismos de recuperación reducen la intervención manual y mejoran la resiliencia frente a fallos comunes de sesión de WhatsApp/Baileys.
Licencia
MIT
Persistencia
Los chats y los mensajes se persisten en una base de datos SQLite local almacenada en el volúmen de sesión.
Variables de entorno:
Variable | Default | Description |
|
| Ruta de la base de datos SQLite para la persistencia de chats/mensajes. |
|
| Activa el registro detallado de eventos de WhatsApp. |
|
| Escribe el flujo de eventos sin procesar de Baileys en un archivo para una depuración avanzada. |
|
| Ruta de archivo para el registro del flujo de eventos. |
|
| Activa la red de seguridad de reconexión tras una resincronización forzada. |
|
| Retraso antes de la reconexión tras una resincronización forzada (ms). |
|
| Retardo mínimo entre recuperaciones automáticas del estado de la aplicación. |
|
| Ventana de tiempo utilizada para contar fallos repetidos de corrupción del estado de la aplicación. |
|
| Número de recuperaciones suaves antes de escalar a un reinicio interno. |
|
| Período de gracia durante la recuperación o desconexión antes de que |
|
| Tiempo de espera después de un cierre de socket antes de que el supervisor de desconexión fuerce la reconexión o el reinicio. |
|
| Códigos de estado de desconexión separados por comas que deben escalar directamente a un supervisor de reinicio interno. |
|
| Suprime las solicitudes |
|
| Duración durante la cual se conservan en SQLite los registros de idempotencia de |
|
| Número máximo de entradas en memoria para el índice de mensajes ( |
|
| Número máximo de entradas en memoria para el índice de claves de mensaje ( |
|
| La inicialización del cliente de WhatsApp compite contra esta fecha límite; establezca |
|
| Máximo de descargas automáticas en paralelo. La descarga automática se ejecuta a través de una cola acotada dentro del proceso para que una ráfaga de medios entrantes no sature el E/S. |
|
| Máximo de trabajos de descarga automática en cola. El exceso se descarta en modo FIFO (los más antiguos primero) con un registro de advertencia; los mensajes recientes se mantienen priorizados. |
|
| Utiliza respuestas JSON directas por defecto para las solicitudes POST de Streamable HTTP. Establezca |
Diagnósticos adicionales del transporte:
Las solicitudes POST de
/mcpregistran ahora los eventos del ciclo de vida de las solicitudes enlogs/mcp-whatsapp.logesto incluye la entrada de la solicitud, el despacho del transporte, la finalización de
transport.handleRequesty los eventos HTTPfinish/closeutiliza estos registros para determinar si la latencia se produce antes de que la respuesta salga de
whatsapp-mcp-streamo después, en el lado de la puerta de enlace o del cliente
API de historial de chats
Consulta los chats y mensajes almacenados mediante:
GET /api/chats?limit=50&offset=0&q=<search> — lista de chats paginada, opcionalmente filtrada por nombre.
GET /api/chats/:jid/messages?limit=50&offset=0 — mensajes paginados para un chat (del más nuevo al más antiguo).
Ambos endpoints son utilizados por la pestaña Chats de la interfaz de administración.
Exportación
Exporta un chat (JSON y medios descargados adicionales) mediante:
GET /api/export/chat/:jid?include_media=true
Si include_media=true, el ZIP incluye los archivos ya descargados mediante download_media. No obtiene de WhatsApp los medios faltantes.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables WhatsApp automation through MCP protocol, allowing users to manage sessions, send messages, handle groups/communities, and access contacts through natural language interactions with AI agents.11

lingtai-whatsappofficial
AlicenseNot gradedqualityFmaintenanceMCP server for interacting with the official Meta WhatsApp Business Platform/Cloud API, enabling sending messages, managing contacts, templates, and handling webhook callbacks.Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables sending messages, managing templates, uploading media, and configuring webhooks for WhatsApp Business via the MCP protocol.105MIT
- AlicenseNot gradedqualityCmaintenanceIntegrates WhatsApp with AI agents, enabling message sending, chat search, media sharing, approval workflows, and activity summaries via any MCP client.1Apache 2.0
Related MCP Connectors
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Give AI agents real phone numbers, messages, and voice calls via MCP.
Instagram, WhatsApp and Messenger DMs through official Meta Business APIs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BusinessNone/WhatsAppMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server