Skip to main content
Glama
ali-toghiani

SMS.ir MCP server

by ali-toghiani

SMS.ir MCP サーバー

SMS.ir Panel V2 API のための厳選された、安全ゲート付きツールセットを公開するローカル Model Context Protocol サーバーです。Python + FastMCP で構築されています。

  • Codex / Claude Desktop / Claude Code 用の stdio トランスポート

  • ローカル開発・テスト用の streamable HTTP トランスポート

  • 読み取り操作はそのまま動作します。すべての送信は課金対象であり、デフォルトでブロックされ、確認フラグ サーバー側のキルスイッチの両方が必要です。

  • 電話番号、メッセージ本文、API キー、OTP コードはログでマスクされます。

SMS.ir Panel V2 Postman コレクション(このリポジトリには含まれていません — 実際の API キーが埋め込まれているため)から構築されています。正規化された API の説明は docs/API.mddocs/openapi.yaml にあります。


1. セットアップ

Python 3.10+ が必要です(CPython 3.12 で開発・テスト済み)。

cd C:\Users\Kasra\Documents\sms.ir-mcp

# create the project-local virtual environment
py -3.12 -m venv .venv

# install runtime deps (pinned)
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

# ...or install with the package + dev/test extras
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"

Related MCP server: iletiMerkezi MCP Server

2. 設定

すべての設定は環境変数から取得されます。ローカルで使用する場合は、サンプルの env ファイルをコピーして記入してください — これは git で無視され、コミットされることはありません。

copy .env.example .env
notepad .env

変数

必須

デフォルト

目的

SMSIR_API_KEY

はい

SMS.ir Panel API キー。X-API-KEY ヘッダーとして送信されます

SMSIR_DEFAULT_LINE_NUMBER

いいえ

送信ツール用のフォールバック送信元回線

SMSIR_ALLOW_SEND

いいえ

false

キルスイッチ。 実際の送信がプロセスから出るには true が必要

SMSIR_BASE_URL

いいえ

https://api.sms.ir

API ベース URL(ホストは許可リストで制限)

SMSIR_ALLOW_CUSTOM_BASE_URL

いいえ

false

api.sms.ir 以外のホストを許可(ローカルモックのみ)

SMSIR_TIMEOUT_SECONDS

いいえ

15

リクエストごとのタイムアウト

SMSIR_MAX_RETRIES

いいえ

2

一時的な障害(429 / 5xx / ネットワーク)に対する再試行回数

SMSIR_RATE_LIMIT_PER_MINUTE

いいえ

60

クライアント側のレート制限

SMSIR_MAX_PAGE_SIZE

いいえ

200

page_size に受け入れられる上限

SMSIR_LOG_LEVEL

いいえ

INFO

DEBUG / INFO / WARNING / ERROR

SMSIR_ENV_FILE

いいえ

./.env

自動ロードする env ファイルのパス

実際の環境変数は、env ファイルの値よりも常に優先されます。

3. 実行

# stdio (what MCP clients launch)
.\.venv\Scripts\python.exe -m sms_ir_mcp --transport stdio

# streamable HTTP for local testing (http://127.0.0.1:8000/mcp)
.\.venv\Scripts\python.exe -m sms_ir_mcp --transport http --host 127.0.0.1 --port 8000

クレジットを消費しない簡単な接続・認証チェックには、接続済みの任意のクライアントから health_check ツール(または get_balance)を呼び出してください — どちらも内部的には GET /v1/credit です。

4. ツール

読み取り専用ツールは常に利用可能です。書き込みツールには confirm=true SMSIR_ALLOW_SEND=true の両方が必要です。破壊的ツールには confirm=true が必要です。

ツール

種類

API

説明

get_balance

読み取り

GET /v1/credit

残りの SMS クレジット

list_lines

読み取り

GET /v1/line

送信元回線番号 / 仮想番号

get_message_report

読み取り

GET /v1/send/{id}

送信済みメッセージ 1 件の配信レポート / ステータス

get_pack_report

読み取り

GET /v1/send/pack/{packId}

一括パックの受信者ごとの結果(ページング対応)

list_sent_messages

読み取り

GET /v1/send/live · /archive

送信済みメッセージ、scope=today|archive

list_sent_packs

読み取り

GET /v1/send/pack · /archive/pack

