关于 MyOTP.App
MyOTP.App MCP 服务将一次性密码 API 提供给兼容 MCP 的 Agent,可通过 SMS、WhatsApp 或 Telegram 发送和验证验证码。工具还涵盖账户、用量及充值,并支持本地 stdio 和托管 HTTP 传输。
主要功能
- 01通过 SMS、WhatsApp、Telegram 发送验证码
- 02验证验证码并查询发送状态
- 03创建账户并查看账户信息
- 04查询交易用量及充值报价
- 05发起积分充值流程
- 06工具提供结构化输出模式
适用场景
- 01为应用用户发送手机号验证码
- 02验证用户提交的一次性密码
- 03查看验证码送达情况和账户余额
- 04在 Agent 工作流中创建账户或充值
MCP 相关
服务将 MyOTP.App REST API 封装为 MCP 工具,供兼容客户端调用。支持本地 stdio 和 Streamable HTTP,也提供托管 MCP 端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.myotp.app/mcpclaude mcp add --transport http brntech-myotp https://mcp.myotp.app/mcp{"mcpServers":{"brntech-myotp":{"type":"http","url":"https://mcp.myotp.app/mcp"}}}在 Cursor 中打开{"servers":{"brntech-myotp":{"type":"http","url":"https://mcp.myotp.app/mcp"}}}在 VS Code 中打开{"mcpServers":{"brntech-myotp":{"type":"http","url":"https://mcp.myotp.app/mcp"}}}{"mcpServers":{"brntech-myotp":{"serverUrl":"https://mcp.myotp.app/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.myotp.app/mcp需要授权工具
10| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| brand | string | 否 | 显示给接收者的发送方品牌名称(3–16 个字母数字字符,可包含点号)。默认使用与 API key 关联的注册品牌;若未注册,则使用 'MyOTP.App'。 |
| channel | enum | 否 | 发送渠道。'sms'(默认)适用于 190 多个国家/地区。'whatsapp' 最适合印度/巴西/印度尼西亚/墨西哥/尼日利亚/土耳其。'telegram' 最适合注重隐私的用户。三种渠道使用相同的 API。sms | whatsapp | telegram |
| otp_code | string | 否 | 提供自行预生成的数字 OTP 验证码(3–8 位;telegram 为 4–8 位),而不使用 MyOTP 生成的验证码。适用于已从其他系统获得验证码的情况。 |
| force_send | boolean | 否 | 如果为 true,即使该电话号码已有有效 OTP,也会发送新的 OTP。默认情况下,API 在这种情况下会返回 409。请谨慎使用——向同一号码重复发送可能触发运营商级别的垃圾信息过滤。 |
| otp_length | integer | 否 | 自动生成的 OTP 位数。范围为 3–8 位(telegram 为 4–8 位)。默认值为 6。需要 CUSTOM_OTP_LENGTH 权限(Business 计划或更高)。 |
| return_otp | boolean | 否 | 如果为 true,API 响应将以纯文本形式包含生成的 OTP 验证码。适用于测试,或希望通过自己的渠道发送 OTP 的情况。默认值为 false。安全提示:切勿在生产环境的用户流程中启用此选项。 |
| otp_validity | integer | 否 | OTP 的有效时长(秒)。范围为 30–14400 秒(telegram 为 30–3600 秒)。默认值为 300 秒(5 分钟)。需要 CUSTOM_OTP_EXPIRY 权限(Business 计划或更高)。 |
| phone_number | string | 是 | 目标电话号码,使用国际格式,不带前导 + 或 0。必须为 7–15 位数字,且首位不能为 0。示例:美国号码为 '14155550123',英国号码为 '447911123456'。 |
| template_order | integer | 否 | 按序号选择特定消息模板(1–99)。WhatsApp 有四种:12(英语,5 分钟验证码)、13(英语,10 分钟)、14(西班牙语 es_MX,5 分钟)、15(西班牙语 es_MX,10 分钟)。在 WhatsApp 上,模板自身的有效期会覆盖 otp_validity。需要 ACCESS_TO_TEMPLATES 权限(Business 套餐及以上)。Telegram 不支持此功能(Telegram 会生成自己的消息文本)。 |
详细介绍
@myotp/mcp — MyOTP.App MCP 服务
一个 Model Context Protocol 服务,可将 MyOTP.App 的 OTP API 提供给任何兼容 MCP 的 AI Agent:Claude Desktop、Claude Code、Cursor、Windsurf、Codex,以及其他任何支持 MCP 的应用。
直接通过与 Agent 的聊天,或通过 Agent 构建的任何应用,发送和验证一次性密码(SMS、WhatsApp、Telegram)。
功能
提供 10 个工具:
| 工具 | 用途 |
|---|---|
generate_otp | 通过 SMS、WhatsApp 或 Telegram 发送 OTP。返回 message_id。 |
verify_otp | 验证最终用户提交的代码。 |
check_otp_status | 检查送达状态/OTP 是否仍有效。 |
extend_otp | 延长有效 OTP 的时间,无需重新发送。 |
get_account_info | 检查 API 密钥和 IP 白名单是否配置正确(调用 GET /me)。 |
get_usage_report | 按日期范围分页查看交易记录。 |
create_account | 无需 API 密钥即可创建 Agent 账户,并返回一次性密钥。 |
get_account_status | 检查验证状态、余额、套餐和账户状态;还可选择重新发送验证邮件。 |
get_topup_quote | 获取信用额度购买报价,并返回 USDC 和银行卡支付命令。 |
top_up_credits | 返回 MPP 支付质询和重试详情,或已充值结果。 |
每个工具都声明了 outputSchema,因此客户端可以对 structuredContent 进行类型检查;错误结果包含 { error, status?, endpoint?, body? },且 isError: true。
所有工具都会调用 MyOTP 公共 REST API:https://api.myotp.app。如需使用模拟服务,可通过 MYOTP_BASE_URL 环境变量覆盖。
安装
无需全局安装任何内容——npx 会按需获取并运行最新版本:
npx @myotp/mcp
请使用带作用域的名称。
myotp-mcp是包内的二进制文件名,并不是 npm 上的包,因此npx myotp-mcp无法解析。
如果要固定版本或在本地安装:
npm install --save-dev @myotp/mcp
获取 API 密钥
使用电子邮件地址和可选的姓名调用 create_account。这是唯一一个无需配置密钥的账户工具。请立即保存返回的 API 密钥:它只会显示一次,且新账户的余额为零。将该密钥配置为 stdio 的 MYOTP_API_KEY,或在托管请求中发送该密钥,然后调用 get_topup_quote 或 top_up_credits 添加信用额度。
确认邮件需要由人工点击确认。确认后即可使用银行卡充值;未确认前也可以使用 USDC 充值。人工注册仍可通过 myotp.app/sign-up/ 进行,并遵循控制面板的电子邮件、电话号码、API 密钥和 IP 允许列表流程。
与 Claude Desktop 搭配使用
编辑 Claude Desktop 配置文件(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 上为 %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
重启 Claude Desktop。向 Agent 发送请求:“向我的手机 +1 415 555 0123 发送测试 OTP。” 它会调用 generate_otp 并报告 message_id。
与 Claude Code 搭配使用
将其添加到项目的 .mcp.json:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
也可以通过 Claude Code CLI 全局注册:
claude mcp add myotp -- npx -y @myotp/mcp
# Set the env var separately, then restart claude.
与 Cursor 搭配使用
Cursor 读取相同的 .mcp.json 格式。将其添加到工作区设置或 .cursor/mcp.json:
{
"mcpServers": {
"myotp": {
"command": "npx",
"args": ["-y", "@myotp/mcp"],
"env": {
"MYOTP_API_KEY": "your-32-character-api-key"
}
}
}
}
在 URL 中传递配置的网关
某些 MCP 网关会通过查询参数而非请求头传递每位用户的设置。托管服务接受 ?apiKey=<key>(也接受 ?api_key=,或包含 apiKey 字段的 base64url ?config= JSON 数据)作为备用方式。请求头中的 X-API-Key 或 Authorization: Bearer 密钥始终优先于 URL 中的密钥。在 Smithery 上,配置架构会将密钥映射到 x-api-key 请求头,因此无需使用 URL 参数。
与 Codex CLI 搭配使用
Codex 读取 TOML,而不是 JSON。添加到 ~/.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 也可以通过 HTTP 连接托管服务,而无需在本地启动任何程序。它会将令牌作为 Authorization: Bearer 发送,而托管端点也接受它作为 X-API-Key 的别名:
[mcp_servers.myotp]
url = "https://mcp.myotp.app/mcp"
bearer_token_env_var = "MYOTP_API_KEY"
对于只支持 stdio 服务的旧版 Codex,在条目上方添加
experimental_use_rmcp_client = true。
如果使用托管 URL,请将 108.61.176.199 添加到 API 密钥的 IP 允许列表中。
托管调用会从该地址而不是你的计算机访问 MyOTP API,在允许该地址之前,每次调用都会返回 403。上面的 stdio 选项没有此要求,因为请求是从你自己的计算机发出的。
与其他客户端搭配使用
任何支持 MCP 的客户端都可以使用。stdio 配置块的格式处处相同
(command: npx、args: ["-y", "@myotp/mcp"]、环境中的
MYOTP_API_KEY),因此 Windsurf、Zed、Continue、OpenClaw、Hermes 和 Grokbot 都可以使用上述配置块对应的 JSON 或 TOML 配置。
对于托管客户端,将其指向 https://mcp.myotp.app/mcp,并将密钥作为
X-API-Key 或 Authorization: Bearer 发送。使用客户端实际支持设置的方式。
传输模式
stdio(默认 — 用于本地 Agent 安装)
服务从 stdin 读取 JSON-RPC 消息,并将消息写入 stdout。API 密钥来自 MYOTP_API_KEY 环境变量,该变量在 Agent 启动服务时设置。这是 Claude Desktop、Claude Code 和 Cursor 等桌面应用的合适模式。
MYOTP_API_KEY=sk_... npx @myotp/mcp
# or explicitly
MYOTP_API_KEY=sk_... npx @myotp/mcp --stdio
Streamable HTTP(用于托管服务)
运行 HTTP 服务,任何兼容 MCP 的 Agent 都可以连接到它。需要身份验证的工具会在每次请求中通过 X-API-Key 接收 API 密钥,因此一个托管实例可以为多个租户提供服务;匿名工具则不需要此请求头。
npx @myotp/mcp --http --port 3000
# or with the env switch
MYOTP_MCP_TRANSPORT=http PORT=3000 npx @myotp/mcp
MCP 端点为 POST /mcp(根据规范,也接受 GET 和 DELETE)。健康检查端点为 GET /healthz。
我们在 https://mcp.myotp.app/mcp 托管的就是此服务。将客户端指向该
URL,并在需要身份验证的工具请求中发送 X-API-Key: <your-key>。
配置
| 环境变量 | 默认值 | 描述 |
|---|---|---|
MYOTP_API_KEY | — | 你的 MyOTP.App API 密钥。需要身份验证的工具必需;create_account 和 get_topup_quote 无需此密钥即可使用。 |
MYOTP_BASE_URL | https://api.myotp.app | API 基础 URL。可覆盖为模拟服务地址。 |
MYOTP_MCP_TRANSPORT | stdio | 设置为 http 以 HTTP 模式启动。 |
PORT | 3000 | HTTP 监听端口。 |
HOST | 0.0.0.0 | HTTP 绑定地址。 |
MCP_PATH | /mcp | MCP 流量的 HTTP 路由。 |
MCP_SESSION_IDLE_MS | 1800000 | HTTP 模式:在此时长内没有请求后关闭会话。客户端会收到 404 并重新初始化。 |
MCP_SESSION_BUSY_MS | 3600000 | HTTP 模式:关闭已打开的请求(例如 SSE 流)启动时间超过此时长的会话。 |
MCP_MAX_SESSIONS | 1000 | HTTP 模式:同时保留的最多会话数;新会话会关闭最近最少使用的会话,优先关闭空闲会话。 |
工具调用示例
配置好服务后,你可以向 Agent 提出这样的请求:
- “通过 WhatsApp 向 14155550123 发送一次性密码。”
- “使用 MyOTP 验证该电话号码对应的代码 482913。”
- “上次的一次性密码送达了吗?查询消息 ID
a1b2…的状态。” - “显示我过去 7 天的一次性密码使用情况。”
- “我的这个 MyOTP 账户还有多少余额?”
- “为 [email protected] 创建一个 MyOTP Agent 账户。”
- “检查我的 Agent 账户邮箱是否已验证,如有需要,请重新发送验证邮件。”
- “查询再购买 500 个 MyOTP 额度的价格。”
- “发送失败,提示 NoBalance。充值 100 个额度。”
在底层,Agent 会选择合适的工具,根据我们发布的 JSON Schema 验证输入,并调用 MyOTP API。
作为 Agent 购买额度
Agent 可以自行购买 MyOTP 额度:一次 402、一次付款,无需结账页面或银行卡表单。每个额度售价 $0.02,每次调用最低购买 25 个($0.50),最高 50,000 个。每个账户在滚动 24 小时内通过银行卡充值的上限为 $100;USDC 充值没有上限。试用账户首次充值后会转为 Starter 按量付费定价方案,不会创建订阅。
发送 OTP 时,如果返回 HTTP 403 insufficient balance 或 NoBalance,请调用 get_topup_quote 查看价格,或调用 top_up_credits 开始购买。top_up_credits 会先获取报价,然后使用已配置的 API 密钥向 /v1/topup 发起请求,不携带支付凭证。预期的 402 响应中包含 MPP 支付选项:Tempo 上的 USDC,以及在银行卡限额允许时通过 Stripe 使用银行卡或 Link。该工具会返回解码后的支付选项、质询 ID、准确的重试 URL 和请求体,以及带有凭证占位符的标头。
MCP 服务无法保管 Agent 的钱包。请在本地将返回命令中的 your MyOTP API key 替换为你的密钥后运行;MPP 客户端会付款,并使用支付凭证重试相同请求。重试后,额度会充入账户。如果运行时已使用 MPP 凭证提供程序封装 fetch,该工具可以直接接收并返回成功充值的响应。
USDC 钱包(创建 mppx 账户会生成钱包,测试网会自动充值):
npx -y [email protected] https://api.myotp.app/v1/topup -X POST -H "x-api-key: your MyOTP API key" -H "content-type: application/json" -d "{\"credits\":100}"
银行卡或 Link 钱包(请先运行一次 npx @stripe/link-cli auth login):
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."
创建账户
create_account 工具会调用实时的、无需身份验证的 POST /v1/agent/register 端点,传入电子邮件地址和可选姓名。响应包含完整账户记录和一个 32 字符的 API 密钥,该密钥仅显示一次。请立即保存,并设置 MYOTP_API_KEY(或配置托管客户端发送该密钥)。Agent 账户的 IP 允许列表开放,无需验证手机号,初始余额为 0,并使用 Starter 按量付费方案。
系统会向提供的地址发送确认邮件。用户必须在 24 小时内点击链接,才能启用银行卡充值;USDC 充值可立即使用。使用 get_account_status 检查 email_verified、余额、方案和账户状态;也可以传入 resend_verification: true,再次发送邮件。然后使用 get_topup_quote 或 top_up_credits 为账户充值,再发送 OTP。
开发
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
安全说明
- 此服务不会记录你的 API 密钥。
- 在 HTTP 模式下,每个请求都只从
X-API-Key读取 API 密钥——启动时不会配置全局密钥。 - MyOTP API 还会强制执行 IP 白名单;请确保运行此服务的主机(或 HTTP 模式下终端用户的 IP)已添加到所用密钥的允许列表中。
- 以纯文本形式返回 OTP 验证码(
return_otp: true)仅用于测试——切勿在生产环境的用户流程中启用。
许可证
MIT — 参见 LICENSE。
由 BroadNet Technologies 构建。有问题?请联系 [email protected]。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。