Grizzly SMS MCP Server
OfficialAllows requesting virtual phone numbers to receive SMS verification codes for Facebook.
Allows requesting virtual phone numbers to receive SMS verification codes for Google.
Allows requesting virtual phone numbers to receive SMS verification codes for Instagram.
Allows requesting virtual phone numbers to receive SMS verification codes for Telegram.
Allows requesting virtual phone numbers to receive SMS verification codes for Uber.
Allows requesting virtual phone numbers to receive SMS verification codes for WhatsApp.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Grizzly SMS MCP Serverrent a virtual number for Telegram"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Grizzly SMS — MCP Server & OpenClaw Skill
English
MCP (Model Context Protocol) server and OpenClaw Skill for integrating with Grizzly SMS — a platform for SMS verification codes and virtual phone numbers. Compatible with Cursor, Claude Desktop, OpenClaw (MCP and Skill modes).
What This Project Provides
Mode | Description | Use Case |
MCP Server | Standards-based MCP server exposing Grizzly API tools | Cursor, Claude Desktop, OpenClaw with mcpServers |
OpenClaw Skill | Instruction-based skill using exec + CLI script | OpenClaw skills-only setup (no mcpServers) |
Features
MCP Server
Phone operations:
request_number,get_status,set_statusAccount:
get_balanceInfo:
get_countries,get_services,get_prices
OpenClaw Skill
Dialog-based API key: Bot asks for the key during the conversation
Balance & top-up: Check balance and provide crypto wallet (USDT TRC-20) for top-up
Number lifecycle: Request number, poll for SMS, complete or cancel activation
Full registration workflow: Resolve service/country codes → rent number → open browser → fill forms → enter SMS code
Formatted output: Phone, activation ID, and SMS in copy-friendly format (monospace on Telegram)
OpenClaw Skill Pipeline
API key — Bot asks: Please provide your Grizzly SMS API key
Balance & top-up — Bot can show balance and crypto wallet address for USDT TRC-20 top-up
Number — Bot rents a number for the requested service and country
Status — Bot can cancel an activation or request a new SMS
SMS — Bot polls and returns the verification code
Complete — Bot marks activation complete after code is used
See CONFIG.md for OpenClaw skill setup.
Prerequisites
Node.js 18+
Grizzly SMS API key — register at grizzlysms.com, then get it from the API section
Installation
git clone https://github.com/GrizzlySMS-Git/grizzly-sms-mcp.git
cd grizzly-sms-mcp
npm install
npm run buildConfiguration: MCP Server (Cursor, Claude Desktop, OpenClaw mcpServers)
Cursor
Location: %APPDATA%\Cursor\User\globalStorage\mcp.json (Windows) | ~/Library/Application Support/Cursor/User/globalStorage/mcp.json (macOS) | ~/.config/Cursor/User/globalStorage/mcp.json (Linux)
{
"mcpServers": {
"grizzly-sms": {
"command": "node",
"args": ["/absolute/path/to/grizzly-sms-mcp/dist/index.js"],
"env": {
"GRIZZLY_SMS_API_KEY": "your_api_key",
"GRIZZLY_SMS_BASE_URL": "https://api.grizzlysms.com"
}
}
}
}OpenClaw (mcpServers)
Location: ~/.openclaw/openclaw.json (macOS/Linux) | %APPDATA%\.openclaw\openclaw.json (Windows)
{
"agents": {
"list": [{
"id": "main",
"mcpServers": {
"grizzly-sms": {
"command": "node",
"args": ["/absolute/path/to/grizzly-sms-mcp/dist/index.js"],
"env": {
"GRIZZLY_SMS_API_KEY": "your_api_key",
"GRIZZLY_SMS_BASE_URL": "https://api.grizzlysms.com"
}
}
}
}
}
}Use absolute paths. Restart after changes: openclaw gateway restart
Configuration: OpenClaw Skill (skills-only, no mcpServers)
Add skill path to
openclaw.json:
{
"skills": {
"load": {
"extraDirs": ["/absolute/path/to/grizzly-sms-mcp"]
},
"entries": {
"grizzly_sms": {
"enabled": true
}
}
}
}Enable exec and optionally browser tools for the agent
Restart:
npx openclaw gateway restart
Full setup (exec approvals, browser tool, API key in dialog) — see CONFIG.md.
MCP Tools Reference
Tool | Parameters | Description |
| service (required), country (optional), maxPrice, providerIds, exceptProviderIds | Rent a virtual number |
| activationId (required) | Get activation status and SMS code |
| activationId, status (6=complete, 8=cancel) | Change activation status |
| — | Check balance |
| — | Get USDT TRC-20 wallet address for top-up |
| — | List countries |
| — | List services |
| service, country (optional) | Get prices |
Common Service Codes
Code | Service |
tg | Telegram |
wa | |
ig | |
fb | |
go | |
ub | Uber |
Common Country IDs
ID | Country |
73 | Brazil |
1 | Ukraine |
16 | England |
187 | USA |
22 | India |
Project Structure
grizzly-sms-mcp/
├── SKILL.md # OpenClaw skill instructions
├── CONFIG.md # OpenClaw skill config guide
├── clawhub.json # ClawHub metadata
├── scripts/
│ └── grizzly-cli.mjs # CLI for OpenClaw exec
├── src/ # MCP server (TypeScript)
│ ├── index.ts
│ └── grizzly-sms-client.ts
├── docs/
├── package.json
└── README.mdDevelopment
npm run dev # Development mode
npm run build # Build MCP server
npm start # Run MCP server
npm test # Run tests
npm run test:api # Test API methodsTroubleshooting
GRIZZLY_SMS_API_KEY required — Set in
.env, config, or provide in chat (Skill mode)BAD_KEY — Verify API key at grizzlysms.com
NO_BALANCE — Top up at grizzlysms.com (USDT TRC-20 supported)
exec not permitted — Configure exec approvals; see CONFIG.md
Support
API docs: grizzlysms.com/docs
Website: grizzlysms.com
Issues: GitHub Issues
License
MIT — see LICENSE
Related MCP server: MCP Agents SMS
Русский
MCP (Model Context Protocol) сервер и OpenClaw Skill для интеграции с Grizzly SMS — платформой SMS верификации и виртуальных номеров. Совместимо с Cursor, Claude Desktop, OpenClaw (режимы MCP и Skill).
Что предоставляет проект
Режим | Описание | Когда использовать |
MCP Server | MCP‑сервер с инструментами Grizzly API | Cursor, Claude Desktop, OpenClaw с mcpServers |
OpenClaw Skill | Skill на exec + CLI‑скрипт | OpenClaw только со skills (без mcpServers) |
Возможности
MCP Server
Номера:
request_number,get_status,set_statusАккаунт:
get_balanceСправочники:
get_countries,get_services,get_prices
OpenClaw Skill
API‑ключ в диалоге: бот запрашивает ключ в чате
Баланс и пополнение: показывает баланс и криптокошелёк (USDT TRC-20) для пополнения
Жизненный цикл номера: аренда номера, ожидание SMS, завершение или отмена активации
Полный workflow регистрации: определение сервиса/страны → аренда номера → браузер → заполнение форм → ввод SMS‑кода
Форматированный вывод: номер, ID активации и SMS в удобном для копирования виде (моноширинный текст в Telegram)
Пайплайн OpenClaw Skill
API‑ключ — бот спрашивает: Выдайте API ключ Grizzly SMS
Баланс и пополнение — бот показывает баланс и адрес кошелька USDT TRC-20
Номер — бот арендует номер для указанного сервиса и страны
Статус — бот может отменить активацию или запросить новый SMS
SMS — бот опрашивает статус и возвращает код
Завершение — бот помечает активацию выполненной после использования кода
Подробная настройка — в CONFIG.md.
Требования
Node.js 18+
API‑ключ Grizzly SMS — регистрация на grizzlysms.com, ключ в разделе API
Установка
git clone https://github.com/GrizzlySMS-Git/grizzly-sms-mcp.git
cd grizzly-sms-mcp
npm install
npm run buildКонфигурация: MCP Server (Cursor, Claude Desktop, OpenClaw mcpServers)
Cursor
Путь: %APPDATA%\Cursor\User\globalStorage\mcp.json (Windows) | ~/Library/Application Support/Cursor/User/globalStorage/mcp.json (macOS) | ~/.config/Cursor/User/globalStorage/mcp.json (Linux)
{
"mcpServers": {
"grizzly-sms": {
"command": "node",
"args": ["/абсолютный/путь/к/grizzly-sms-mcp/dist/index.js"],
"env": {
"GRIZZLY_SMS_API_KEY": "ваш_api_ключ",
"GRIZZLY_SMS_BASE_URL": "https://api.grizzlysms.com"
}
}
}
}OpenClaw (mcpServers)
Путь: ~/.openclaw/openclaw.json (macOS/Linux) | %APPDATA%\.openclaw\openclaw.json (Windows)
{
"agents": {
"list": [{
"id": "main",
"mcpServers": {
"grizzly-sms": {
"command": "node",
"args": ["/абсолютный/путь/к/grizzly-sms-mcp/dist/index.js"],
"env": {
"GRIZZLY_SMS_API_KEY": "ваш_api_ключ",
"GRIZZLY_SMS_BASE_URL": "https://api.grizzlysms.com"
}
}
}
}
}
}Используйте абсолютные пути. После изменений: openclaw gateway restart
Конфигурация: OpenClaw Skill (только skills, без mcpServers)
Добавьте путь к skill в
openclaw.json:
{
"skills": {
"load": {
"extraDirs": ["/абсолютный/путь/к/grizzly-sms-mcp"]
},
"entries": {
"grizzly_sms": {
"enabled": true
}
}
}
}Включите инструменты exec и по необходимости browser
Перезапуск:
npx openclaw gateway restart
Полная настройка (exec approvals, browser, API key в диалоге) — в CONFIG.md.
Справка по MCP‑инструментам
Инструмент | Параметры | Описание |
| service (обяз.), country (опц.), maxPrice, providerIds, exceptProviderIds | Аренда виртуального номера |
| activationId (обяз.) | Статус активации и SMS‑код |
| activationId, status (6=завершить, 8=отменить) | Изменение статуса |
| — | Баланс |
| — | Адрес кошелька USDT TRC-20 для пополнения |
| — | Список стран |
| — | Список сервисов |
| service, country (опц.) | Цены |
Коды сервисов
Код | Сервис |
tg | Telegram |
wa | |
ig | |
fb | |
go | |
ub | Uber |
ID стран
ID | Страна |
73 | Бразилия |
1 | Украина |
16 | Англия |
187 | США |
22 | Индия |
Решение проблем
GRIZZLY_SMS_API_KEY required — Задайте в
.env, конфиге или передайте в чате (Skill)BAD_KEY — Проверьте ключ на grizzlysms.com
NO_BALANCE — Пополните на grizzlysms.com (USDT TRC-20)
exec not permitted — Настройте exec approvals в CONFIG.md
Поддержка
API: grizzlysms.com/docs
Сайт: grizzlysms.com
Issues: GitHub Issues
Лицензия
MIT — см. LICENSE
Available Tools
8 toolsget_balanceB
Get account balance
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It does not state whether the operation is read-only, whether authentication is required, or what the response format is. The description is minimal and lacks transparency beyond the bare function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using only four words. It is front-loaded and has no wasted content. However, it could be slightly more descriptive without losing conciseness, such as adding 'current' or 'available' balance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no output schema), the description is minimally adequate. It tells what the tool does, but it does not mention return values, potential errors, or any related context. For a simple getter, this is acceptable but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers 100% of the parameters trivially. The baseline for zero-parameter tools is 4, and no additional parameter information is needed or provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'account balance'. It is unambiguous and specific enough to understand the tool's purpose, though it does not explicitly distinguish it from siblings beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. There are no hints about prerequisites, context, or exclusions. The description simply states what it does without any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_countriesB
Get list of available countries
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only says 'Get list of available countries,' which implies a read operation but does not mention return format, pagination, size limits, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise single sentence that is front-loaded and free of filler. Every word is meaningful for the simple operation it describes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and no output schema, and the description is mostly sufficient to understand its purpose. However, a bit more detail about the response structure or its distinction from 'get_top_countries' would improve completeness. For this low complexity, the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers parameter semantics, and the description does not need to elaborate. The phrase 'available countries' adds a slight contextual nuance, but the baseline of 4 for parameterless tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'list of available countries', clearly identifying this as a read operation returning country data. It is not tautological, but it does not explicitly distinguish itself from the sibling tool 'get_top_countries'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_top_countries' or other list tools. The description only states what the tool does, with no mention of typical use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricesB
Get prices for services by country
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Country ID or "*" for any country | |
| service | No | Service code | |
| version | No | API version (v1, v2, or v3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It does not state whether the operation is read-only, whether authentication is required, what the response shape is, or whether multiple countries/services can be queried in one call. The verb 'get' hints at a non-destructive operation, but that is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It is appropriately sized for the tool's apparent simplicity, delivering the core message without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are three parameters with full schema descriptions and no output schema, the description is minimally complete. It communicates the tool's purpose but omits details about return format, invocation nuances (e.g., whether service is optional), or how version affects pricing. However, for a straightforward lookup tool, this may be sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning to the parameters beyond what the schema already provides; it just reiterates the general purpose. The schema clearly defines country, service, and version, including the '*' wildcard for country, so this is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('get'), the resource ('prices for services'), and the scope ('by country'). It distinguishes itself from siblings like get_countries and get_services by specifying that this tool retrieves pricing data. The intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or scenarios where get_balance or get_wallet might be more appropriate. The description implies its use for price lookups but provides no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_servicesB
Get list of available services
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description alone must convey behavioral traits. It only says 'Get list' without explaining response format, authentication needs, rate limits, or any side effects. For a read-only tool, this is minimal but not entirely misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant words. It is appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description is minimally viable. However, it fails to define the domain meaning of 'services' or how this list relates to the sibling tools, leaving room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds value by specifying the output is a list of services, though it does not elaborate on what constitutes a 'service' in this domain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get list of available services' clearly states the verb and resource. It is more specific than a tautology but lacks explicit differentiation from siblings like get_countries or get_operators, though 'services' likely has a distinct domain meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings or on prerequisites. The description simply states the action without any contextual pointers or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusC
Get activation status and SMS code
| Name | Required | Description | Default |
|---|---|---|---|
| activationId | Yes | Activation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the purpose and does not explain return format, error behavior, permissions, or side effects. The word 'Get' implies read-only, but no explicit safety or response details are given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately conveys the tool's purpose. Every word is meaningful, with no redundancy or filler, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should provide more detail about return values and usage context. It fails to mention when to preference this over similar siblings (e.g., get_active_activations) and does not clarify what 'status' entails, leaving the agent with incomplete information for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter, with description 'Activation ID' that minimally defines the parameter. The tool description adds no additional semantics beyond the schema, so the baseline of 3 applies. The parameter description is terse but present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get activation status and SMS code' clearly identifies the action (get) and the resource (activation status and SMS code). It distinguishes from siblings like get_balance or get_operators, though it does not explicitly mention it operates on a single activationId, leaving some ambiguity with get_active_activations or get_activation_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_active_activations or get_activation_history. The description simply states what it does without any context or exclusions, leaving the agent to infer usage from the tool name and parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_walletA
Get USDT TRC-20 crypto wallet address for balance top-up. Send USDT to this address (min 50 USD). Funds credit automatically.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful behavioral details (min 50 USD, funds credit automatically), but it does not disclose whether the address is static or changes on each call, nor any authentication or rate-limit constraints. This is a moderate gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each serving a purpose: defining the action, providing instruction, and explaining the automatic crediting behavior. There is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is sufficiently complete. It explains what is returned (a wallet address) and what the caller should do with it. It does not cover edge cases like errors or address stability, but those are not critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds context about the returned address's purpose, which is useful even though no parameter explanations are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get USDT TRC-20 crypto wallet address for balance top-up.' It specifies the resource (wallet address) and the verb (Get), and distinguishes it from siblings like get_balance by focusing on top-up rather than balance checking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'for balance top-up' and explains the follow-up action ('Send USDT to this address'). It does not explicitly name alternatives, but sibling tools are distinctly different, so the usage context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_numberB
Request a phone number for SMS verification
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Referral code | |
| ref_id | No | Referral ID | |
| country | No | Country ID (e.g., 0 for Russia) or "*" or "any" for any country | |
| forward | No | Forward option (0 or 1) | |
| service | Yes | Service code or name (e.g., "tg", "Telegram", "wa", "WhatsApp") | |
| version | No | API version (v1=plain text, v2=JSON with details) | |
| maxPrice | No | Maximum price | |
| operator | No | Operator name | |
| providerIds | No | Comma-separated provider IDs | |
| activationType | No | Activation type (1, 2, 3, or 4) | |
| phoneException | No | Comma-separated phone numbers to exclude | |
| exceptProviderIds | No | Comma-separated provider IDs to exclude |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the intended action without detailing side effects, cost implications, authentication requirements, or response format. For a mutating tool (requesting a number), this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that efficiently states the tool's purpose. There is no wasted text, and the core action is front-loaded, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, no output schema, and no annotations, a one-sentence description is severely lacking. It does not explain the request lifecycle, expected response, or error conditions, leaving the agent without enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are documented in the schema. The description itself adds no parameter information, but since the schema already provides full coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('request') and resource ('phone number') with a clear purpose ('for SMS verification'). It clearly distinguishes itself from sibling tools, which are all get/set operations on balance, wallet, status, prices, countries, or services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when a phone number is needed for SMS verification) but does not explicitly state when to use it over alternatives or any exclusions. It relies on the user to infer the use case, and no sibling alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_statusC
Change activation status
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Status code: 1=report SMS sent, 3=request another code, 6=complete activation, 8=cancel activation | |
| activationId | Yes | Activation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a write operation but does not disclose side effects, required state, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but lacks substance. It's not wordy, but it also doesn't earn its place with added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is part of a larger SMS activation flow (with siblings like request_number, get_status, etc.), but the description doesn't place it in that context. No output schema exists, so the description should explain behaviors or outcomes, but it doesn't.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (status codes and activationId). The description adds no additional parameter information, so the schema carries the full weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'change' with the resource 'activation status', clearly identifying this as a mutation tool. It distinguishes itself from sibling tools like 'get_status' by the action, though it could be more specific about the status types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no context on when to use this tool versus retrieving status or requesting numbers. With 16 sibling tools, there is no guidance on integration or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
get_balance - First observed
get_countries - First observed
get_prices - First observed
get_services - First observed
get_status - First observed
get_wallet - First observed
request_number - First observed
set_status
TDQS
Scored across 8 tools
Each tool targets a distinct aspect of the SMS verification workflow: account finances, number requests, status management, and reference data. There is no meaningful overlap between any pair of tools.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_balance, request_number). The naming is uniform and predictable across the entire set.
With 8 tools, the server is well-scoped for an SMS verification service. Every tool serves a clear function without unnecessary bloat or missing essentials.
The tools cover the core lifecycle: top-up (get_wallet, get_balance), request a number (request_number), poll for SMS (get_status, set_status), and reference data (get_prices, get_countries, get_services). This appears sufficient for the stated purpose.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
The Mobile Text Alerts SMS MCP server enables your AI to send SMS messages & manage contacts
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for provisioning dedicated real-SIM US phone numbers, receiving inbound SMS, and extracting OTP codes. Built for AI agents automating phone verification workflows.20 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that enables AI agents to autonomously buy virtual phone numbers and receive SMS verification codes. Supports multiple providers (5sim, SMS-Activate, OnlineSim) with automatic cheapest-provider selection.1MIT

agentsim-mcpofficial
AlicenseAqualityBmaintenanceMCP server that enables AI coding assistants to provision temporary US phone numbers and receive SMS OTPs for verification workflows.51MIT- AlicenseBqualityBmaintenanceMCP server for sending SMS via the SMSPM API. Send transactional SMS from Claude Desktop, Cursor, Windsurf, Cline, or any MCP client.120 npmMIT