一括パック、scope=today|archive

list_inbound_messages

読み取り

GET /v1/receive/latest · /live · /archive

受信メッセージ、scope=latest|today|archive

extract_latest_otp

読み取り

GET /v1/receive/latest

解析可能なワンタイムコードを含む最新の受信メッセージ(ヒューリスティック)

health_check

読み取り

GET /v1/credit

到達可能性 + 認証チェック、課金されません。有効な設定も返します

reload_config

管理

サーバーを再起動せずに .env / 環境変数を再読み込み(例: SMSIR_ALLOW_SEND を切り替えた後)。送信はしません

send_sms

課金対象

POST /v1/send/bulk

1 つのテキストを 1 人以上の受信者に送信

send_verification_code

課金対象

POST /v1/send/verify

テンプレート化された OTP / 認証メッセージ

send_personalized_sms

課金対象

POST /v1/send/likeToLike

受信者ごとに異なるテキストを送信

cancel_scheduled_send

破壊的

DELETE /v1/send/scheduled/{packId}

未送信の予約パックをキャンセル

すべてのツールは、成功時には {"ok": true, "data": …, …} を、失敗時には {"ok": false, "error": {"code": …, "message": …}} を返します。エラーコード: config_errorvalidation_errorconfirmation_requiredsend_disabledauth_errorrate_limitedtransient_errorapi_errorinternal_error

// check balance
get_balance() -> {"ok": true, "data": {"credit": 45210}}

// read the latest OTP received on a given number
extract_latest_otp({"mobile": "9821000"})
  -> {"ok": true, "data": {"otp": "834122", "matched": true, "from": "*****1000", ...}}

// attempt a send without confirming -> refused, nothing sent
send_sms({"message_text": "Hi", "mobiles": ["09121234567"]})
  -> {"ok": false, "error": {"code": "confirmation_required", ...}}

// confirmed send, but kill switch still off -> refused, nothing sent
send_sms({"message_text": "Hi", "mobiles": ["09121234567"], "confirm": true})
  -> {"ok": false, "error": {"code": "send_disabled", ...}}

// edited .env to set SMSIR_ALLOW_SEND=true -> apply it without restarting
reload_config()
  -> {"ok": true, "data": {"config": {"allow_send": true, ...}, "changed": ["allow_send"]}}

// with SMSIR_ALLOW_SEND=true AND confirm=true -> actually sends (billable)
send_sms({"message_text": "Hi", "mobiles": ["09121234567"],
          "line_number": "30007732000000", "confirm": true})
  -> {"ok": true, "data": {"packId": "…", "messageIds": [123], "cost": 1.0}, "recipients": 1}

5. 安全モデル

  • 課金対象の操作send_smssend_verification_codesend_personalized_sms)には両方が必要です:

    1. ツール呼び出しでの confirm=true、および

    2. サーバー環境での SMSIR_ALLOW_SEND=true。 キルスイッチがオフの場合、確認済みの呼び出しでも何も送信されません。

  • 破壊的操作cancel_scheduled_send)には confirm=true が必要です。

  • 任意のベース URL は不可: SMSIR_ALLOW_CUSTOM_BASE_URL=true でない限り、api.sms.ir のみ受け入れられます。HTTPS が強制されます。

  • ヘッダーインジェクションなし: 呼び出し元はリクエストヘッダーを設定できません。型指定され検証されたフィールドのみが転送されます。

  • タイムアウト + 制限付き再試行 + クライアント側レート制限がすべてのリクエストに適用されます。

  • マスキング: API キー、電話番号、メッセージ本文、OTP 値はログ出力でマスクされます。

  • 管理エンドポイントなし: Postman コレクション内の操作のみが公開されます。アカウント / 設定管理用のものはありません。

6. クライアント登録

実際の API キーはこのフォルダの .env に置いてください — クライアント設定ファイルには決して入れないでください。以下の各設定は、クライアントをこのサーバーとその .env にポイントするだけです。

Codex CLI(インストール済み)

codex mcp add sms-ir `
  --env SMSIR_ENV_FILE=C:\Users\Kasra\Documents\sms.ir-mcp\.env `
  -- C:\Users\Kasra\Documents\sms.ir-mcp\.venv\Scripts\python.exe -m sms_ir_mcp --transport stdio

