VirtualSMS MCP Server

VirtualSMS MCP Server

Enables AI assistants to purchase virtual phone numbers, retrieve SMS verification codes, and manage activations through natural language by wrapping the VirtualSMS Consumer API.

Category
访问服务器

README

VirtualSMS MCP Server

npm version License: MIT TypeScript

An MCP (Model Context Protocol) server that wraps the VirtualSMS Consumer API, allowing AI assistants like Claude, Cursor, and Copilot to purchase virtual phone numbers, retrieve SMS verification codes, and manage activations — all through natural language.

What is VirtualSMS?

VirtualSMS is a platform for renting virtual phone numbers for SMS verification. It supports 200+ services (Telegram, WhatsApp, Google, Instagram, etc.) across 100+ countries with multiple provider backends.

What This MCP Server Does

This MCP server exposes 18 tools that map 1:1 to the VirtualSMS Consumer API actions. It normalizes the API's mixed text/JSON responses into clean structured JSON that LLMs can reason about.

Tool Categories

Category Tools Purpose
Account get_balance Check account balance
Information & Pricing get_numbers_status, get_countries, get_services_list, get_operators, get_prices, get_prices_extended, get_prices_verification, get_top_countries_by_service Browse availability, services, and pricing
Ordering order_number, order_number_v2 Purchase virtual phone numbers
Activation Management get_active_activations, check_extra_activation, get_extra_activation, set_activation_status, get_activation_status, get_activation_status_v2 Manage ordered numbers and retrieve SMS codes
Notifications get_notifications View account alerts and penalties

Quick Start

Prerequisites

3-Step Setup

  1. Get your API key from the VirtualSMS dashboard.

  2. Add the MCP server to your IDE — see INSTALL.md for IDE-specific instructions. The short version for Claude Code:

    claude mcp add virtualsms --env VIRTUALSMS_API_KEY=your_api_key_here -- npx -y @virtualsmslabs/mcp
    
  3. Start using it — ask your AI assistant:

    "Check my VirtualSMS balance" "Get prices for Telegram in Brazil" "Order a number for WhatsApp in Argentina, then check for the SMS code"

Configuration

All configuration is via environment variables:

Variable Required Default Description
VIRTUALSMS_API_KEY Yes — Your VirtualSMS API key
VIRTUALSMS_API_URL No https://api.virtualsms.de Base API URL (override for self-hosted or testing)
VIRTUALSMS_POOL_PROVIDER No — Default provider alias: alpha, prime, gamma, or zeta

Pool Providers

VirtualSMS supports multiple upstream providers behind aliases:

Alias Description
alpha Default provider (smsbower backend)
prime Herosms backend
gamma Fivesim backend
zeta Grizzlysms backend

If VIRTUALSMS_POOL_PROVIDER is not set, the platform auto-routes to the best available provider. You can override it per-call using the poolProvider parameter on most tools.

Tool Reference

Account

get_balance

Get current account balance.

  • Parameters: None
  • Returns: { balance: number }

Information & Pricing

get_numbers_status

Get quantity of available numbers per service.

  • Parameters: country?, operator?, poolProvider?
  • Returns: { "serviceCode_countryId": count, ... }

get_countries

Get list of all available countries.

  • Parameters: poolProvider?
  • Returns: Map of countryId → { id, rus, eng, chn, visible, retry, rent, multiService }

get_services_list

Get available services for a country.

  • Parameters: country?, poolProvider?
  • Returns: { status, services: [{ code, name }] }

get_operators

Get available mobile operators for a country.

  • Parameters: country (required), poolProvider?
  • Returns: { status, countryOperators: ["any", "claro", "vivo", ...] }

get_prices

Get current prices for services.

  • Parameters: service?, country?, poolProvider?
  • Returns: { countryId: { serviceCode: { cost, count } } }

get_prices_extended

Get prices with price tiers.

  • Parameters: service?, country?, freePrice?, poolProvider?
  • Returns: { countryId: { serviceCode: { cnt, physicalCount, freePriceMap, cost } } }

