MyOTP.App
Envie e verifique códigos de uso único por SMS, WhatsApp ou Telegram em mais de 190 países. Agentes podem criar uma conta e comprar créditos por conta própria. Hospedado em mcp.myotp.app ou execute @myotp/mcp localmente.
Servidor MCP hospedado
npx add-mcp 'https://mcp.myotp.app/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
@myotp/mcp — Servidor MCP do MyOTP.App
Um servidor Model Context Protocol que expõe a API de OTP do MyOTP.App para qualquer agente de IA compatível com MCP: Claude Desktop, Claude Code, Cursor, Windsurf, Codex e qualquer outra ferramenta que fale MCP.
Envie e verifique senhas de uso único (SMS, WhatsApp, Telegram) diretamente de um chat com seu agente, ou de qualquer aplicativo que ele criar.
O que ele faz
Expõe 10 ferramentas:
| Ferramenta | Finalidade |
|---|---|
generate_otp | Envia um OTP via SMS, WhatsApp ou Telegram. Retorna um message_id. |
verify_otp | Verifica um código enviado por um usuário final. |
check_otp_status | Verifica o status de entrega / se um OTP ainda está ativo. |
extend_otp | Adiciona mais tempo a um OTP ativo sem reenviar. |
get_account_info | Verifica a chave de API e a lista de permissões de IP (chama GET /me). |
get_usage_report | Histórico de transações paginado para um intervalo de datas. |
create_account | Cria uma conta de agente sem chave de API e retorna sua chave de uso único. |
get_account_status | Verifica verificação, saldo, plano e status; opcionalmente reenvia a verificação. |
get_topup_quote | Faz uma cotação de compra de créditos e retorna comandos de pagamento USDC e cartão. |
top_up_credits | Retorna um desafio de pagamento MPP e detalhes de nova tentativa, ou o resultado creditado. |
Cada ferramenta declara um outputSchema, para que os clientes possam verificar tipos de structuredContent; resultados de erro carregam { error, status?, endpoint?, body? } com isError: true.
Todas as ferramentas chamam a API REST pública do MyOTP em https://api.myotp.app. Substitua com a variável de ambiente MYOTP_BASE_URL para um servidor mock.
Instalação
Você não precisa instalar nada globalmente — npx buscará e executará a versão mais recente sob demanda:
npx @myotp/mcp
Use o nome com escopo.
myotp-mcpé o nome do binário dentro do pacote, não um pacote no npm, entãonpx myotp-mcpnão resolve.
Se quiser fixar uma versão ou instalá-lo localmente:
npm install --save-dev @myotp/mcp
Obtenha uma chave de API
Chame create_account com um endereço de e-mail e nome opcional. É a única
ferramenta de conta que não precisa de chave configurada. Salve a chave de API retornada imediatamente:
ela é mostrada apenas uma vez, e a nova conta começa com saldo zero. Configure essa
chave como MYOTP_API_KEY para stdio ou envie-a com solicitações hospedadas, depois chame
get_topup_quote ou top_up_credits para adicionar créditos.
O e-mail de confirmação requer um clique humano. A confirmação desbloqueia recargas por cartão; recargas USDC funcionam antes da confirmação. Cadastro humano em myotp.app/sign-up/ continua disponível e segue o fluxo de e-mail, telefone, chave de API e lista de permissões de IP do painel.
Use com o Claude Desktop
Edite a configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json no macOS, %APPDATA%\Claude\claude_desktop_config.json no Windows):
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
Reinicie o Claude Desktop. Pergunte ao agente: "Envie um OTP de teste para meu telefone +1 415 555 0123." Ele chamará generate_otp e informará o message_id.
Use com o Claude Code
Adicione ao .mcp.json do seu projeto:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
Ou registre globalmente com a CLI do Claude Code:
claude mcp add myotp -- npx -y @myotp/mcp
# Set the env var separately, then restart claude.
Use com o Cursor
O Cursor lê o mesmo formato .mcp.json. Adicione às configurações do seu workspace ou ao .cursor/mcp.json:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
Gateways que passam configuração na URL
Alguns gateways MCP entregam configurações por usuário como parâmetros de consulta em vez de cabeçalhos. O servidor hospedado aceita ?apiKey=<key> (também ?api_key=, ou um blob JSON ?config= em base64url com um campo apiKey) como fallback. Uma chave no cabeçalho X-API-Key ou Authorization: Bearer sempre vence uma na URL. No Smithery, o esquema de configuração mapeia a chave para o cabeçalho x-api-key, então nenhum parâmetro de URL é necessário lá.
Use com o Codex CLI
O Codex lê TOML, não JSON. Adicione ao ~/.codex/config.toml:
[mcp_servers.myotp]
command = "npx"
args = ["-y", "@myotp/mcp"]
[mcp_servers.myotp.env]
MYOTP_API_KEY = "your-32-character-api-key"
O Codex também pode falar com o servidor hospedado via HTTP em vez de iniciar qualquer coisa
localmente. Ele anexa o token como Authorization: Bearer, que o endpoint
hospedado aceita como alias para X-API-Key:
[mcp_servers.myotp]
url = "https://mcp.myotp.app/mcp"
bearer_token_env_var = "MYOTP_API_KEY"
Em versões mais antigas do Codex que só reconhecem servidores stdio, adicione
experimental_use_rmcp_client = true acima da entrada.
Se você usar a URL hospedada, adicione 108.61.176.199 à lista de permissões de IP da sua chave de API.
Chamadas hospedadas alcançam a API do MyOTP a partir desse endereço, e não da sua máquina,
e cada chamada retorna 403 até que seja permitido. A opção stdio acima não tem esse
requisito porque a solicitação sai da sua própria máquina.
Use com qualquer outra coisa
Qualquer cliente que fale MCP funciona. O bloco stdio tem o mesmo formato em todos os lugares
(command: npx, args: ["-y", "@myotp/mcp"], MYOTP_API_KEY no
ambiente), então Windsurf, Zed, Continue, OpenClaw, Hermes e Grokbot aceitam
o equivalente JSON ou TOML dos blocos acima.
Para um cliente hospedado, aponte para https://mcp.myotp.app/mcp e envie sua chave como
X-API-Key ou Authorization: Bearer. Use aquele que seu cliente
realmente conseguir definir.
Modos de transporte
stdio (padrão — para instalações locais de agentes)
O servidor lê mensagens JSON-RPC da entrada padrão e as escreve na saída padrão. A chave de API vem da variável de ambiente MYOTP_API_KEY, definida quando o agente inicia o servidor. Este é o modo certo para aplicativos de desktop como Claude Desktop, Claude Code e Cursor.
MYOTP_API_KEY=sk_... npx @myotp/mcp
# or explicitly
MYOTP_API_KEY=sk_... npx @myotp/mcp --stdio
HTTP transmitível (para servidores hospedados)
Execute um servidor HTTP para o qual qualquer agente compatível com MCP possa apontar. Ferramentas
autenticadas recebem a chave de API por solicitação via X-API-Key, então uma instância hospedada
pode atender muitos locatários; ferramentas anônimas não exigem o cabeçalho.
npx @myotp/mcp --http --port 3000
# or with the env switch
MYOTP_MCP_TRANSPORT=http PORT=3000 npx @myotp/mcp
O endpoint MCP é POST /mcp (também aceita GET e DELETE conforme a especificação). Verificação de saúde em GET /healthz.
É isso que hospedamos em https://mcp.myotp.app/mcp. Aponte seu cliente para essa
URL e envie X-API-Key: <your-key> em solicitações de ferramentas autenticadas.
Configuração
| Variável de ambiente | Padrão | Descrição |
|---|---|---|
MYOTP_API_KEY | — | Sua chave de API do MyOTP.App. Necessária para ferramentas autenticadas; create_account e get_topup_quote funcionam sem ela. |
MYOTP_BASE_URL | https://api.myotp.app | URL base da API. Substitua para um servidor mock. |
MYOTP_MCP_TRANSPORT | stdio | Defina como http para iniciar em modo HTTP. |
PORT | 3000 | Porta de escuta HTTP. |
HOST | 0.0.0.0 | Endereço de bind HTTP. |
MCP_PATH | /mcp | Rota HTTP para tráfego MCP. |
MCP_SESSION_IDLE_MS | 1800000 | Modo HTTP: fecha uma sessão após esse tempo sem solicitações. O cliente recebe 404 e reinicializa. |
MCP_SESSION_BUSY_MS | 3600000 | Modo HTTP: fecha uma sessão cuja solicitação aberta (como um stream SSE) começou há mais tempo que isso. |
MCP_MAX_SESSIONS | 1000 | Modo HTTP: máximo de sessões mantidas ao mesmo tempo; uma nova sessão fecha a menos usada recentemente, sessões ociosas primeiro. |
Exemplos de chamadas de ferramentas
Depois que o servidor estiver conectado, você pode pedir ao agente coisas como:
- "Envie um OTP via WhatsApp para 14155550123."
- "Use o MyOTP para verificar o código 482913 para esse número de telefone."
- "O último OTP foi entregue? Verifique o status do message_id
a1b2…." - "Mostre meu uso de OTP nos últimos 7 dias."
- "Quanto crédito tenho nesta conta MyOTP?"
- "Crie uma conta de agente MyOTP para dev@example.com."
- "Verifique se o e-mail da minha conta de agente está verificado e reenvie o e-mail se necessário."
- "Faça uma cotação de mais 500 créditos MyOTP."
- "Esse envio falhou com NoBalance. Recarregue 100 créditos."
Nos bastidores, o agente escolherá a ferramenta certa, validará as entradas contra o JSON Schema que publicamos e chamará a API do MyOTP.
Comprando créditos como agente
Agentes podem comprar créditos MyOTP por conta própria: um 402, um pagamento, sem página de checkout, sem formulário de cartão. Créditos custam $0,02 cada, com mínimo de 25 créditos ($0,50) e máximo de 50.000 créditos por chamada. Recargas por cartão são limitadas a $100 por conta a cada 24 horas corridas; USDC não tem limite. Uma conta de teste passa para a tabela de preços pré-paga Starter no primeiro recarga, sem criar uma assinatura.
Quando um envio de OTP retorna HTTP 403 insufficient balance ou NoBalance, chame
get_topup_quote para inspecionar o preço ou chame top_up_credits para iniciar a
compra. top_up_credits busca a cotação primeiro, depois posta em /v1/topup
com a chave de API configurada e sem credencial de pagamento. A resposta 402
esperada contém ofertas MPP para USDC no Tempo e, enquanto o limite de cartão permitir,
cartão ou Link via Stripe. A ferramenta retorna as ofertas decodificadas, ID do desafio,
URL e corpo exatos de nova tentativa, e cabeçalhos com espaços reservados para credenciais.
O servidor MCP não pode segurar a carteira do agente. Execute um dos comandos retornados
com your MyOTP API key substituído localmente; o cliente MPP paga e tenta novamente a
mesma solicitação com sua credencial de pagamento. Essa nova tentativa credita a conta. Se
o runtime já envolver fetch com um provedor de credenciais MPP, a ferramenta pode
receber e retornar a resposta creditada com sucesso diretamente.
Carteira USDC (criar uma conta mppx cria uma carteira, e a testnet financia automaticamente):
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}"
Carteira de cartão ou Link (execute npx @stripe/link-cli auth login uma vez primeiro):
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."
Criação de conta
A ferramenta create_account chama o endpoint não autenticado
POST /v1/agent/register com um e-mail e nome opcional. A resposta
contém o registro completo da conta e uma chave de API de 32 caracteres mostrada apenas uma vez.
Salve-a imediatamente e defina MYOTP_API_KEY (ou configure o cliente hospedado para
enviá-la). Contas de agente têm lista de permissões de IP aberta, não precisam de verificação de telefone,
e começam com saldo 0 e o plano pré-pago Starter.
Um e-mail de confirmação é enviado ao endereço fornecido. Um humano deve clicar no
link dentro de 24 horas para desbloquear recargas por cartão; recargas USDC funcionam imediatamente.
Use get_account_status para verificar email_verified, saldo, plano e status
da conta, ou chame com resend_verification: true para enviar outro e-mail. Depois
use get_topup_quote ou top_up_credits para financiar a conta antes de enviar um
OTP.
Desenvolvimento
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 segurança
- Este servidor nunca registra sua chave de API.
- No modo HTTP, a chave de API é lida apenas de
X-API-Keypor solicitação — não há chave global configurada na inicialização. - A API do MyOTP também aplica uma lista de permissões de IP; certifique-se de que o host que executa este servidor (ou os IPs dos seus usuários finais no modo HTTP) esteja na lista de permissões da chave em uso.
- Retornar o código OTP em texto simples (
return_otp: true) é destinado apenas a testes — nunca habilite isso em fluxos de usuário de produção.
Licença
MIT — veja LICENSE.
Construído por BroadNet Technologies. Perguntas? info@myotp.app.