SMS.ir MCP server
Servidor MCP de SMS.ir
Un servidor local Model Context Protocol que expone un conjunto de herramientas seleccionadas y con control de seguridad para la API Panel V2 de SMS.ir. Construido con Python + FastMCP.
Transporte stdio para Codex / Claude Desktop / Claude Code
Transporte HTTP transmisible para desarrollo y pruebas locales
Las operaciones de lectura funcionan de serie; cada envío es facturable y está bloqueado por defecto detrás de un indicador de confirmación y un interruptor de seguridad en el servidor.
Los números de teléfono, el texto de los mensajes, las claves API y los códigos OTP se enmascaran en los registros.
Construido a partir de la colección de Postman SMS.ir Panel V2 (no incluida en este repositorio: contiene una clave API real). La descripción normalizada de la API se encuentra en docs/API.md y docs/openapi.yaml.
1. Configuración
Requiere Python 3.10+ (desarrollado y probado en 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. Configuración
Toda la configuración proviene de variables de entorno. Para uso local, copie el archivo de entorno de ejemplo y complételo: está ignorado por git y nunca se confirma.
copy .env.example .env
notepad .envVariable | Requerido | Por defecto | Propósito |
| sí | – | Clave API del Panel SMS.ir, enviada como cabecera |
| no | – | Línea de remitente predeterminada para las herramientas de envío |
| no |
| Interruptor de seguridad. Debe ser |
| no |
| URL base de la API (host en lista blanca) |
| no |
| Permitir un host distinto de |
| no |
| Tiempo de espera por solicitud |
| no |
| Reintentos para fallos transitorios (429 / 5xx / red) |
| no |
| Límite de velocidad del lado del cliente |
| no |
| Límite superior aceptado para |
| no |
|
|
| no |
| Ruta al archivo de entorno a cargar automáticamente |
Las variables de entorno reales siempre anulan los valores del archivo de entorno.
3. Ejecución
# 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 8000Para una comprobación rápida de conectividad y autenticación que nunca gasta crédito, llame a la herramienta health_check (o get_balance) desde cualquier cliente conectado; ambas son GET /v1/credit internamente.
4. Herramientas
Las herramientas de solo lectura están siempre disponibles. Las herramientas de escritura requieren confirm=true y SMSIR_ALLOW_SEND=true; la herramienta destructiva requiere confirm=true.
Herramienta | Tipo | API | Descripción |
| lectura |
| Crédito SMS restante |
| lectura |
| Números de línea de remitente / números virtuales |
| lectura |
| Informe/estado de entrega de un mensaje enviado |
| lectura |
| Resultados por destinatario para un paquete masivo (paginado) |
| lectura |
| Mensajes enviados, |
| lectura |
| Paquetes masivos, |
| lectura |
| Mensajes entrantes, |
| lectura |
| Mensaje entrante más reciente que contiene un código de un solo uso analizable (heurístico) |
| lectura |
| Comprobación de alcance y autenticación, nunca facturable; también devuelve la configuración efectiva |
| administración | – | Vuelve a leer |
| facturable |
| Un texto a uno o más destinatarios |
| facturable |
| Mensaje de verificación/OTP con plantilla |
| facturable |
| Un texto distinto por destinatario |
| destructiva |
| Cancelar un paquete programado aún no enviado |
Cada herramienta devuelve {"ok": true, "data": …, …} en caso de éxito o {"ok": false, "error": {"code": …, "message": …}} en caso de error. Códigos de error: config_error, validation_error, confirmation_required, send_disabled, auth_error, rate_limited, transient_error, api_error, internal_error.
Ejemplos
// 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. Modelo de seguridad
Operaciones facturables (
send_sms,send_verification_code,send_personalized_sms) requieren ambas:confirm=trueen la llamada a la herramienta, ySMSIR_ALLOW_SEND=trueen el entorno del servidor. Con el interruptor de seguridad desactivado, una llamada confirmada no envía nada.
Operación destructiva (
cancel_scheduled_send) requiereconfirm=true.Sin URLs base arbitrarias: solo se acepta
api.sms.ira menos queSMSIR_ALLOW_CUSTOM_BASE_URL=true. Se aplica HTTPS.Sin inyección de cabeceras: los llamadores no pueden establecer cabeceras de solicitud; solo se reenvían campos tipados y validados.
Tiempos de espera + reintentos limitados + limitación de velocidad del lado del cliente en cada solicitud.
Enmascaramiento: las claves API, los números de teléfono, los cuerpos de los mensajes y los valores OTP se enmascaran en la salida de los registros.
Sin endpoints de administración: solo se exponen las operaciones de la colección de Postman; nada para gestión de cuentas/configuración.
6. Registro de clientes
Su clave API real va en .env en esta carpeta — nunca en un archivo de configuración del cliente. Cada configuración a continuación solo apunta al cliente a este servidor y a su .env.
Codex CLI (instalado)
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-irEquivalente manual: docs/codex_config.example.toml.
Claude Code (instalado)
Este repositorio incluye un .mcp.json de ámbito de proyecto. Abra Claude Code en este directorio y apruebe el servidor sms-ir cuando se le solicite:
cd C:\Users\Kasra\Documents\sms.ir-mcp
claude
/mcp # shows sms-ir and its toolsPara registrarlo en el ámbito de usuario en su lugar:
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 (no instalado)
Cuando esté instalado, combine docs/claude_desktop_config.example.json en %APPDATA%\Claude\claude_desktop_config.json (haga una copia de seguridad primero; conserve otros servidores).
7. Desarrollo
.\.venv\Scripts\python.exe -m ruff check src tests
.\.venv\Scripts\python.exe -m ruff format --check src tests
.\.venv\Scripts\python.exe -m pytestLas pruebas cubren la construcción de solicitudes, la cabecera de autenticación, el análisis del sobre, la normalización de errores, los reintentos/limitación de velocidad, la validación de argumentos, el enmascaramiento, la extracción de OTP, la integración simulada para cada herramienta (usando las cargas útiles de ejemplo de Postman), la consistencia entre OpenAPI y la colección, y el descubrimiento de herramientas MCP.
8. Primera prueba en vivo (después de proporcionar una credencial)
Nada en este repositorio ha realizado una llamada facturable. Para ejecutar el primer envío real, que usted autoriza explícitamente:
Ponga su clave en
.env:SMSIR_API_KEY=<your real key> SMSIR_DEFAULT_LINE_NUMBER=<your approved line> SMSIR_ALLOW_SEND=trueVerifique la conectividad sin gastar nada: desde un cliente conectado llame a
health_check(oget_balance).Entonces, y solo entonces, realice la primera llamada facturable. Llamada exacta a la herramienta:
send_sms({ "message_text": "SMS.ir MCP test", "mobiles": ["<your own mobile>"], "line_number": "<your approved line>", "confirm": true })Fraseo de Codex: "Use la herramienta send_sms del servidor sms-ir para enviar 'SMS.ir MCP test' a <su propio móvil> desde la línea <línea>, con confirm true."
9. Solución de problemas
Síntoma | Causa/solución |
| No hay clave en el entorno o en |
| Clave incorrecta/rotada, o la clave no tiene acceso a la API del Panel |
|
|
Editó | El servidor lee la configuración una vez al inicio. Llame a |
| Vuelva a llamar a la herramienta con |
| Use 10–15 dígitos, con |
| Se activó el limitador del lado del cliente; aumente |
| Red/5xx después de reintentos; compruebe la conectividad y el estado de SMS.ir |
El cliente no muestra herramientas | Ruta |
| SMS.ir rechazó la solicitud; |
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