SMS.ir MCP server
SMS.ir MCP сервер
Локальный сервер Model Context Protocol, который предоставляет подобранный, защищённый набор инструментов для API панели SMS.ir V2. Создан на Python + FastMCP.
Транспорт stdio для Codex / Claude Desktop / Claude Code
Транспорт streamable HTTP для локальной разработки и тестирования
Операции чтения работают из коробки; каждая отправка платная и по умолчанию заблокирована флагом подтверждения и серверным аварийным выключателем.
Номера телефонов, текст сообщений, ключи API и OTP-коды маскируются в логах.
Создано на основе коллекции Postman SMS.ir Panel V2 (не включена в этот репозиторий —
она содержит реальный ключ API). Нормализованное описание API находится в
docs/API.md и docs/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Переменная | Обязательная | По умолчанию | Назначение |
| да | – | Ключ API панели SMS.ir, отправляется в заголовке |
| нет | – | Резервная линия отправителя для инструментов отправки |
| нет |
| Аварийный выключатель. Должен быть |
| нет |
| Базовый URL API (разрешён только из белого списка хостов) |
| нет |
| Разрешить хост, отличный от |
| нет |
| Таймаут на каждый запрос |
| нет |
| Повторы при временных сбоях (429 / 5xx / сеть) |
| нет |
| Клиентское ограничение частоты запросов |
| нет |
| Верхняя граница, принимаемая для |
| нет |
|
|
| нет |
| Путь к файлу 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 | Описание |
| чтение |
| Оставшийся SMS-кредит |
| чтение |
| Номера линий отправителя / виртуальные номера |
| чтение |
| Отчёт о доставке/статус одного отправленного сообщения |
| чтение |
| Результаты по каждому получателю для массовой рассылки (с пагинацией) |
| чтение |
| Отправленные сообщения, |
| чтение |
| Массовые рассылки, |
| чтение |
| Входящие сообщения, |
| чтение |
| Новейшее входящее сообщение, содержащее разбираемый одноразовый код (эвристика) |
| чтение |
| Проверка доступности + аутентификации, никогда не тарифицируется; также возвращает действующую конфигурацию |
| администрирование | – | Перечитывает |
| платный |
| Один текст одному или нескольким получателям |
| платный |
| Шаблонное OTP/верификационное сообщение |
| платный |
| Отдельный текст для каждого получателя |
| разрушительный |
| Отмена ещё не отправленной запланированной рассылки |
Каждый инструмент возвращает {"ok": true, "data": …, …} при успехе или
{"ok": false, "error": {"code": …, "message": …}} при ошибке. Коды ошибок:
config_error, validation_error, confirmation_required, send_disabled,
auth_error, rate_limited, transient_error, api_error, internal_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_sms,send_verification_code,send_personalized_sms) требуют оба условия:confirm=trueв вызове инструмента, иSMSIR_ALLOW_SEND=trueв окружении сервера. При выключенном аварийном выключателе подтверждённый вызов всё равно ничего не отправляет.
Разрушительная операция (
cancel_scheduled_send) требуетconfirm=true.Нет произвольных базовых URL: принимается только
api.sms.ir, еслиSMSIR_ALLOW_CUSTOM_BASE_URL=true. 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 stdioClaude 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. Первый живой тест (после предоставления учётных данных)
Ничто в этом репозитории не совершало платных вызовов. Чтобы выполнить первую реальную отправку, которую вы явно авторизуете:
Поместите ваш ключ в
.env:SMSIR_API_KEY=<your real key> SMSIR_DEFAULT_LINE_NUMBER=<your approved line> SMSIR_ALLOW_SEND=trueПроверьте подключение без трат — из подключённого клиента вызовите
health_check(илиget_balance).Затем, и только затем, выполните первый платный вызов. Точный вызов инструмента:
send_sms({ "message_text": "SMS.ir MCP test", "mobiles": ["<your own mobile>"], "line_number": "<your approved line>", "confirm": true })Формулировка для Codex: "Используй инструмент send_sms сервера sms-ir, чтобы отправить 'SMS.ir MCP test' на <ваш собственный мобильный> с линии <линия>, с confirm true."
9. Устранение неполадок
Симптом | Причина / исправление |
| Нет ключа в окружении или |
| Неверный/ротированный ключ, или у ключа нет доступа к API панели |
|
|
Изменил | Сервер читает конфигурацию один раз при запуске. Вызовите |
| Повторите вызов инструмента с |
| Используйте 10–15 цифр, необязательный ведущий |
| Сработал клиентский ограничитель; увеличьте |
| Сеть/5xx после повторов; проверьте подключение и статус SMS.ir |
Клиент не показывает инструменты | Неверный путь |
| SMS.ir отклонил запрос; |
This server cannot be installed
Maintenance
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
Send SMS, manage contacts and groups, and read delivery reports. OAuth 2.1 SureSMS login.
Send and schedule SMS and WhatsApp messages, manage contacts and templates, and track delivery.
SMS Verify: SMS Verify API is a secure and easy-to-integrate service that sends verification codes.
Email, phone, domain, URL & OFAC verification; phishing and IBAN checks via x402.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables 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.581,3843ISC
- AlicenseAqualityAmaintenanceEnables sending SMS, querying delivery reports, and managing senders and blacklists through the iletiMerkezi SMS API.11342MIT

SOLAPI MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables searching SOLAPI documentation and examples, and sending/managing SMS, LMS, MMS, RCS, and Kakao messages with safety guards.250MIT- AlicenseAqualityAmaintenanceEnables 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.40MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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