centralita-vpbx-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@centralita-vpbx-mcp show me calls from the last hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
centralita-vpbx-mcp
MCP (Model Context Protocol) para la centralita virtual vpbx.me (plataforma de PBX en la nube basada en Java/JAX-RS sobre FreeSWITCH). Da a un asistente compatible con MCP (Claude Code, Claude Desktop, etc.) acceso a la telefonía: historial, grabaciones, llamadas en tiempo real, click-to-call, control de llamadas, extensiones, colas, agentes, contactos y buzones.
Arquitectura TypeScript/Node sobre el SDK oficial de MCP. La API está documentada en API_REFERENCE.md.
⚠️ Proyecto comunitario, no oficial de la plataforma. Úsalo solo con centralitas para las que tengas autorización.
Qué puede hacer (52 herramientas)
🟢 Solo lectura (siempre disponibles)
Tiempo real:
pbx_live_status(llamadas en curso + estado de extensiones).Historial (CDR):
pbx_list_calls,pbx_get_call,pbx_count_calls.Grabaciones:
pbx_get_recording_url,pbx_download_recording(guarda el MP3 a disco),pbx_download_voicemail_audio.Extensiones:
pbx_list_extensions,pbx_get_extension,pbx_find_extension_by_username.Colas:
pbx_list_queues,pbx_get_queue,pbx_queue_callers,pbx_queue_state,pbx_queue_waittime.Agentes:
pbx_list_agents,pbx_get_agent,pbx_agent_breaktypes,pbx_agent_status,pbx_agent_statuscount.Contactos:
pbx_list_contacts,pbx_get_contact.Locuciones / buzones:
pbx_list_announcements,pbx_get_announcement,pbx_list_voicemails,pbx_get_voicemail.Encuestas:
pbx_list_surveys.
🔵 Atajos / informes (solo lectura, alto valor)
pbx_calls_in_range— todas las llamadas de un día/rango (pagina solo y deduplica) + resumen.pbx_calls_report— informe por extensión: salientes/entrantes/atendidas/minutos, resolviendo el número de extensión a su nombre.pbx_extension_directory— directorio número → nombre → email.pbx_recordings_in_range— llamadas grabadas de un periodo, listas para descargar y transcribir.
🟠 Acciones de llamada — candado CENTRALITA_ENABLE_CALLS
pbx_originate_call, pbx_click_to_call_external, pbx_click_to_call_queue, pbx_click_to_call_inverse_queue, pbx_hangup, pbx_schedule_hangup, pbx_blind_transfer, pbx_attended_transfer_start/complete/cancel, pbx_start_recording, pbx_stop_recording, pbx_broadcast_audio.
🔴 Escritura de configuración — candado CENTRALITA_ENABLE_WRITES
pbx_update_extension, pbx_reset_sip_password, pbx_update_contact, pbx_set_agent_status, pbx_update_cdr_vars, pbx_mark_voicemail_read/unread, pbx_delete_voicemail.
Related MCP server: 3CX MCP Server
Seguridad por capas
Tres candados independientes, todos OFF por defecto (arranca en solo lectura):
Variable | Por defecto | Desbloquea |
|
| Originar/colgar/transferir/grabar llamadas reales |
|
| Editar extensiones/contactos/agentes, borrar buzones… |
|
| Devolver contraseñas SIP/web en claro (si no, se redactan) |
Las tools llevan anotaciones MCP (readOnlyHint / destructiveHint) para que el cliente agrupe lectura vs. acciones en su panel de permisos.
Nota:
GET /api/extensionde la plataforma puede devolver contraseñas SIP en claro. Este MCP las redacta por defecto. Trata tuCENTRALITA_API_KEYcomo un secreto sensible.
Instalación
git clone <este-repo> centralita-vpbx-mcp
cd centralita-vpbx-mcp
npm install
npm run buildCopia .env.example a .env y pon tu CENTRALITA_API_KEY.
Uso
Local (Claude Code / Claude Desktop · stdio)
npm start # solo lecturaRegistro en claude_desktop_config.json (o .mcp.json de Claude Code):
{
"mcpServers": {
"centralita": {
"command": "node",
"args": ["/ruta/a/centralita-vpbx-mcp/dist/index.js"],
"env": {
"CENTRALITA_API_KEY": "TU_API_KEY",
"CENTRALITA_ENABLE_CALLS": "false",
"CENTRALITA_ENABLE_WRITES": "false"
}
}
}
}Para permitir click-to-call, pon CENTRALITA_ENABLE_CALLS a "true".
Remoto (HTTP)
npm run start:http # escucha en http://0.0.0.0:8788/mcpProtégelo con CENTRALITA_MCP_AUTH_TOKEN (cabecera Authorization: Bearer <token>) y ponlo tras HTTPS. Endpoint de salud: GET /health.
Validación
node test-mcp.mjsComprueba el handshake MCP, lista las 52 tools, hace una lectura real (pbx_count_calls) y verifica que el candado de acciones bloquea pbx_hangup.
Arquitectura
src/
config.ts Carga .env + candados de seguridad
client.ts Cliente HTTP (X-Api-Key) + descarga binaria
util.ts jsonResult, ensureCalls/ensureWrites, fechas, redacción de secretos
server.ts Monta el McpServer y registra los 4 módulos
index.ts Arranque stdio (local) o HTTP (remoto)
tools/
read.ts Lectura (CDR, grabaciones, extensiones, colas, agentes, contactos, buzones)
workflow.ts Atajos/informes (paginado de CDR, informe por extensión, directorio)
actions.ts Acciones de llamada (candado CENTRALITA_ENABLE_CALLS)
write.ts Escritura de configuración (candado CENTRALITA_ENABLE_WRITES)Licencia
MIT — ver LICENSE.
Available Tools
52 toolspbx_agent_breaktypesTipos de pausa de agenteARead-only
Catálogo de tipos de pausa/descanso de agentes.
Inputs: no named parameters.
pbx_agent_statusCambios de estado de agentesARead-only
Histórico/listado de cambios de estado de agentes.
Inputs: no named parameters.
pbx_agent_statuscountConteo de estados de agentesCRead-only
Conteo agregado de cambios de estado de agentes.
Inputs: no named parameters.
pbx_attended_transfer_cancelTransferencia atendida — cancelarA
Cancela una transferencia atendida en curso y recupera la llamada original.
Inputs: callId (required).
pbx_attended_transfer_completeTransferencia atendida — completarA
Completa la transferencia atendida iniciada previamente (une las dos partes y sale).
Inputs: callId (required).
pbx_attended_transfer_startTransferencia atendida — iniciarA
Inicia una transferencia con consulta: pone la llamada en espera y marca a 'destination' para hablar antes de completar. ⚠️ Llamada real.
Inputs: callId (required), destination (required).
pbx_blind_transferTransferencia ciegaADestructive
Transfiere la llamada en curso a 'destination' sin consulta previa. ⚠️ Desvía una llamada real.
Inputs: callId (required), destination (required).
pbx_broadcast_audioReproducir una locución en una llamadaA
Inyecta/reproduce una locución (announcementId) dentro de la llamada en curso. ⚠️ Audio en una llamada real.
Inputs: callId (required), announcementId (required).
pbx_calls_in_rangeLlamadas de un periodo (paginado automático)ARead-only
Recupera TODAS las llamadas de un día o rango recorriendo la paginación del CDR (tope 50/petición) y deduplicando. Devuelve la lista completa y un resumen: total, por tipo (entrante/saliente/interna), atendidas vs no atendidas y por causa de cuelgue.
Inputs: to, date, from, desde, +2 more.
pbx_calls_reportInforme de llamadas por trabajadorARead-only
Productividad telefónica por extensión en un día/rango: llamadas salientes hechas (y cuántas con respuesta), entrantes atendidas y minutos en línea. Resuelve el número de extensión a nombre del trabajador.
Inputs: to, date, from, desde, +1 more.
pbx_click_to_call_externalClick-to-call externo (dos números)A
Conecta dos números cualesquiera 'from' y 'to' a través de la centralita (callback). ⚠️ Hace sonar teléfonos reales.
Inputs: to (required), from (required), timeout, outboundId, +2 more.
pbx_click_to_call_inverse_queueClick-to-call inverso de colaC
Variante inversa: marca a 'to' en nombre de la cola. ⚠️ Llamada real.
Inputs: to (required), queueNumber (required), outboundId, forcedCallerIdNumber.
pbx_click_to_call_queueClick-to-call hacia una colaB
Llama a 'to' y, al contestar, lo encola en la cola indicada. ⚠️ Llamada real.
Inputs: to (required), queueNumber (required), outboundId, maxWaitingCallers, +1 more.
pbx_count_callsContar llamadas (CDR)ARead-only
Número total de llamadas registradas (opcionalmente dentro de un rango).
Inputs: to, date, from, desde, +1 more.
pbx_delete_voicemailBorrar mensaje de vozBDestructiveIdempotent
Elimina un mensaje de voz del buzón de una extensión. ⚠️ Acción irreversible.
Inputs: extensionId (required), voicemailId (required).
pbx_download_recordingDescargar grabación a discoARead-only
Descarga el MP3 de la grabación de una llamada y lo guarda en la carpeta de grabaciones del servidor (CENTRALITA_RECORDINGS_DIR). Devuelve la ruta local del archivo, lista para transcribir.
Inputs: callId (required), filename.
pbx_download_voicemail_audioDescargar audio de buzón a discoCRead-only
Descarga el audio de un mensaje de voz y lo guarda en la carpeta de grabaciones. Devuelve la ruta local.
Inputs: extensionId (required), voicemailId (required), filename.
pbx_extension_directoryDirectorio de extensionesARead-only
Listado compacto número → nombre → email → id de cada extensión, para resolver quién es quién. Sin contraseñas.
Inputs: no named parameters.
pbx_find_extension_by_usernameBuscar extensión por númeroARead-only
Devuelve el id interno de una extensión a partir de su número/username (ej. '1003').
Inputs: username (required).
pbx_get_agentVer agenteCRead-only
Detalle de un agente por su id.
Inputs: id (required).
pbx_get_announcementVer locuciónBRead-only
Detalle de una locución por su id. El audio base64 se omite salvo includeAudio=true.
Inputs: id (required), includeAudio.
pbx_get_callVer una llamada (CDR)BRead-only
Detalle de una llamada concreta por su callId (uuid).
Inputs: callId (required).
pbx_get_contactVer contacto por númeroARead-only
Busca un contacto de la agenda por su número de teléfono.
Inputs: number (required).
pbx_get_extensionVer extensiónARead-only
Ficha de una extensión por su id interno (no el número). Contraseñas redactadas salvo CENTRALITA_ALLOW_SECRETS=true.
Inputs: extensionId (required).
pbx_get_queueVer colaBRead-only
Detalle de una cola por su id.
Inputs: queueId (required).
pbx_get_recording_urlURL de la grabaciónARead-only
Devuelve la URL directa de descarga (audio/mpeg) de la grabación de una llamada. Requiere cabecera X-Api-Key para descargarla. Para guardarla en disco usa 'pbx_download_recording'.
Inputs: callId (required).
pbx_get_voicemailVer mensaje de vozCRead-only
Detalle de un mensaje de voz concreto.
Inputs: extensionId (required), voicemailId (required).
pbx_hangupColgar una llamada en cursoADestructive
Cuelga la llamada activa indicada por su callId/uuid (lo da pbx_live_status). ⚠️ Corta una llamada real.
Inputs: callId (required).
pbx_list_agentsListar agentesCRead-only
Agentes del call center.
Inputs: no named parameters.
pbx_list_announcementsListar locucionesARead-only
Locuciones/anuncios (IVR, etc.). El audio en base64 se omite por defecto para no saturar; pásalo con includeAudio=true.
Inputs: includeAudio.
pbx_list_callsListar llamadas (CDR)ARead-only
Registro de llamadas (Call Detail Records). Devuelve como máximo 50 por petición, las más recientes primero, dentro del rango. Para recorrer un día/periodo entero usa 'pbx_calls_in_range', que pagina solo.
Inputs: to, date, from, desde, +1 more.
pbx_list_contactsListar contactos (agenda)ARead-only
Agenda de la centralita (nombre, número, marcación rápida). Filtra por subcadena de nombre con 'q' y limita con 'limit'.
Inputs: q, limit.
pbx_list_extensionsListar extensionesARead-only
Lista de extensiones (usuarios SIP) con su número, nombre, email, dominio y estado. Las contraseñas SIP/web se redactan salvo que el servidor arranque con CENTRALITA_ALLOW_SECRETS=true.
Inputs: no named parameters.
pbx_list_queuesListar colasCRead-only
Colas de llamadas configuradas.
Inputs: no named parameters.
pbx_list_surveysListar encuestasCRead-only
Encuestas de satisfacción configuradas.
Inputs: no named parameters.
pbx_list_voicemailsListar buzones de voz de una extensiónARead-only
Mensajes de voz de una extensión (por su id interno).
Inputs: extensionId (required).
pbx_live_statusLlamadas en curso (tiempo real)ARead-only
Estado en vivo de la centralita: extensiones ocupadas/libres y las llamadas activas ahora mismo (uuid, quién llama, destino, estado). El uuid sirve como callId para colgar/transferir/grabar.
Inputs: no named parameters.
pbx_mark_voicemail_readMarcar buzón como leídoBDestructive
Marca un mensaje de voz como escuchado/leído.
Inputs: extensionId (required), voicemailId (required).
pbx_mark_voicemail_unreadMarcar buzón como no leídoCDestructive
Marca un mensaje de voz como no escuchado.
Inputs: extensionId (required), voicemailId (required).
pbx_originate_callOriginar llamada (click-to-call interno)A
Lanza una llamada: primero hace sonar la extensión 'from' y, cuando descuelga, marca a 'to'. Es el click-to-call clásico para que un trabajador llame a un número. ⚠️ Hace sonar teléfonos reales.
Inputs: to (required), from (required), timeout, autoAnswer, +2 more.
pbx_queue_callersLlamadas en espera en colasARead-only
Personas esperando en cola ahora mismo. Sin queueId devuelve todas las colas; con queueId, solo esa.
Inputs: queueId.
pbx_queue_stateEstado de una colaCRead-only
Estado en vivo de una cola por su número.
Inputs: queueNumber (required).
pbx_queue_waittimeTiempo de espera de una colaARead-only
Tiempo de espera estimado/actual de una cola por su número.
Inputs: queueNumber (required).
pbx_recordings_in_rangeGrabaciones de un periodoARead-only
Lista las llamadas con grabación (recording=true) de un día/rango, con su metadato y la URL de descarga del MP3. Punto de partida para descargar y transcribir. No descarga nada por sí mismo.
Inputs: to, date, from, desde, +1 more.
pbx_reset_sip_passwordResetear contraseña SIP de una extensiónADestructive
Genera una nueva contraseña SIP para la extensión. ⚠️ El teléfono/softphone dejará de registrarse hasta reconfigurarlo con la nueva clave.
Inputs: extensionId (required).
pbx_schedule_hangupProgramar cuelgue de una llamadaBDestructive
Cuelga la llamada indicada dentro de N segundos. ⚠️ Cortará una llamada real.
Inputs: callId (required), seconds (required).
pbx_set_agent_statusCambiar estado de un agenteBDestructive
Cambia el estado de un agente (login/logout/pausa…). 'newStatus' es el código de estado de la plataforma.
Inputs: id (required), newStatus (required).
pbx_start_recordingEmpezar a grabar una llamada en cursoA
Activa la grabación de la llamada activa indicada. Aviso legal: graba a personas reales; asegúrate del consentimiento/aviso.
Inputs: callId (required).
pbx_stop_recordingParar de grabar una llamada en cursoC
Detiene la grabación de la llamada activa indicada.
Inputs: callId (required).
pbx_update_cdr_varsActualizar variables de una llamada (CDR)ADestructive
Escribe variables/etiquetas (var1…var5 u otras) sobre el registro de una llamada. Útil para clasificar llamadas (cliente, motivo, expediente…).
Inputs: vars (required), callId (required).
pbx_update_contactCrear/editar contacto de la agendaCDestructive
Da de alta o actualiza un contacto de la agenda de la centralita (nombre, número, marcación rápida).
Inputs: name (required), number (required), speedDial.
pbx_update_extensionEditar extensiónADestructive
Modifica campos de una extensión (ej. name, email, dnd, cw…). Pasa solo los campos a cambiar en 'fields'. Consulta primero la ficha con pbx_get_extension.
Inputs: fields (required), extensionId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 52 tools
Most tools have clear, distinct purposes (e.g., originate_call vs click_to_call_external), but several call initiation and transfer tools are quite similar and could confuse an agent without careful reading of descriptions.
All tools follow a consistent 'pbx_verb_noun' pattern, with descriptive names like pbx_list_extensions, pbx_get_call, pbx_hangup. Naming is uniform and predictable.
52 tools is high, potentially overwhelming for an agent. However, they are organized by function (calls, queues, agents, etc.) and serve a complex domain, so it is borderline appropriate.
The set covers core PBX operations (calls, queues, agents, voicemails, etc.) well, but lacks management tools for queues, announcements, and surveys (only list/get available). Notable gaps in CRUD lifecycle.
Maintenance
Related MCP Connectors
MCP server for making phone calls: your agent books, cancels, asks and waits on hold for you.
Hosted MCP server for your Gmail, Outlook and IMAP mail, with mailboxes and scopes set per agent.
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
MCP server for Vonage API documentation, code snippets, tutorials, and troubleshooting.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Vapi.ai that enables AI coding assistants to manage voice assistants, make outbound calls, and access call history directly from their development environment.1610 npm2MIT
- AlicenseAqualityCmaintenanceAn MCP server that connects Claude to a 3CX Phone System (V20+), enabling user management, call monitoring, contact search, and forwarding configuration.221MIT

VoIPbin MCP Serverofficial
AlicenseBqualityBmaintenanceAn MCP server that enables AI assistants to interact with the VoIPbin CPaaS platform, exposing tools for managing calls, flows, messaging, conferencing, and more.661MIT- AlicenseNot gradedqualityBmaintenanceMCP server that connects AI assistants to Five9 contact center, allowing management of campaigns, agents, lists, and statistics via natural language commands.18MIT