MyOTP.App
Envía y verifica códigos de un solo uso por SMS, WhatsApp o Telegram en más de 190 países. Los agentes pueden crear una cuenta y comprar créditos por sí mismos. Alojado en mcp.myotp.app o ejecuta @myotp/mcp localmente.
Servidor MCP alojado
npx add-mcp 'https://mcp.myotp.app/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
@myotp/mcp — Servidor MCP de MyOTP.App
Un servidor de Model Context Protocol que expone la API de OTP de MyOTP.App a cualquier agente de IA compatible con MCP: Claude Desktop, Claude Code, Cursor, Windsurf, Codex y cualquier otra cosa que hable MCP.
Envía y verifica contraseñas de un solo uso (SMS, WhatsApp, Telegram) directamente desde un chat con tu agente, o desde cualquier aplicación que este construya.
Qué hace
Expone 10 herramientas:
| Herramienta | Propósito |
|---|---|
generate_otp | Envía un OTP por SMS, WhatsApp o Telegram. Devuelve un message_id. |
verify_otp | Verifica un código enviado por un usuario final. |
check_otp_status | Comprueba el estado de entrega / si un OTP sigue activo. |
extend_otp | Añade más tiempo a un OTP activo sin reenviarlo. |
get_account_info | Verifica la clave de API y la lista blanca de IP (llama a GET /me). |
get_usage_report | Historial de transacciones paginado para un rango de fechas. |
create_account | Crea una cuenta de agente sin clave de API y devuelve su clave de un solo uso. |
get_account_status | Comprueba verificación, saldo, plan y estado; opcionalmente reenvía la verificación. |
get_topup_quote | Cotiza una compra de créditos y devuelve comandos de pago con USDC y tarjeta. |
top_up_credits | Devuelve un desafío de pago MPP y detalles de reintento, o el resultado acreditado. |
Cada herramienta declara un outputSchema, para que los clientes puedan verificar tipos de structuredContent; los resultados de error incluyen { error, status?, endpoint?, body? } con isError: true.
Todas las herramientas llaman a la API REST pública de MyOTP en https://api.myotp.app. Anula con la variable de entorno MYOTP_BASE_URL para un servidor simulado.
Instalación
No necesitas instalar nada globalmente: npx descargará y ejecutará la última versión bajo demanda:
npx @myotp/mcp
Usa el nombre con ámbito.
myotp-mcpes el nombre del binario dentro del paquete, no un paquete en npm, por lo quenpx myotp-mcpno se resuelve.
Si quieres fijar una versión o instalarlo localmente:
npm install --save-dev @myotp/mcp
Obtener una clave de API
Llama a create_account con una dirección de correo electrónico y un nombre opcional. Es la única
herramienta de cuenta que no necesita clave configurada. Guarda la clave de API devuelta de inmediato:
se muestra una sola vez, y la nueva cuenta comienza con saldo cero. Configura esa
clave como MYOTP_API_KEY para stdio o envíala con solicitudes alojadas, luego llama a
get_topup_quote o top_up_credits para añadir créditos.
El correo de confirmación requiere un clic humano. La confirmación desbloquea las recargas con tarjeta; las recargas con USDC funcionan antes de la confirmación. El registro humano en myotp.app/sign-up/ sigue disponible y sigue el flujo de correo, teléfono, clave de API y lista blanca de IP del panel.
Usarlo con Claude Desktop
Edita la configuración de Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json en macOS, %APPDATA%\Claude\claude_desktop_config.json en Windows):
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
Reinicia Claude Desktop. Pide al agente: "Envía un OTP de prueba a mi teléfono +1 415 555 0123." Llamará a generate_otp e informará el message_id.
Usarlo con Claude Code
Añádelo al .mcp.json de tu proyecto:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
O regístralo globalmente con la CLI de Claude Code:
claude mcp add myotp -- npx -y @myotp/mcp
# Set the env var separately, then restart claude.
Usarlo con Cursor
Cursor lee el mismo formato .mcp.json. Añádelo a la configuración de tu espacio de trabajo o a .cursor/mcp.json:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
Pasarelas que pasan la configuración en la URL
Algunas pasarelas MCP entregan la configuración por usuario como parámetros de consulta en lugar de encabezados. El servidor alojado acepta ?apiKey=<key> (también ?api_key=, o un blob JSON ?config= en base64url con un campo apiKey) como alternativa. Una clave en el encabezado X-API-Key o Authorization: Bearer siempre tiene prioridad sobre una en la URL. En Smithery, el esquema de configuración asigna la clave al encabezado x-api-key, por lo que no se necesita parámetro de URL allí.
Usarlo con Codex CLI
Codex lee TOML, no JSON. Añádelo a ~/.codex/config.toml:
[mcp_servers.myotp]
command = "npx"
args = ["-y", "@myotp/mcp"]
[mcp_servers.myotp.env]
MYOTP_API_KEY = "your-32-character-api-key"
Codex también puede hablar con el servidor alojado por HTTP en lugar de iniciar algo
localmente. Adjunta el token como Authorization: Bearer, que el endpoint
alojado acepta como alias de X-API-Key:
[mcp_servers.myotp]
url = "https://mcp.myotp.app/mcp"
bearer_token_env_var = "MYOTP_API_KEY"
En versiones antiguas de Codex que solo detectan servidores stdio, añade
experimental_use_rmcp_client = true encima de la entrada.
Si usas la URL alojada, añade 108.61.176.199 a la lista blanca de IP de tu clave de API.
Las llamadas alojadas llegan a la API de MyOTP desde esa dirección en lugar de desde tu máquina,
y cada llamada devuelve 403 hasta que se permita. La opción stdio anterior no tiene ese
requisito porque la solicitud sale de tu propia máquina.
Usarlo con cualquier otra cosa
Cualquier cliente que hable MCP funciona. El bloque stdio tiene la misma forma en todas partes
(command: npx, args: ["-y", "@myotp/mcp"], MYOTP_API_KEY en el
entorno), por lo que Windsurf, Zed, Continue, OpenClaw, Hermes y Grokbot aceptan
el equivalente JSON o TOML de los bloques anteriores.
Para un cliente alojado, apúntalo a https://mcp.myotp.app/mcp y envía tu clave como
X-API-Key o Authorization: Bearer. Usa el que tu cliente pueda
configurar realmente.
Modos de transporte
stdio (predeterminado — para instalaciones locales de agentes)
El servidor lee mensajes JSON-RPC de stdin y los escribe en stdout. La clave de API proviene de la variable de entorno MYOTP_API_KEY, configurada cuando el agente inicia el servidor. Este es el modo adecuado para aplicaciones de escritorio como Claude Desktop, Claude Code y Cursor.
MYOTP_API_KEY=sk_... npx @myotp/mcp
# or explicitly
MYOTP_API_KEY=sk_... npx @myotp/mcp --stdio
HTTP transmisible (para servidores alojados)
Ejecuta un servidor HTTP al que cualquier agente compatible con MCP pueda apuntar. Las herramientas
autenticadas reciben la clave de API por solicitud mediante X-API-Key, por lo que una instancia alojada
puede atender a muchos inquilinos; las herramientas anónimas no requieren el encabezado.
npx @myotp/mcp --http --port 3000
# or with the env switch
MYOTP_MCP_TRANSPORT=http PORT=3000 npx @myotp/mcp
El endpoint MCP es POST /mcp (también acepta GET y DELETE según la especificación). Verificación de salud en GET /healthz.
Esto es lo que alojamos en https://mcp.myotp.app/mcp. Apunta tu cliente a esa
URL y envía X-API-Key: <your-key> en solicitudes de herramientas autenticadas.
Configuración
| Variable de entorno | Predeterminado | Descripción |
|---|---|---|
MYOTP_API_KEY | — | Tu clave de API de MyOTP.App. Requerida para herramientas autenticadas; create_account y get_topup_quote funcionan sin ella. |
MYOTP_BASE_URL | https://api.myotp.app | URL base de la API. Anula para un servidor simulado. |
MYOTP_MCP_TRANSPORT | stdio | Configúralo en http para iniciar en modo HTTP. |
PORT | 3000 | Puerto de escucha HTTP. |
HOST | 0.0.0.0 | Dirección de enlace HTTP. |
MCP_PATH | /mcp | Ruta HTTP para tráfico MCP. |
MCP_SESSION_IDLE_MS | 1800000 | Modo HTTP: cierra una sesión después de este tiempo sin solicitudes. El cliente recibe 404 y se reinicializa. |
MCP_SESSION_BUSY_MS | 3600000 | Modo HTTP: cierra una sesión cuya solicitud abierta (como un flujo SSE) comenzó hace más tiempo que esto. |
MCP_MAX_SESSIONS | 1000 | Modo HTTP: la mayoría de sesiones mantenidas a la vez; una sesión nueva cierra la menos usada recientemente, primero las inactivas. |
Ejemplos de llamadas a herramientas
Una vez que el servidor esté conectado, puedes pedir al agente cosas como:
- "Envía un OTP por WhatsApp al 14155550123."
- "Usa MyOTP para verificar el código 482913 para ese número de teléfono."
- "¿Se entregó el último OTP? Comprueba el estado del message_id
a1b2…." - "Muéstrame mi uso de OTP de los últimos 7 días."
- "¿Cuánto crédito tengo en esta cuenta de MyOTP?"
- "Crea una cuenta de agente de MyOTP para dev@example.com."
- "Comprueba si el correo de mi cuenta de agente está verificado y reenvía el correo si es necesario."
- "Cotiza 500 créditos más de MyOTP."
- "Ese envío falló con NoBalance. Recarga 100 créditos."
En segundo plano, el agente elegirá la herramienta correcta, validará las entradas contra el JSON Schema que publicamos y llamará a la API de MyOTP.
Comprar créditos como agente
Los agentes pueden comprar créditos de MyOTP por sí mismos: un 402, un pago, sin página de pago, sin formulario de tarjeta. Los créditos cuestan $0.02 cada uno, con un mínimo de 25 créditos ($0.50) y un máximo de 50,000 créditos por llamada. Las recargas con tarjeta están limitadas a $100 por cuenta por cada 24 horas móviles; USDC no tiene límite. Una cuenta de prueba pasa a la tabla de precios de pago por uso Starter en su primera recarga, sin crear una suscripción.
Cuando un envío de OTP devuelve HTTP 403 insufficient balance o NoBalance, llama a
get_topup_quote para inspeccionar el precio o llama a top_up_credits para iniciar la
compra. top_up_credits obtiene la cotización primero, luego publica en /v1/topup
con la clave de API configurada y sin credencial de pago. La respuesta 402 esperada
contiene ofertas MPP para USDC en Tempo y, mientras el límite de tarjeta lo permita,
tarjeta o Link a través de Stripe. La herramienta devuelve las ofertas decodificadas, el ID de desafío,
la URL y el cuerpo de reintento exactos, y encabezados con marcadores de posición de credenciales.
El servidor MCP no puede contener la billetera del agente. Ejecuta uno de los comandos devueltos
con your MyOTP API key reemplazado localmente; el cliente MPP paga y reintenta la
misma solicitud con su credencial de pago. Ese reintento acredita la cuenta. Si
el tiempo de ejecución ya envuelve fetch con un proveedor de credenciales MPP, la herramienta puede
recibir y devolver la respuesta acreditada exitosa directamente.
Billetera USDC (crear una cuenta mppx crea una billetera, y testnet se autofinancia):
npx -y mppx@0.9.2 https://api.myotp.app/v1/topup -X POST -H "x-api-key: your MyOTP API key" -H "content-type: application/json" -d "{\"credits\":100}"
Billetera de tarjeta o Link (ejecuta npx @stripe/link-cli auth login una vez primero):
npx -y @stripe/link-cli mpp pay https://api.myotp.app/v1/topup -X POST -d "{\"credits\":100}" -H "x-api-key: your MyOTP API key" --context "Buying MyOTP.App credits to send one-time passcodes over SMS, WhatsApp and Telegram for phone verification in my app."
Creación de cuentas
La herramienta create_account llama al endpoint no autenticado en vivo
POST /v1/agent/register con un correo electrónico y un nombre opcional. La respuesta
contiene el registro completo de la cuenta y una clave de API de 32 caracteres que se muestra una sola vez.
Guárdala de inmediato y configura MYOTP_API_KEY (o configura el cliente alojado para
enviarla). Las cuentas de agente tienen una lista blanca de IP abierta, no necesitan verificación de teléfono
y comienzan con saldo 0 y el plan de pago por uso Starter.
Se envía un correo de confirmación a la dirección proporcionada. Un humano debe hacer clic en el
enlace dentro de las 24 horas para desbloquear las recargas con tarjeta; las recargas con USDC funcionan de inmediato.
Usa get_account_status para comprobar email_verified, saldo, plan y estado
de la cuenta, o llámalo con resend_verification: true para enviar otro correo. Luego
usa get_topup_quote o top_up_credits para financiar la cuenta antes de enviar un
OTP.
Desarrollo
git clone https://github.com/brntech/myotp-agentkit
cd myotp-agentkit/mcp-server
npm install
npm run build
npm run start:stdio # or start:http
Notas de seguridad
- Este servidor nunca registra tu clave de API.
- En modo HTTP, la clave de API solo se lee de
X-API-Keypor solicitud: no hay clave global configurada al inicio. - La API de MyOTP además aplica una lista blanca de IP; asegúrate de que el host que ejecuta este servidor (o las IP de tus usuarios finales en modo HTTP) estén en la lista permitida para la clave en uso.
- Devolver el código OTP en texto plano (
return_otp: true) está pensado solo para pruebas: nunca lo habilites en flujos de usuario de producción.
Licencia
MIT — consulta LICENSE.
Creado por BroadNet Technologies. ¿Preguntas? info@myotp.app.