WhatsApp MCP

Servidor MCP para la API de Meta WhatsApp Cloud: envía mensajes de formato libre y plantillas

Documentación

mcp-server-whatsapp

Servidor MCP para CodeChap WhatsApp a través de la API oficial de Meta Cloud.

Esta es la línea de negocio de CodeChap (Poster 4 / +27 65 762 2206). Holiday Stays tiene su propia aplicación de Meta y número — no apuntes Poster 4 a HS.

Características

  • send_message — Texto de formato libre (solo dentro de una ventana activa de servicio al cliente de 24 horas)
  • send_document — PDF/archivo dentro de la ventana de 24 horas
  • send_quote / send_invoice — PDF mediante plantillas quote / invoice (fuera de las 24 horas una vez aprobado)
  • send_email_settings — PDF del buzón IMAP/SMTP mediante email_guide (la contraseña se envía por separado)
  • send_template / upload_media / list_templates
  • list_inbox / get_message / mark_read — mensajes entrantes desde la bandeja de entrada en la nube

Los mensajes entrantes se almacenan en la nube y se envían por correo electrónico a ai@codechap.com.

Configuración (MCP / estación de trabajo)

~/.config/mcp-server-whatsapp/config.toml:

access_token = "EAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
phone_number_id = "123456789012345"
waba_id = "1622097682865634"
inbox_url = "https://codechap.com"
inbox_token = "inbox-api-bearer-token"

# Optional
# api_version = "v21.0"

Bandeja de entrada en la nube

Meta entrega webhooks a https://codechap.com/webhook/whatsapp.

HostServidor de proyectos de CodeChap (141.147.65.65)
Binario/home/codechap/wa-inbox/wa-inbox
Configuración/home/codechap/.config/mcp-server-whatsapp/inbox.toml (modo 600) — ver inbox.example.toml
Unidadcodechap-wa-inbox.service
SQLite/home/codechap/wa-inbox/inbox.db
Nginxlocation /webhook/whatsapp en el vhost codechap.com (debe estar por encima de location /)

CloudPanel puede regenerar ese vhost. Si la recepción de mensajes falla después de una edición del panel, vuelve a insertar el fragmento de deploy/nginx-whatsapp.conf y nginx -t && systemctl reload nginx.

Reconstruye/implementa el binario de la bandeja de entrada (el servidor es aarch64):

export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
cargo build --release --target aarch64-unknown-linux-gnu --bin wa-inbox
scp target/aarch64-unknown-linux-gnu/release/wa-inbox codechap@141.147.65.65:~/wa-inbox/wa-inbox
ssh ubuntu@141.147.65.65 'sudo systemctl restart codechap-wa-inbox'

Uso (MCP)

send_message

{ "to": "+27821234567", "body": "Hello from CodeChap!" }

send_template

{
  "to": "+27821234567",
  "template_name": "order_confirmation",
  "language_code": "en_US",
  "components": "[{\"type\":\"body\",\"parameters\":[{\"type\":\"text\",\"text\":\"John\"},{\"type\":\"text\",\"text\":\"tomorrow\"}]}]"
}

send_quote

{
  "to": "+27821234567",
  "pdf_path": "/path/to/quote.pdf",
  "customer_name": "Derrick",
  "quote_ref": "Q-1001"
}

Usa la plantilla quote (en, UTILITY) con un encabezado de documento. Meta debe haberla aprobado (list_templates). Dentro de la ventana de 24 horas también puedes send_document.

list_inbox

{ "from": "+27821234567", "limit": 20 }

from y limit son opcionales.

Trabajo futuro

  • Herramienta de carga de medios (upload_media) para PDFs de cotizaciones / encabezados de plantillas
  • Descargar medios entrantes a la bandeja de entrada en la nube

Desarrollo

cargo test
cargo build --release

Binarios: mcp-server-whatsapp (MCP stdio) y wa-inbox (webhook en la nube).

Licencia

MIT (o lo que prefieras)