five9-mcp
☎️ five9-mcp
Tu centro de contacto Five9, en manos de tu IA.
Un servidor MCP de código abierto que conecta Claude, ChatGPT o cualquier cliente MCP con el centro de contacto en la nube Five9, que se ejecuta en Cloudflare Workers con cero dependencias.
Inicio rápido · Conectar Claude · Conectar ChatGPT · Herramientas · Arquitectura
Pídele a tu IA cosas como:
"¿Quién está en una llamada ahora mismo y cuánta cola hay en ventas?" 📊 "Crea una campaña de previsualización para la lista de reactivación, adjunta la habilidad de ventas e iníciala." 🛠️ "Detén la campaña OUTBOUND_AGED y añade estos 3 clientes potenciales a la lista de devolución de llamadas." 📞 "Incorpora al nuevo agente: crea el usuario, asigna la habilidad de facturación en nivel 2." 🧑💼 "¿Está 555-867-5309 en nuestra lista DNC? Compruébalo antes de que alguien marque ese número." 🚫 "Extrae el informe de registro de llamadas de ayer y resume las tasas de abandono." 📈 "Constrúyeme un IVR completo: opción 1, programación; opción 2, facturación; fuera de horario, al buzón de voz." 🧩
En el fondo, este servidor habla con los SOAP Web Services de Configuration (administración) y Statistics (supervisión) de Five9 — las API que aún sustentan la superficie administrativa de Five9 — y los expone como herramientas JSON limpias a través de MCP streamable HTTP. Sobres SOAP hechos a mano, un analizador XML de ~60 líneas, sin paquetes npm. Cada herramienta se ha probado contra un dominio Five9 real.
✨ Interfaz web integrada
Despliégalo y tu Worker servirá algo más que una API:
Página | Qué obtienes |
| Una página de inicio pulida: estado del servidor en vivo, esta guía de configuración, tutoriales de conexión de IA paso a paso y el catálogo completo de herramientas |
| El asistente de configuración: introduce las credenciales de Five9 en tu navegador, verifícalas en vivo y recibe tu clave de acceso. Sin terminal, sin comandos de secretos |
| Una consola interactiva: pega tu clave de acceso, elige cualquiera de las 77 herramientas agrupadas, rellena un formulario generado a partir de su esquema y ejecútalo contra tu dominio Five9 real desde el navegador |
| El propio endpoint MCP (HTTP streamable, sin estado) |
| Comprobación de estado JSON |
La consola es la forma más rápida de verificar las credenciales, explorar lo que devuelve cada herramienta o depurar una campaña, sin necesidad de IA.
🚀 Inicio rápido — sin necesidad de terminal
Necesitas una cuenta gratuita de Cloudflare y un usuario de Five9 con acceso a la API: crea un usuario de API de Five9 dedicado con permisos limitados a lo que quieras que haga la IA; no reutilices un inicio de sesión de administrador personal.
1 — Despliega en Cloudflare (un clic, en tu navegador)
Inicia sesión en Cloudflare y ve haciendo clic: se creará tu propia copia de este Worker (junto con el espacio de nombres KV que necesita) y te dará una URL como https://five9-mcp.you.workers.dev.
2 — Ejecuta el asistente de configuración (en tu navegador)
Abre /setup en tu nuevo servidor. Introduce tu nombre de usuario, contraseña y región de Five9: el asistente las verifica en vivo contra Five9 antes de guardarlas y te entrega tu clave de acceso (se muestra una sola vez; guárdala en un gestor de contraseñas).
3 — Conecta tu IA (tutoriales a continuación) y pídele que "compruebe la conexión y liste mis campañas". 🎉
git clone https://github.com/ryanshatz/five9-mcp
cd five9-mcp
npx wrangler deploy # provisions the CONFIG KV namespace on first deployLuego puedes usar el asistente /setup u omitirlo y gestionar las credenciales como secretos de Wrangler (los secretos tienen prioridad sobre el asistente):
npx wrangler secret put FIVE9_USERNAME # e.g. apiuser@yourdomain
npx wrangler secret put FIVE9_PASSWORD
npx wrangler secret put MCP_AUTH_TOKEN # a long random string — this is the key to your serverLos valores predeterminados están en wrangler.toml y funcionan para dominios de EE. UU.:
Variable | Valor por defecto | Notas |
|
| UE: |
|
| Versión de WSDL de Config Web Services |
|
| Versión de WSDL de Statistics Web Services |
🔌 Conecta tu IA
Conecta Claude (web y escritorio)
Los conectores personalizados están disponibles en los planes Free (un conector), Pro, Max, Team y Enterprise.
En claude.ai o en la aplicación de escritorio de Claude, abre Configuración → Conectores.
Haz clic en Añadir conector personalizado.
Ponle el nombre Five9 y pega la URL de tu servidor incluyendo la ruta
/mcp:https://<your-worker>.workers.dev/mcpHaz clic en Añadir y luego en Conectar. Claude detecta automáticamente el OAuth integrado de este servidor y abre su página de autorización.
En la pantalla 🔐 five9-mcp, pega tu
MCP_AUTH_TOKENcomo clave de acceso y haz clic en Autorizar.En cualquier chat, abre el menú Buscar y herramientas (+) y asegúrate de que el conector de Five9 está activado.
Team/Enterprise: un propietario añade primero el conector en Configuración de la organización → Conectores; después, los miembros hacen clic en Conectar en su propia configuración para autorizarlo.
Conecta ChatGPT
Los conectores MCP personalizados requieren el modo de desarrollador (Plus/Pro; en Business/Enterprise un administrador debe permitir conectores personalizados).
En ChatGPT en la web, abre Configuración → Apps y conectores (a veces etiquetado solo como Conectores).
En Configuración avanzada, activa el modo de desarrollador.
De vuelta en la página de Conectores, haz clic en Crear.
Ponle el nombre Five9, establece la URL del servidor MCP en
https://<your-worker>.workers.dev/mcpy elige autenticación OAuth.Acepta el aviso de confianza y guarda. ChatGPT abre la página de autorización de este servidor: pega tu
MCP_AUTH_TOKENy haz clic en Autorizar.En un chat nuevo, abre el menú + / herramientas y activa el conector Five9 (los conectores del modo de desarrollador se activan por conversación). ChatGPT te pedirá que confirmes cada llamada a herramienta, algo sensato para cualquier cosa que pueda iniciar un marcador. 😄
Conecta Claude Code
claude mcp add --transport http five9 https://<your-worker>.workers.dev/mcp \
--header "Authorization: Bearer <your MCP_AUTH_TOKEN>"La clave de acceso en bruto funciona directamente como bearer token, sin el baile de OAuth. Ejecuta /mcp dentro de Claude Code para verificarlo.
Cualquier otro cliente MCP
Cualquier cliente que hable MCP streamable HTTP funciona: completa el flujo OAuth o envía la clave de acceso como bearer token:
curl -X POST https://<your-worker>.workers.dev/mcp \
-H "Authorization: Bearer <MCP_AUTH_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_connection","arguments":{}}}'src/oauth.js implementa un servidor de autorización OAuth 2.1 mínimo (descubrimiento de metadatos, registro dinámico de clientes, PKCE S256, tokens de refresco) diseñado para un despliegue de un solo operador:
El «login» en la pantalla de consentimiento es la clave de acceso del servidor (
MCP_AUTH_TOKEN).Todo es sin estado: los ID de cliente, los códigos de autorización y los tokens son blobs firmados con HMAC-SHA256 usando
MCP_AUTH_TOKENcomo clave. Sin KV, sin Durable Objects.Ambas vías de autenticación funcionan a la vez: tokens emitidos por OAuth y la clave en bruto como credencial bearer.
Revoca todo de una vez rotando el secreto:
npx wrangler secret put MCP_AUTH_TOKEN.
🧰 La caja de herramientas
77 herramientas. 🟢 = lectura (siempre segura) · ✏️ = escritura (cambia tu dominio: el servidor indica a las IA que primero confirmen contigo)
69 herramientas SOAP (usuario/contraseña) + 8 herramientas REST de OAuth New Platform (Consumer Key/Secret — consulta OAuth New Platform APIs).
El truco estrella: describe un flujo de llamada en un párrafo y la IA lo diseña, te muestra un diagrama Mermaid en el chat e implementa un script IVR funcional. El modelo nunca improvisa el XML de IVR de Five9: rellena una especificación de flujo JSON restringida (play / menu / business-hours / skill transfer / voicemail / hangup), un validador de grafo comprueba cada rama y referencia, y un código determinista genera XML con la forma del diseñador (el cableado de módulos, la codificación de prompts y el orden de campos se derivan de scripts exportados reales).
Herramienta | Qué hace | |
🟢 |
| Comprueba el grafo de una especificación de flujo y verifica que las habilidades/prompts referenciados existan en el dominio |
🟢 |
| Renderiza una especificación de flujo o un script IVR existente como diagrama de flujo Mermaid |
✏️ |
| Compone el XML completo del script y lo crea en el dominio ( |
✏️ |
| Da voz a un prompt con una voz de IA moderna y lo sube como WAV G.711 u-law listo para Five9. No se necesita clave de API: funciona con Workers AI (Deepgram Aura, ~40 voces) integrado en tu Worker |
Flujo recomendado: valida → renderiza (¡muéstraselo al humano!) → genera prompts → construye → adjúntalo a una campaña entrante. generate_prompt_audio se ejecuta en Cloudflare Workers AI de serie: sin cuenta TTS externa, sin clave de API, fracciones de céntimo por prompt facturadas a la cuenta de Cloudflare en la que ya lo has desplegado. ElevenLabs/OpenAI también funcionan si configuras sus secretos de clave, y los prompts {tts} (la voz de robot integrada de Five9) no necesitan nada en absoluto.
Herramienta | Qué hace | |
🟢 |
| Contexto del operador para la IA: quién ejecuta este servidor y las reglas básicas |
🟢 |
| Verifica que las credenciales de Five9 funcionan; devuelve el número de habilidades visibles |
🟢 |
| Contadores de uso actuales de la API de Five9 frente a los límites de tasa |
Herramienta | Qué hace | |
🟢 |
| Listar campañas (nombre, tipo, estado, modo) |
🟢 |
| Estado + listas adjuntas + DNIS en una sola llamada |
🟢 |
| Configuración COMPLETA de la campaña (modo de marcación, ratios, grabación, wrap-up…) |
✏️ |
| Crear campañas salientes o entrantes, BASIC o ADVANCED |
✏️ |
| Editar cualquier ajuste de la campaña — read-modify-write, pasar solo los cambios |
✏️ |
| Renombrar una campaña |
✏️ |
| Eliminar una campaña |
✏️ |
| start / stop / force_stop / reset / reset_list_positions |
✏️ |
| Adjuntar/desvincular listas de marcación con prioridad |
✏️ |
| Añadir/quitar habilidades de enrutamiento en una campaña |
✏️ |
| Adjuntar/desvincular números entrantes |
✏️ |
| Añadir/quitar disposiciones de agente en una campaña |
🟢 |
| Listar perfiles de campaña (ANI, intentos, tiempos de espera) |
✏️ |
| Crear / modificar / eliminar perfiles de campaña |
✏️ |
| Leer / editar los criterios de selección de registros CRM y el orden de marcación de un perfil |
Herramienta | Qué hace | |
🟢 |
| Listar listas de marcación + recuentos de registros |
✏️ |
| Crear o eliminar una lista de marcación |
✏️ |
| Introducir un lead en una lista (importación asíncrona) |
✏️ |
| Añadir muchos leads en lote en una sola importación asíncrona (modos CRM/lista configurables) |
✏️ |
| Eliminar registros coincidentes de una lista |
🟢 |
| Resultado de una importación asíncrona de lista/CRM |
Herramienta | Qué hace | |
🟢 |
| Buscar contactos por valores exactos de campo |
✏️ |
| Actualizar un contacto (seguridad de coincidencia única por defecto) |
✏️ |
| Actualizar muchos contactos CRM en una importación asíncrona (sondeo con type "crm") |
✏️ |
| Eliminar un contacto (solo cuando coincide exactamente uno) |
🟢 |
| El esquema de campos de contacto del dominio |
✏️ |
| Crear / modificar / eliminar campos CRM personalizados |
Herramienta | Qué hace | |
✏️ |
| Comprobar / añadir / eliminar números en la lista DNC del dominio |
🟢 |
| Reglas de marcación del dominio (restricciones de hora/estado) |
Herramienta | Qué hace | |
🟢 |
| Listar usuarios con información general |
🟢 |
| Registro completo de un usuario: roles, habilidades, grupos |
✏️ |
| Crear un usuario con roles, habilidades y grupos |
✏️ |
| Editar la información de un usuario — pasar solo los cambios |
✏️ |
| Eliminar un usuario |
🟢 |
| Plantillas de roles/permisos |
🟢 |
| Habilidades, con o sin usuarios asignados |
✏️ |
| Crear / modificar / eliminar habilidades |
✏️ |
| Asignar habilidades a usuarios, establecer niveles |
✏️ |
| Otorgar / revocar roles (agent, admin, supervisor, reporting, crmManager) con pestañas de permisos |
🟢 |
| Grupos de agentes + miembros |
✏️ |
| Crear / eliminar grupos, añadir/quitar agentes |
✏️ |
| Códigos de motivo de Not Ready / Logout |
Herramienta | Qué hace | |
🟢 |
| Disposiciones de llamadas y sus ajustes |
✏️ |
| Crear / modificar / renombrar / eliminar disposiciones (incl. temporizadores de remarcación) |
🟢 |
| Scripts IVR — metadatos, o el XML completo de un script |
✏️ |
| Crear / modificar / eliminar scripts IVR (enviar un xmlDefinition completo) |
🟢 |
| Prompts de voz en el dominio |
✏️ |
| Crear / modificar / eliminar prompts de texto a voz |
✏️ |
| Crear / modificar / eliminar prompts WAV pregrabados (base64; G.711 µ-law 8kHz mono) |
🟢 |
| Números entrantes aprovisionados (opcionalmente solo no asignados) |
🟢 |
| Variables de llamada y grupos de variables |
✏️ |
| Crear / eliminar variables de llamada personalizadas |
🟢 |
| Integraciones de conectores web |
✏️ |
| Crear / eliminar conectores web (URL pops que los agentes activan) |
✏️ |
| Listar / crear / eliminar códigos de marcación rápida |
🟢 |
| Ajustes de VCC a nivel de dominio |
Herramienta | Qué hace | |
🟢 |
| Lanzar cualquier informe por carpeta + nombre, rango de tiempo opcional |
🟢 |
| Sondear la salida CSV del informe |
🟢 |
| AgentState, ACDStatus, CampaignState, estadísticas de campaña (incl. vistas de dialer-manager y autodial) |
Estas herramientas usan las APIs REST OAuth 2.0 de la "New Platform" de Five9, no las APIs SOAP que usan las herramientas anteriores. Requieren una credencial de API Access Control (Consumer Key/Secret), no el usuario/contraseña SOAP — ver OAuth New Platform APIs.
Herramienta | Qué hace | |
🟢 |
| Verifica la credencial OAuth — obtiene un bearer token (sin datos del dominio) |
🟢✏️ |
| Llamada autenticada genérica a cualquier endpoint de New Platform (método + ruta + cuerpo), con límite de tasa/backoff y soporte ETag |
🟢✏️ |
| Circles — listar / obtener / crear / eliminar (sin equivalente SOAP) |
🟢 |
| Prompts de voz mediante la API de prompts de New Platform (paginado) |
🟢 |
| Disposiciones mediante la API de interacciones (más completa que la lista SOAP; solo lectura) |
🟢 |
| Metadatos del dominio (id, nombre, tenant, endpoints de servicio) |
🟢 |
| Data Tables (tablas de consulta estructuradas; sin equivalente SOAP) — usa una credencial |
🟢 |
| Filas de una Data Table por id (paginado) |
🔐 OAuth New Platform APIs
Además de las herramientas SOAP, el servidor puede llamar a las APIs REST OAuth 2.0 de la New Platform de Five9 (p. ej. Circles, interacciones, prompts, metadatos del dominio). Estas usan una credencial diferente del usuario/contraseña SOAP:
Un Consumer Key y un Consumer Secret de API Access Control, generados en la Admin Console → API Access Control de Five9 (una función de disponibilidad controlada). Generarlos requiere el permiso
security → applications → Create applications, y la cuenta debe estar migrada a Five9 Identity Service (los usuarios con roles heredados de API/Agente/Supervisor quedan excluidos de la migración hasta que se eliminen esos roles).Configúralos como variables de entorno/secreto (todas separadas de las credenciales SOAP):
FIVE9_CONSUMER_KEY=... # "All APIs access" family credential (default)
FIVE9_CONSUMER_SECRET=...
FIVE9_DOMAIN_ID=131109 # your Admin Console domain id
FIVE9_REST_REGION=US # US | US-ALPHA | CA | EU | IN | UK
# or pin the base URL directly: FIVE9_REST_BASE_URL=https://api.prod.us.five9.net
# Optional second credential for the "Data Tables access" family (its own key):
FIVE9_DT_CONSUMER_KEY=...
FIVE9_DT_CONSUMER_SECRET=...Luego ejecuta rest_check_connection para confirmar el flujo del token. Lo que cada credencial puede alcanzar está determinado por su familia de API + scopes — all-apis-access no otorga literalmente todos los servicios, y el acceso de escritura es por servicio.
Múltiples credenciales / familias. Cada credencial de API Access Control pertenece a una familia (mapeada a un Apigee API Product), y esa familia decide qué servicios puede llamar la clave. El servidor admite credenciales con nombre: default (de FIVE9_CONSUMER_KEY/SECRET) y data-tables (de FIVE9_DT_CONSUMER_KEY/SECRET). Las herramientas de Data Tables usan la credencial data-tables automáticamente; rest_call y rest_check_connection aceptan un argumento credential para elegir una.
Nota: El documento de inicio rápido de Five9 indica el endpoint del token como
/v1/auth/token, pero el endpoint real es/oauth2/v1/token(el que usa este cliente).
🎨 Personalizar el contexto del operador
src/about.js contiene el texto que se sirve a las IA conectadas a través del campo instructions de MCP y de la herramienta about: quién opera el servidor, por qué existe y cómo debe comportarse la IA (p. ej., "confirmar antes de las acciones de escritura"). Edítalo para describir tu propio despliegue — se incluye con el contexto del operador original como ejemplo.
🏗️ Arquitectura
Sin paso de compilación ni dependencias — módulos JS simples en src/:
src/
├── index.js # router, CORS, MCP JSON-RPC handler, /setup endpoint
├── five9.js # SOAP client: envelope builder, ~60-line XML parser, one method per Five9 op
├── tools.js # MCP tool definitions (JSON Schema) + dispatch
├── oauth.js # stateless OAuth 2.1 server (single-operator model)
├── config.js # config resolution: Wrangler secrets > KV (setup wizard)
├── ui.js # landing page, setup wizard, interactive console
└── about.js # operator context — edit this for your deploymentLas peticiones no tienen estado: cada llamada MCP abre un intercambio SOAP nuevo con Five9 mediante autenticación HTTP Basic. La API de Statistics requiere además una llamada a setSessionParameters, que get_realtime_stats realiza en cada invocación.
Los endpoints de Five9 están generados por JAXB y validan el orden de los elementos hijo contra el WSDL (
https://api.five9.com/wsadmin/v13/AdminWebService?wsdl, autenticación HTTP Basic) y se ajustan exactamente al orden de<xs:sequence>— incluidos los tipos base comobasicImportSettings, cuyos elementos van antes que los de la extensión.addToListCsvrequierecleanListBeforeUpdate,crmAddMode,crmUpdateModeylistAddModeaunque el WSDL marca la mayoría de ellos comominOccurs="0".Las importaciones List/CRM son asíncronas: la llamada devuelve un identificador de importación inmediatamente; consulta
get_import_resultpara conocer el resultado.Los valores de los registros de contacto se devuelven envueltos (
<values><data>…</data></values>); varias respuestas devuelven un objeto único donde cabría esperar un array de un elemento.toArray()enfive9.jsnormaliza esto.El orden de los criterios de tiempo de los informes es
<end>antes de<start>(orden alfabético de JAXB).El
xmlDefinitionde IVR es el formato persistido del diseñador visual: los módulos se conectan por GUID (ascendants/singleDescendant/branches), el texto TTS en línea se almacena como documentosspeakElementen gzip+base64, y las comprobaciones de horario comercial comparan las variables de sistema__DAY__(SUN=1..SAT=7) y__TIME__(minutos desde la medianoche).ivr.jsencapsula todo esto.getPromptsno devuelve ningún id de prompt (solo nombre + tipo). Las referencias a prompts de archivo dentro del XML de IVR se aceptan conid 0+ el nombre del prompt y se normalizan en el servidor; el script enviado regresa con eldomainIdañadido por el servidor.
🛡️ Seguridad
Las credenciales de Five9 residen únicamente en tu cuenta de Cloudflare — como secretos de Worker o (ruta del asistente) en un namespace de Workers KV, cifrados en reposo. Ninguna herramienta las devuelve jamás, y los secretos de Wrangler siempre tienen prioridad sobre KV.
El asistente de configuración solo está abierto en un servidor nuevo y sin configurar — ejecútalo justo después de desplegar. Una vez configurado, cualquier cambio requiere la clave de acceso actual, y los servidores gestionados por variables de entorno rechazan por completo los cambios del asistente.
Completa siempre la configuración (o establece
MCP_AUTH_TOKEN). Un servidor sin configurar y sin clave de acceso queda abierto — cualquiera que encuentre la URL puede operar tu centro de contacto.Las herramientas de escritura (✏️ arriba) modifican tu dominio. Ajusta el rol del usuario de la API de Five9 a lo que realmente quieras que haga una IA — los permisos de Five9 son la verdadera frontera de seguridad.
manage_dnc removeydelete_listmerecen una precaución extra; las instrucciones deaboutindican a las IA que confirmen antes de usarlas.La consola almacena tu clave de acceso solo en el localStorage de tu navegador, y las llamadas van al mismo origen hacia tu propio Worker.
💻 Desarrollo
npm run dev # wrangler dev on http://localhost:8787
npm run deploy # wrangler deployPon los secretos locales en .dev.vars (ignorado por git):
FIVE9_USERNAME=apiuser@yourdomain
FIVE9_PASSWORD=...
MCP_AUTH_TOKEN=dev-local-token
# Optional — external AI voice providers for generate_prompt_audio.
# The default (Workers AI / Deepgram Aura) needs no key at all.
ELEVENLABS_API_KEY=...
OPENAI_API_KEY=...
# Optional — OAuth New Platform REST tools (separate credential; see below)
FIVE9_CONSUMER_KEY=...
FIVE9_CONSUMER_SECRET=...
FIVE9_DOMAIN_ID=131109
FIVE9_REST_REGION=US
FIVE9_DT_CONSUMER_KEY=... # optional: "Data Tables access" family
FIVE9_DT_CONSUMER_SECRET=...Luego abre http://localhost:8787/console, pega dev-local-token y ejecuta las herramientas contra tu dominio — o haz una prueba rápida desde la CLI con el fragmento de curl de arriba.
🤝 Contribuciones
¡Se aceptan PRs! La API Config de Five9 tiene ~180 operaciones y este servidor envuelve 69 de las más útiles — el patrón en five9.js + tools.js es fácil de extender (lee primero las notas de SOAP y ahórrate una pelea con el WSDL). Por favor, mantén la restricción de cero dependencias.
📄 Licencia
MIT · creado por Ryan Shatzkamer
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage AI assistants, history, calls, campaigns, contacts, knowledge, messaging, and automations.
Voice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP
Give your AI agent a phone: place calls, navigate IVRs, wait on hold, get structured answers.
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/shaunwestALP/five9-mcp-mvp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server