get_prices_verification

Get prices organized by service then country.

  • Parameters: service?, poolProvider?
  • Returns: { serviceCode: { countryId: { count, price } } }

get_top_countries_by_service

Get top 10 countries by purchase share and success rate.

  • Parameters: service (required)
  • Returns: [{ country, share, rate }]

Ordering

order_number

Purchase a virtual phone number for SMS verification.

  • Parameters: service (required), country (required), maxPrice?, operator?, phoneException?, forward?, activationType?, language?, useCashBack?, userId?, ref?, poolProvider?
  • Returns: { activationId, phoneNumber }

order_number_v2

Purchase a virtual phone number with richer JSON response.

  • Parameters: Same as order_number + orderId?
  • Returns: { activationId, phoneNumber, activationCost, countryCode, canGetAnotherSms, activationTime }

Activation Management

get_active_activations

Get all current active activations.

  • Parameters: None
  • Returns: { status, activeActivations: [{ activationId, serviceCode, phoneNumber, activationCost, activationStatus, smsCode, smsText, ... }] }

check_extra_activation

Check if a number is available for extra activation.

  • Parameters: id (required — original activation ID)
  • Returns: { status, cost, service, phone, country }

get_extra_activation

Create an extra activation on a previously used number.

  • Parameters: id (required)
  • Returns: { activationId, phoneNumber }

set_activation_status

Change activation status.

  • Parameters: id (required), status (required — "1" ready, "3" retry, "6" finish, "8" cancel)
  • Returns: { success: boolean, action: string }

get_activation_status

Get activation status (text format).

  • Parameters: id (required)
  • Returns: { status, code? } — status is one of STATUS_WAIT_CODE, STATUS_WAIT_RETRY, STATUS_OK, STATUS_CANCEL

get_activation_status_v2

Get activation status (JSON format, more detailed).

  • Parameters: id (required)
  • Returns: { status, code?, verificationType?, sms?, call? }

Notifications

get_notifications

Get user notifications (penalties, low balance, admin messages).

  • Parameters: None
  • Returns: { status, notifications: [{ id, type, title, content, read, createdAt }], unreadCount }

Error Handling

The VirtualSMS API uses text-based error codes. This MCP server normalizes them into structured JSON error objects:

{
  "error": "NO_NUMBERS",
  "message": "No phone numbers available for the requested service/country."
}

Errors are returned as tool results (not thrown as exceptions), so the LLM can reason about them and take corrective action.

Common Error Codes

Code Meaning
BAD_KEY Invalid or missing API key
NO_BALANCE Insufficient account balance
NO_NUMBERS No phone numbers available
WRONG_SERVICE Invalid service code
WRONG_COUNTRY Invalid or missing country ID
WRONG_ACTIVATION_ID Invalid activation ID
EARLY_CANCEL_DENIED Cannot cancel within 5 minutes of ordering
BANNED Account is blocked
NO_ACTIVATION No activation found with the given ID

Installation Guides

For step-by-step installation instructions for your specific IDE, see:

  • docs/INSTALL.md — Covers Claude Code, Claude Desktop, Cursor, VS Code (Copilot Chat), Windsurf, Cline, and OpenCode

Guide for LLMs

If you are an LLM looking to install this MCP server autonomously, see:

Typical Workflow

Here's a typical SMS verification workflow using the MCP tools:

1. get_balance                          → Check you have funds
2. get_prices(service="wa", country="73") → Check price and availability
3. order_number(service="wa", country="73") → Purchase a number → get activationId
4. set_activation_status(id, status="1")  → Signal "ready to receive SMS"
5. get_activation_status(id)              → Poll until STATUS_OK:{code}
6. set_activation_status(id, status="6")  → Finish the activation

Development

git clone https://github.com/VirtualSMSLabs/mcp.git
cd mcp
npm install
npm run build
npm start

Testing with MCP Inspector

npm run inspector

This launches the MCP Inspector — a web UI for interactively testing MCP tools.

License

MIT — Copyright (c) 2026 VirtualSMS Labs

Links

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选