Sendveo para agentes de IA
Sendveo habla el Model Context Protocol (MCP). Añádelo a Claude, Cursor, ChatGPT o cualquier agente compatible con MCP y pídelo en lenguaje natural: lista mis números, conecta este, responde a ese chat. El agente llama a Sendveo por ti.
Qué es
El servidor MCP de Sendveo es un pequeño puente entre tu asistente de IA y tu cuenta de Sendveo. Expone las mismas acciones que la API y el panel, como herramientas que el asistente puede llamar. Todo se ejecuta bajo tu propia cuenta: inicias sesión con tu correo y tu contraseña de Sendveo o, para un script o una herramienta de línea de comandos, usas una clave de API de tu panel.
Hay dos formas de conectar, y ambas ofrecen las mismas herramientas. Alojada: pegas una URL en el asistente e inicias sesión, sin instalar nada ni copiar ninguna clave. Local: el asistente ejecuta un pequeño comando de Sendveo en tu equipo con una clave de API, que nunca sale de él.
Qué puedes hacer
Una herramienta por acción, agrupadas como las agrupa la guía: números, mensajes, conversaciones, contactos, grupos, salud y perfil, etiquetas, webhook, facturación. Las funciones de operador no se exponen: el servidor se limita a la cuenta a la que pertenece la conexión.
| Herramienta | Qué hace |
|---|---|
| Números | |
| list_numbers | Lista tus números de WhatsApp, su estado y su salud. |
| get_number | Consulta un número por su id, con su salud. |
| connect_number | Conecta un número nuevo. Devuelve una imagen QR para escanear, o un código de 8 caracteres para escribir en WhatsApp. |
| refresh_qr | Obtiene un QR o código nuevo mientras un número sigue emparejándose (van rotando). |
| reconnect_number | Vuelve a vincular un número cuya sesión se perdió. |
| disconnect_number | Da de baja un número. Libera su plaza y conserva el número. |
| remove_number | Elimina un número de forma permanente. |
| Mensajes | |
| send_message | Envía un mensaje de WhatsApp (texto, archivos, una nota de voz, una ubicación, tarjetas de contacto, una respuesta citada) a un número de teléfono o a una conversación existente. |
| get_messages | Lee los mensajes entrantes y salientes almacenados: texto, tipo, estado de entrega, archivos, reacciones. |
| get_message | Lee un mensaje por su id, tal como está ahora. |
| get_attachment | Obtiene un archivo de un mensaje. Una imagen vuelve como una imagen que puedes ver; cualquier otra cosa, como sus detalles más un enlace de Sendveo. |
| react_to_message | Reacciona a un mensaje con un emoji. |
| remove_reaction | Retira tu reacción. |
| forward_message | Reenvía un mensaje a otra conversación que ya tienes. |
| delete_message | Elimina un mensaje para todos. No se puede deshacer. |
| mark_chat_read | Marca una conversación como leída, o como no leída. |
| send_typing | Muestra el indicador de escritura un momento antes de un mensaje. |
| Conversaciones | |
| list_chats | Lista tus conversaciones: nombre, no leídos, archivada, silenciada, último mensaje, etiquetas. |
| get_chat | Lee una conversación completa, incluidos sus participantes y sus etiquetas. |
| archive_chat | Archiva una conversación. |
| unarchive_chat | Saca una conversación del archivo. |
| mute_chat | Silencia las notificaciones de una conversación. |
| unmute_chat | Vuelve a activar las notificaciones de una conversación. |
| sync_chat_history | Trae los mensajes más antiguos a lo que devuelve get_messages. |
| Contactos | |
| get_contact | Lo que WhatsApp revela sobre un número: si está en WhatsApp, nombre, empresa, línea de estado. |
| get_contact_picture | La foto de perfil de un contacto, como una imagen que puedes ver o como un enlace de Sendveo. |
| lookup_numbers | Cuáles de hasta 50 números están en WhatsApp (sí o no, y nada más). |
| Grupos | |
| list_groups | Lista los grupos en los que están tus números. |
| get_group | Lee un grupo: asunto, foto y miembros. |
| get_group_picture | La foto de un grupo, como una imagen o como un enlace de Sendveo. |
| create_group | Crea un grupo con un asunto, miembros y un primer mensaje opcional. |
| add_group_members | Añade personas a un grupo, toda la lista en una llamada, comprobada antes de que nadie entre. Un rechazo a mitad de camino deja dentro los primeros números, y el error los nombra. |
| remove_group_member | Elimina a alguien de un grupo (nunca a ti mismo: usa leave_group). |
| leave_group | Saca tu propio número de un grupo. |
| Salud y perfil | |
| get_number_health | ¿Funciona este número? Su estado, su salud y lo que le ha pasado. |
| list_number_events | El historial de salud por sí solo. Recórrelo página a página con un cursor. |
| get_number_profile | Lo que tu propia línea publica sobre sí misma: nombre, info, empresa, foto. Solo lectura. |
| get_number_picture | La foto de tu propia línea, como una imagen que puedes ver o como un enlace de Sendveo. |
| Etiquetas | |
| list_labels | Tus etiquetas, con cuántas conversaciones lleva cada una. |
| create_label | Crea una etiqueta: un nombre y un color opcional de una paleta fija. |
| update_label | Renombra una etiqueta o cambia su color. |
| delete_label | Elimina una etiqueta. Desaparece de todas las conversaciones que la llevaban. |
| add_chat_label | Pone una etiqueta en una conversación, por id o por nombre (un nombre nuevo la crea). |
| remove_chat_label | Quita una etiqueta de una conversación. |
| Webhook | |
| get_webhook | Muestra la URL a la que Sendveo envía los mensajes entrantes. |
| set_webhook | Define o reemplaza esa URL. |
| Facturación | |
| get_billing | Muestra tu saldo y tus plazas: el saldo disponible de tu cuenta, las plazas con tarjeta y con saldo, cualquier renovación mensual impagada, y si puedes comprar con tarjeta o activar números con tu saldo. |
connect_number, refresh_qr y reconnect_number aceptan un parámetro opcional method. qr (por defecto) devuelve un QR para escanear desde WhatsApp en Dispositivos vinculados, Vincular un dispositivo. code devuelve un código de 8 caracteres para escribir en Vincular con número de teléfono: úsalo cuando estés en el mismo teléfono que tiene el número y no puedas escanear la pantalla. Ambos caducan y rotan, así que pide uno nuevo si deja de funcionar.
Opción A: pega la URL e inicia sesión (recomendado)
Añade Sendveo a tu asistente como servidor MCP remoto. Solo necesitas un valor, la URL MCP de Sendveo. No hay nada que instalar ni ninguna clave que pegar: tu asistente abre una página de Sendveo donde inicias sesión y apruebas la conexión.
https://mcp.sendveo.com/mcpEn Claude
- Abre Ajustes, luego Conectores, y elige Añadir conector personalizado.
- Pega la URL MCP de Sendveo de arriba y guarda. Tu asistente encuentra el resto por su cuenta.
- Se abre una página de Sendveo en tu navegador. Inicia sesión con el correo y la contraseña que usas para el panel.
- Lee lo que pide el asistente y la dirección a la que te devolverá, y pulsa Permitir. Si pulsas Rechazar, no se concede nada.
El asistente recibe una conexión ligada a tu cuenta, con los permisos que muestra esa pantalla de aprobación. Caduca al cabo de una hora y se renueva sola mientras la conexión está en uso. Nunca pegas una clave en el asistente, y nada de lo que apruebas alcanza otra cuenta, la consola de operador ni tu contraseña.
Para desconectar, elimina el conector en tu asistente. Una conexión que elimines desde Sendveo deja de funcionar de inmediato y para siempre.
Si no se abre ninguna página de inicio de sesión, comprueba que la URL termina en /mcp. Si tu asistente informa de que no pudo alcanzar el servicio de inicio de sesión, Sendveo no es accesible desde tu red: la misma comprobación que cargar el panel.
ChatGPT, Cursor y otros asistentes compatibles con MCP usan la misma URL en sus propios ajustes de servidor MCP remoto, y te hacen iniciar sesión igual.
Opción B: local (en tu equipo)
Si prefieres mantener la clave en tu propio equipo, ejecuta el servidor MCP de Sendveo en local. Requiere Node.js 22 o superior. El asistente lo inicia con npx @sendveo/mcp y le pasa tu clave mediante la variable de entorno SENDVEO_API_KEY.
Añade el bloque de abajo a la configuración MCP de tu asistente. En Claude Desktop es claude_desktop_config.json; en Claude Code ejecuta claude mcp add o edita .mcp.json; Cursor usa .cursor/mcp.json. El bloque es el mismo en todos.
{
"mcpServers": {
"sendveo": {
"command": "npx",
"args": ["-y", "@sendveo/mcp"],
"env": {
"SENDVEO_API_KEY": "YOUR_SENDVEO_API_KEY"
}
}
}
}Sustituye el texto de ejemplo por tu clave, reinicia el asistente y pídele que liste tus números de Sendveo. Si el servidor se cierra de inmediato, comprueba que SENDVEO_API_KEY está definida.
Con una clave de API en lugar de iniciar sesión
Iniciar sesión es la forma normal de usar la URL alojada. Si tu herramienta no puede hacerlo, un script, una llamada curl o un cliente que solo te deja definir cabeceras, la misma URL también acepta una clave de API de Sendveo enviada como token bearer. Cada solicitud se autentica solo con esa clave y se limita a la cuenta de esa clave.
https://mcp.sendveo.com/mcpAuthorization: Bearer YOUR_SENDVEO_API_KEYÁmbitos
Cada conexión lleva ámbitos, y cada herramienta necesita uno. Al iniciar sesión, la pantalla de aprobación los enumera en lenguaje claro antes de que pulses Permitir. Una clave de API nueva recibe todos los ámbitos por defecto, salvo el atajo de solo lectura, así que funciona con todas las herramientas desde el principio. Si una herramienta informa de que falta un ámbito, ajusta la clave en Claves de API en tu panel, o vuelve a conectar y aprueba el permiso que falta.
| Ámbito | Herramientas |
|---|---|
| numbers:read | list_numbers, get_number, get_billing, get_number_health, list_number_events, get_number_profile, get_number_picture |
| numbers:write | connect_number, refresh_qr, reconnect_number, disconnect_number, remove_number |
| messages:read | get_messages, get_message, get_attachment |
| messages:send | send_message, send_typing |
| messages:manage | react_to_message, remove_reaction, forward_message, delete_message, mark_chat_read |
| chats:read | list_chats, get_chat, list_labels |
| chats:manage | archive_chat, unarchive_chat, mute_chat, unmute_chat, sync_chat_history, create_label, update_label, delete_label, add_chat_label, remove_chat_label |
| contacts:read | get_contact, get_contact_picture, lookup_numbers |
| groups:read | list_groups, get_group, get_group_picture |
| groups:manage | create_group, add_group_members, remove_group_member, leave_group |
| webhooks:manage | get_webhook, set_webhook |
| *:read | Todos los ámbitos de lectura a la vez (una conexión de solo lectura): las herramientas de numbers:read, messages:read, chats:read, contacts:read y groups:read, y nada que escriba. |
messages:manage, chats:read, chats:manage, contacts:read, groups:read y groups:manage se añadieron el 16 de septiembre de 2026. Una clave de API creada antes de esa fecha no tiene ninguno de ellos y no puede recibirlos: crea una clave nueva en tu panel, o vuelve a conectar el asistente y aprueba los permisos. Todo lo demás sigue funcionando con la clave antigua.
La facturación es de solo lectura y la cubre numbers:read: no existe un ámbito de facturación aparte.
Seguridad
- Iniciar sesión nunca da tu contraseña al asistente, y el servidor alojado no guarda ninguna clave de API. Cada solicitud se autentica con la credencial que lleva, y el servidor no conserva ninguna.
- Cada solicitud queda aislada en la cuenta que hay detrás de la conexión. Las funciones de operador no son accesibles por MCP.
- Hay límites de frecuencia, por clave y por origen. Una respuesta
429significa: baja el ritmo y reintenta en un momento. - Trata la clave como una contraseña. Prefiere una clave limitada a lo que el asistente necesita, y revócala desde el panel si se filtra.
Solución de problemas
| Ves | Qué hacer |
|---|---|
401 o Invalid or missing Sendveo API key | Tu conexión fue revocada o no pudo renovarse, o la clave de API es incorrecta, no está definida, o no se envía como Authorization: Bearer .... Vuelve a conectar, o copia una clave nueva desde tu panel. |
No available slot | Has usado todas tus plazas de números. Compra una plaza con tarjeta o activa una con tu saldo en Facturación en tu panel y reintenta connect_number. |
429 o Rate limit exceeded | Demasiadas solicitudes en poco tiempo. Espera un momento y reintenta, y pide al asistente que haga menos llamadas a la vez. |
does not have the scope required | Concede el ámbito que falta a la clave en Claves de API, o crea una clave nueva con todos los ámbitos. |