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

smithery badge

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:

HerramientaPropósito
generate_otpEnvía un OTP por SMS, WhatsApp o Telegram. Devuelve un message_id.
verify_otpVerifica un código enviado por un usuario final.
check_otp_statusComprueba el estado de entrega / si un OTP sigue activo.
extend_otpAñade más tiempo a un OTP activo sin reenviarlo.
get_account_infoVerifica la clave de API y la lista blanca de IP (llama a GET /me).
get_usage_reportHistorial de transacciones paginado para un rango de fechas.
create_accountCrea una cuenta de agente sin clave de API y devuelve su clave de un solo uso.
get_account_statusComprueba verificación, saldo, plan y estado; opcionalmente reenvía la verificación.
get_topup_quoteCotiza una compra de créditos y devuelve comandos de pago con USDC y tarjeta.
top_up_creditsDevuelve 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-mcp es el nombre del binario dentro del paquete, no un paquete en npm, por lo que npx myotp-mcp no 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 entornoPredeterminadoDescripció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_URLhttps://api.myotp.appURL base de la API. Anula para un servidor simulado.
MYOTP_MCP_TRANSPORTstdioConfigúralo en http para iniciar en modo HTTP.
PORT3000Puerto de escucha HTTP.
HOST0.0.0.0Dirección de enlace HTTP.
MCP_PATH/mcpRuta HTTP para tráfico MCP.
MCP_SESSION_IDLE_MS1800000Modo HTTP: cierra una sesión después de este tiempo sin solicitudes. El cliente recibe 404 y se reinicializa.
MCP_SESSION_BUSY_MS3600000Modo HTTP: cierra una sesión cuya solicitud abierta (como un flujo SSE) comenzó hace más tiempo que esto.
MCP_MAX_SESSIONS1000Modo 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-Key por 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.