Open in
CLI de ThunderPhone
Inicia sesión, administra agentes de voz y llamadas, configura clientes MCP y crea la estructura inicial de proyectos desde la terminal.
La CLI requiere Node.js 18.18 o posterior. Ejecútala con npx o instálala globalmente:
npm install -g thunderphone
thunderphone --helpIniciar sesión
npx thunderphone login
thunderphone whoami --jsonEl inicio de sesión muestra un código de verificación, abre el navegador y espera la autorización.
Usa --no-browser en una máquina sin interfaz gráfica y abre la URL mostrada en otro lugar.
El inicio de sesión del dispositivo requiere que la API tenga habilitado el flujo de dispositivo OAuth. Una clave de API de organización en THUNDERPHONE_API_KEY también puede autenticar comandos y tiene prioridad
sobre las credenciales de inicio de sesión almacenadas.
Las credenciales se almacenan por perfil en ~/.config/thunderphone/credentials.json
con modo de archivo 0600. XDG_CONFIG_HOME y THUNDERPHONE_CONFIG_DIR reemplazan el
directorio. Los tokens de acceso se renuevan automáticamente y los tokens de renovación rotativos se
guardan de forma atómica. El inicio de sesión nunca muestra los tokens.
thunderphone login --profile work
thunderphone agents list --profile work --json
thunderphone logout --profile workTHUNDERPHONE_PROFILE establece el perfil predeterminado. El cierre de sesión elimina las credenciales locales;
no revoca la autorización del servidor. La API predeterminada es https://api.thunderphone.com.
Usa --api-base-url o THUNDERPHONE_API_BASE_URL para otra API. El token de un perfil
no puede enviarse a una URL de API configurada diferente; inicia sesión en esa URL con un perfil independiente.
Comandos
Cada comando acepta --json. Los datos correctos se envían a stdout; los errores se envían a stderr
con un código de salida distinto de cero. Sin --json, la salida es una tabla compacta o una lista de campos.
JSON conserva la estructura de respuesta de la API, con los campos de credenciales redactados. El servicio MCP
reserva stdout para el protocolo MCP.
| Comando | Propósito |
|---|---|
login [--no-browser] [--scope "scopes"] | Autorizar mediante un código de dispositivo |
logout, whoami | Eliminar credenciales locales; listar organizaciones accesibles |
agents list, agents get ID | Leer agentes |
agents create --file agent.json | Crear un agente |
agents update ID --file agent.json | Guardar un borrador de agente |
agents deploy ID, agents delete ID | Implementar el borrador; eliminar un agente |
numbers list | Leer números telefónicos |
numbers provision --country US --area-code 415 | Aprovisionar un número entrante de EE. UU. |
numbers assign NUMBER_ID --agent ID | Asignar un agente entrante |
sms send TO --from FROM --body TEXT --idempotency-key KEY | Enviar SMS mediante un número de operador conectado por el cliente con reintento seguro |
sms list [--limit N], sms get UUID | Listar o inspeccionar registros de SMS |
call TO --agent ID --from FROM [--wait] | Realizar una llamada saliente; esperar opcionalmente su transcripción |
calls list [--limit N] [--agent ID] | Listar llamadas (límite de 1 a 200) |
calls get ID, calls transcript ID | Leer una llamada o su transcripción |
test run AGENT_ID [--scenario ID] --consent-to-charge | Ejecutar escenarios guardados facturables mediante el canal web |
test status RUN_ID [--agent ID] | Inspeccionar un lote, con detalles del escenario cuando se proporciona un agente |
import VENDOR export.json | Preparar una importación de JSON de proveedor para revisión |
imports get UUID, imports commit UUID | Inspeccionar una importación; confirmar los agentes seleccionados después de la revisión |
mcp setup, mcp serve | Configurar un cliente; iniciar el puente stdio |
init [directory] | Crear la estructura inicial de un proyecto |
Las llamadas salientes requieren un número habilitado para llamadas salientes. THUNDERPHONE_FROM_NUMBER puede
proporcionar --from. Los números VoIP del cliente siguen admitiendo llamadas salientes.
Los números aprovisionados por ThunderPhone comienzan solo para llamadas entrantes; un administrador de la organización puede
solicitar llamadas salientes desde la página Números telefónicos, donde cada solicitud se
revisa manualmente. --wait usa de forma predeterminada un tiempo de espera de una hora; configura
--timeout SECONDS para cambiarlo. Un tiempo de espera deja de esperar sin finalizar la llamada.
Los SMS también requieren un número compatible con SMS en tu cuenta conectada de Twilio o Telnyx. Nunca se envían desde un número propiedad de ThunderPhone. Reutiliza una clave de idempotencia solo cuando reintentes exactamente el mismo remitente, destinatario y cuerpo.
Las importaciones admiten vapi, retell, elevenlabs y bland. El segundo argumento es una
ruta a una exportación JSON de proveedor, no un ID remoto de proveedor. La API prepara una asignación
de forma asíncrona; inspeciónala con imports get UUID y confirma solo cuando esté lista
y hayas revisado los campos asignados y las advertencias. Consulta importaciones de agentes.
Configuración de MCP
thunderphone mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client codex --scope user --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client claude-desktop --scope userClientes: claude-code, codex, cursor, vscode, gemini, claude-desktop y
windsurf. El alcance del proyecto es el predeterminado. Desktop y Windsurf requieren alcance de usuario.
Omite --client para detectar un único cliente del proyecto; una detección ambigua
solicita interacción o falla con instrucciones en una sesión no interactiva.
La configuración muestra el archivo que escribió y conserva servidores no relacionados. El JSON existente
debe ser JSON estricto válido; los valores TOML de Codex se conservan, pero los comentarios pueden reformatearse.
La configuración prefiere HTTP remoto directo. Con --api-key-env, escribe una referencia
a la variable, nunca la clave. Sin esa opción, HTTP directo depende del soporte
OAuth del cliente; no usa el archivo de credenciales de la CLI. Para reutilizar las credenciales de
thunderphone login en cualquier cliente compatible con stdio, usa:
{
"mcpServers": {
"thunderphone": {
"command": "npx",
"args": ["-y", "@thunderphone/mcp"]
}
}
}El wrapper verifica THUNDERPHONE_API_KEY, luego el perfil actual de la CLI (actualizándolo
cuando es necesario) y después delega OAuth a mcp-remote. THUNDERPHONE_MCP_URL anula
el endpoint. No emite telemetría. La configuración independiente también está disponible mediante
npx -y @thunderphone/mcp setup --client cursor o thunderphone-mcp setup después de
instalar @thunderphone/mcp globalmente.
Crea un proyecto
npx create-thunderphone-agent my-receptionist
npx create-thunderphone-agent my-outbound --template python --agent-type outbound
# Equivalent:
thunderphone init my-receptionist --template node --agent-type receptionistLas plantillas son node y python; los tipos de agente son receptionist, outbound y
custom. El agente predeterminado es una recepcionista dental en inglés/español con datos
de demostración explícitos. Los proyectos incluyen agent.json, scripts de despliegue, configuraciones MCP para
Claude Code, Cursor y VS Code, instrucciones del agente, .env.example y un README.
El scaffolding funciona sin conexión y se niega a sobrescribir un directorio que no esté vacío.
Edita los datos del negocio antes del despliegue. Exporta la clave de API, el número conectado
de quienes llaman y el destinatario de prueba como se documenta en el README generado. npm run deploy
o python deploy.py crea o actualiza el agente, despliega su borrador y realiza una llamada
de prueba facturable. Los scripts usan autenticación mediante clave de API; la CLI y el wrapper MCP
stdio también admiten inicio de sesión en el dispositivo. Los scripts de Python requieren Python 3.9 o una versión posterior.