codex mcp list          # sms-ir should appear
codex mcp get sms-ir

手動での同等設定: docs/codex_config.example.toml

Claude Code(インストール済み)

このリポジトリにはプロジェクトスコープの .mcp.json が同梱されています。このディレクトリで Claude Code を開き、プロンプトが表示されたら sms-ir サーバーを承認してください:

cd C:\Users\Kasra\Documents\sms.ir-mcp
claude
/mcp                    # shows sms-ir and its tools

代わりにユーザースコープで登録する場合:

claude mcp add sms-ir --scope user `
  --env SMSIR_ENV_FILE=C:\Users\Kasra\Documents\sms.ir-mcp\.env `
  -- C:\Users\Kasra\Documents\sms.ir-mcp\.venv\Scripts\python.exe -m sms_ir_mcp --transport stdio

Claude Desktop(未インストール)

インストールしたら、docs/claude_desktop_config.example.json%APPDATA%\Claude\claude_desktop_config.json にマージしてください(事前にバックアップを取り、他のサーバーは保持してください)。

7. 開発

.\.venv\Scripts\python.exe -m ruff check src tests
.\.venv\Scripts\python.exe -m ruff format --check src tests
.\.venv\Scripts\python.exe -m pytest

テストでは、リクエスト構築、認証ヘッダー、エンベロープ解析、エラー正規化、再試行 / レート制限、引数検証、マスキング、OTP 抽出、すべてのツールのモック統合(Postman のサンプルペイロードを使用)、OpenAPI とコレクションの整合性、MCP ツールの検出をカバーしています。

8. 最初のライブテスト(資格情報を提供した後)

このリポジトリ内の何も、課金対象の呼び出しを行ったことはありません。最初の実際の送信を実行するには、明示的に承認する必要があります:

  1. キーを .env に置きます:

    SMSIR_API_KEY=<your real key>
    SMSIR_DEFAULT_LINE_NUMBER=<your approved line>
    SMSIR_ALLOW_SEND=true
  2. 費用をかけずに接続を確認します — 接続済みのクライアントから health_check(または get_balance)を呼び出します。

  3. そのときだけ、最初の課金対象の呼び出しを行います。正確なツール呼び出し:

    send_sms({
      "message_text": "SMS.ir MCP test",
      "mobiles": ["<your own mobile>"],
      "line_number": "<your approved line>",
      "confirm": true
    })

    Codex での表現: "Use the sms-ir server's send_sms tool to send 'SMS.ir MCP test' to from line , with confirm true."

9. トラブルシューティング

症状

原因 / 修正

config_error: SMSIR_API_KEY is not set

環境変数または .env にキーがない。クライアントが渡す SMSIR_ENV_FILE パスを確認

すべての呼び出しで auth_error

キーが間違っている / ローテーションされた、またはキーに Panel API アクセスがない

send_disabled

サーバー環境で SMSIR_ALLOW_SENDtrue になっていない

.env を編集したが変更が反映されない

サーバーは起動時に一度だけ設定を読み取ります。reload_config を呼び出すか、MCP クライアントを再起動してサーバーを再生成してください

confirmation_required

ツールを "confirm": true で再呼び出し

validation_error: Invalid mobile number

10〜15 桁、先頭の + は任意

rate_limited

クライアント側のリミッターが作動。SMSIR_RATE_LIMIT_PER_MINUTE を上げるか、速度を落とす

transient_error

再試行後のネットワーク / 5xx。接続と SMS.ir のステータスを確認

クライアントにツールが表示されない

クライアント設定の command パスが間違っている。.venv\Scripts\python.exe を指すようにする

api_errorapi_status

SMS.ir がリクエストを拒否。message にその理由が含まれます

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Enables comprehensive email marketing and transactional email operations through SendGrid's API v3. Supports contact management, campaign creation, email automation, list management, and email sending with built-in read-only safety mode.
    58
    1,384
    3
    ISC
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching SOLAPI documentation and examples, and sending/managing SMS, LMS, MMS, RCS, and Kakao messages with safety guards.
    250
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP clients to read Instantly.ai analytics and manage leads, campaigns, Unibox, sender accounts, blocklist, and webhooks, with write actions gated behind confirm prompts and configurable safety policies.
    40
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ali-toghiani/sms-ir-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server