MyOTP.App について
MyOTP.AppのMCPサーバーは、SMS、WhatsApp、Telegramでのコード送信と検証を、MCP対応エージェントから利用できるようにします。アカウント、利用状況、チャージ用のツールも備え、ローカルstdioとホスト型HTTPに対応します。
主な機能
- 01SMS・WhatsApp・TelegramでOTPを送信
- 02コード検証と配信状況の確認
- 03アカウント作成と詳細情報の取得
- 04取引履歴とチャージ見積もりの確認
- 05クレジットチャージの開始
- 06ツールの構造化出力スキーマ
活用シーン
- 01アプリ利用者への電話番号確認コード送信
- 02利用者が送信したワンタイムコードの検証
- 03OTP配信状況とアカウント残高の確認
- 04エージェントワークフローでのアカウント作成やチャージ
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' はプライバシーを重視するユーザーに最適です。3 つすべてで同じ API を使用します。sms | whatsapp | telegram |
| otp_code | string | いいえ | MyOTP に生成させる代わりに、事前に生成した独自の数字 OTP コード(3~8 桁、telegram の場合は 4~8 桁)を指定します。別のシステムですでにコードを取得している場合に便利です。 |
| 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 には 4 種類あります: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 を、Claude Desktop、Claude Code、Cursor、Windsurf、Codex など、MCP に対応するあらゆる AI エージェントに公開します。
エージェントとのチャットから、またはエージェントが構築するアプリから、ワンタイムパスワード(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 キーなしでエージェントアカウントを作成し、一度だけ表示されるキーを返します。 |
get_account_status | 検証状況、残高、プラン、ステータスを確認します。必要に応じて確認メールを再送信できます。 |
get_topup_quote | クレジット購入の見積もりを取得し、USDC およびカード決済用のコマンドを返します。 |
top_up_credits | MPP の支払いチャレンジと再試行の詳細、またはクレジット反映後の結果を返します。 |
すべてのツールで outputSchema を宣言しているため、クライアントは structuredContent の型を検証できます。エラー結果には { error, status?, endpoint?, body? } が含まれ、isError: true が設定されます。
すべてのツールは、https://api.myotp.app の公開 MyOTP REST API を呼び出します。モックサーバーを使用する場合は、MYOTP_BASE_URL 環境変数で上書きしてください。
インストール
グローバルにインストールする必要はありません。npx が最新バージョンを必要に応じて取得し、実行します。
npx @myotp/mcp
スコープ付きの名前を使用してください。
myotp-mcpはパッケージ内の bin 名であり、 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 を再起動します。エージェントに 「電話番号 +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 は JSON ではなく TOML を読み込みます。~/.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 を使用する場合は、API キーの IP 許可リストに 108.61.176.199 を追加してください。
ホスト型の呼び出しは、お使いのマシンではなく、このアドレスから 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(デフォルト — ローカルのエージェントへのインストール向け)
サーバーは stdin から JSON-RPC メッセージを読み取り、stdout に書き込みます。API キーは MYOTP_API_KEY 環境変数から取得され、エージェントがサーバーを起動するときに設定されます。これは Claude Desktop、Claude Code、Cursor などのデスクトップアプリに適したモードです。
MYOTP_API_KEY=sk_... npx @myotp/mcp
# or explicitly
MYOTP_API_KEY=sk_... npx @myotp/mcp --stdio
Streamable HTTP(ホスト型サーバー向け)
MCP 対応エージェントが接続できる HTTP サーバーを実行します。認証が必要なツールには、リクエストごとに X-API-Key で API キーが渡されるため、1 つのホスト型インスタンスで複数のテナントに対応できます。匿名で使用できるツールでは、このヘッダーは不要です。
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 モード:同時に保持するセッションの最大数です。新しいセッションが開始されると、最も長く使われていないセッションが終了します。アイドル状態のセッションが優先されます。 |
ツール呼び出しの例
サーバーを設定すると、エージェントに次のようなことを依頼できます。
- 「14155550123 に WhatsApp で OTP を送信して。」
- 「MyOTP を使って、その電話番号のコード 482913 を検証して。」
- 「最後の OTP は配信された? message_id
a1b2…のステータスを確認して。」 - 「過去 7 日間の OTP 使用状況を見せて。」
- 「この MyOTP アカウントのクレジット残高はいくら?」
- 「[email protected] の MyOTP エージェントアカウントを作成して。」
- 「エージェントアカウントのメールアドレスが認証済みか確認して、必要ならメールを再送して。」
- 「MyOTP クレジットを 500 件分追加する見積もりを出して。」
- 「NoBalance で送信に失敗した。クレジットを 100 件チャージして。」
内部では、エージェントが適切なツールを選び、公開されている JSON Schema に照らして入力を検証し、MyOTP API を呼び出します。
エージェントによるクレジットの購入
エージェントは MyOTP クレジットを自分で購入できます。402 を受け取り、支払いを 1 回行うだけで、購入ページやカード情報入力フォームは必要ありません。クレジットは 1 件あたり $0.02 で、1 回の呼び出しにつき最低 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 に POST します。想定される 402 レスポンスには、Tempo の USDC と、カードの上限に達していない場合は Stripe 経由のカードまたは Link の MPP オファーが含まれます。このツールは、デコード済みのオファー、チャレンジ ID、再試行用の正確な URL と本文、認証情報のプレースホルダーを含むヘッダーを返します。
MCP サーバーはエージェントのウォレットを保持できません。返されたコマンドのいずれかで your MyOTP API key をローカルで置き換えて実行してください。MPP クライアントが支払いを行い、支払い認証情報を付けて同じリクエストを再試行します。この再試行によってアカウントにクレジットが加算されます。実行環境がすでに fetch を MPP 認証情報プロバイダーでラップしている場合、このツールはクレジット加算済みの成功レスポンスを直接受け取って返すことができます。
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 エンドポイントを呼び出します。レスポンスにはアカウントの完全なレコードと、1 回だけ表示される 32 文字の API キーが含まれます。すぐに保存し、MYOTP_API_KEY を設定するか、ホスト型クライアントから送信するよう設定してください。エージェントアカウントでは IP 許可リストが開放されており、電話番号の確認は不要です。残高 0、Starter の従量課金制プランで開始します。
指定したアドレスに確認メールが送信されます。カードでのチャージを有効にするには、24 時間以内に人間がリンクをクリックする必要があります。USDC でのチャージはすぐに利用できます。get_account_status を使って email_verified、残高、プラン、アカウントのステータスを確認してください。または、resend_verification: true を指定して呼び出すと、確認メールを再送信できます。その後、OTP を送信する前に get_topup_quote または top_up_credits を使ってアカウントに入金してください。
開発
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 モードでは、API キーはリクエストごとに
X-API-Keyからのみ読み取られます。起動時に設定するグローバルキーはありません。 - MyOTP API では IP ホワイトリストも適用されます。このサーバーを実行しているホスト(または HTTP モードの場合はエンドユーザーの IP)が、使用するキーの許可リストに含まれていることを確認してください。
- OTP コードをプレーンテキストで返す設定(
return_otp: true)はテスト専用です。本番環境のユーザーフローでは決して有効にしないでください。
ライセンス
MIT — LICENSE を参照してください。
BroadNet Technologies が開発しました。お問い合わせ:[email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。