# io.github.companybetatel/mcp-server (npm · betatel-mcp-server)

Phone verification: free keyless coverage/pricing discovery + 4-channel OTP send. 15 tools.

- Trust score: 64/100 (medium)
- Change this week: +25
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `betatel-mcp-server`: 64/100 (this document), [markdown](https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server.md), [page](https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `betatel-mcp-server`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (123 of 125), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (123 of 125), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (ISC).
  - Actively maintained (last published 24 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 74/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2117 tokens (~141/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add companybetatel-mcp-server -- npx -y betatel-mcp-server
```

### Codex

```bash
codex mcp add companybetatel-mcp-server -- npx -y betatel-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "companybetatel-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "betatel-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add companybetatel-mcp-server --command npx --arg -y --arg betatel-mcp-server
```

### Hermes

```yaml
mcp_servers:
  companybetatel-mcp-server:
    command: "npx"
    args: ["-y", "betatel-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "companybetatel-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "betatel-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 64, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 60, +60)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: ISC

### 2026-08-01 (score 0, −14)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-31 (score 14, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 39)

First indexed and scored.

## MCP tools (15)

### `betatel_list_supported_countries` (~108 tokens)

List supported countries

List the countries Betatel supports for phone verification and which channels (Flash Call, SMS, WhatsApp, Telegram) are available in each. Channels shown are those with a current standard rate in the coverage snapshot. No API key required. Use this when a user asks 'which countries can I verify phone numbers in?' or 'does Betatel support <country>?'.

Input parameters:

- `channel` (string): Optional channel filter. When set, only countries that support this channel are returned.

### `betatel_get_verification_pricing` (~109 tokens)

Get verification pricing

Get the per-channel price to verify a phone number in a country, across Flash Call, SMS, WhatsApp and Telegram. Each result includes its currency (usually EUR). No API key required. Use this when a user asks 'how much does SMS/Flash Call verification cost in <country>?'.

Input parameters:

- `country` (string, required): Country as ISO 3166-1 alpha-2 code (e.g. "RS") or name (e.g. "Serbia").

### `betatel_check_operator_coverage` (~100 tokens)

Check operator coverage

List the mobile operators (MCC-MNC) present in a country and whether Flash Call verification has a current standard rate there. No API key required. Use this when a user asks 'which operators do you cover in <country>?' or 'is Flash Call available in <country>?'.

Input parameters:

- `country` (string, required): Country as ISO 3166-1 alpha-2 code (e.g. "RS") or name.

### `betatel_estimate_cost` (~169 tokens)

Estimate verification cost

Estimate the total cost to run N verifications in a country, ranked cheapest-channel-first (amounts include their currency, usually EUR). No API key required. Use this when a user asks 'what will it cost to verify <N> users in <country>?' or 'which channel is cheapest for <country>?'.

Input parameters:

- `channel` (string): Channel to estimate. Omit (or set compare: true) to compare all four channels.
- `compare` (boolean): When true, return all four channels ranked cheapest-first instead of a single channel.
- `country` (string, required): Country as ISO 3166-1 alpha-2 code (e.g. "RS") or name.
- `verifications` (integer, required): Number of verifications to estimate the cost for.

### `betatel_send_sms` (~136 tokens)

Send SMS via Betatel

Send an SMS through the Betatel API. Use this when the user wants to send a text message, notification, alert, or one-time password (OTP) over SMS to a phone number. Accepts a recipient phone number in E.164 format and the message text (up to 4096 characters). Returns a messageId once the message is accepted by the carrier gateway.

Input parameters:

- `from` (string): Optional sender ID or number. Defaults to the account's configured sender.
- `text` (string, required): Message body (1-4096 characters)
- `to` (string, required): Recipient phone number in E.164 format

### `betatel_sms_sandbox` (~112 tokens)

Send SMS (sandbox)

Sandbox variant of betatel_send_sms — same request shape, but the Betatel API returns a mocked response without dialing the carrier or billing the account. Use this for end-to-end integration tests or to confirm credentials are wired correctly before sending a real SMS.

Input parameters:

- `from` (string): Optional sender ID or number. Defaults to the account's configured sender.
- `text` (string, required): Message body (1-4096 characters)
- `to` (string, required): Recipient phone number in E.164 format

### `betatel_flash_call` (~168 tokens)

Trigger Flash Call via Betatel

Trigger a Betatel flash call: a short ring-and-hangup voice call used to verify a phone number without delivering audio. Use this for silent phone-number verification or OTP-by-missed-call flows. Accepts the callee in E.164 format and optional caller, max_ring_time, and callback_url. Returns a uuid that identifies the call for later status lookup.

Input parameters:

- `callback_url` (string): Optional webhook URL the Betatel API will POST call-status updates to.
- `callee` (string, required): Destination phone number in E.164 format. The number to flash-call.
- `caller` (string): Optional caller ID in E.164 format. The number the recipient sees.
- `max_ring_time` (integer): Maximum ring duration in seconds before auto-hangup.

### `betatel_flash_call_sandbox` (~137 tokens)

Trigger Flash Call (sandbox)

Sandbox variant of betatel_flash_call — same request, but the Betatel API mocks the SIP gateway call and does not bill the account. Use for integration tests or to confirm setup without ringing a real number.

Input parameters:

- `callback_url` (string): Optional webhook URL the Betatel API will POST call-status updates to.
- `callee` (string, required): Destination phone number in E.164 format. The number to flash-call.
- `caller` (string): Optional caller ID in E.164 format. The number the recipient sees.
- `max_ring_time` (integer): Maximum ring duration in seconds before auto-hangup.

### `betatel_send_telegram_otp` (~220 tokens)

Send Telegram OTP via Betatel

Deliver a one-time password (OTP) to a phone number via the Telegram Gateway, brokered by the Betatel API. Use this when the user wants to send an OTP / verification code over Telegram (the recipient must have Telegram installed; if not, the request is rejected with no charge). Accepts the recipient phone number in E.164 format and a 4-8 digit OTP code that you generate. Returns a uuid and the Telegram request_id for follow-up status checks.

Input parameters:

- `callback_url` (string): Optional per-request webhook URL override for delivery-status callbacks.
- `code` (string, required): OTP code to deliver, 4-8 digits. Generate this in your application before calling the tool.
- `sender_username` (string): Verified Telegram channel username to send from (without the leading @).
- `to` (string, required): Recipient phone number in E.164 format.
- `ttl` (integer): Time-to-live in seconds (30-3600). Telegram refunds the request if the OTP is not delivered within ttl.

### `betatel_telegram_sandbox` (~148 tokens)

Send Telegram OTP (sandbox)

Sandbox variant of betatel_send_telegram_otp — mocks the Telegram Gateway call without billing the account. Use for integration tests.

Input parameters:

- `callback_url` (string): Optional per-request webhook URL override for delivery-status callbacks.
- `code` (string, required): OTP code to deliver, 4-8 digits. Generate this in your application before calling the tool.
- `sender_username` (string): Verified Telegram channel username to send from (without the leading @).
- `to` (string, required): Recipient phone number in E.164 format.
- `ttl` (integer): Time-to-live in seconds (30-3600). Telegram refunds the request if the OTP is not delivered within ttl.

### `betatel_telegram_check_send_ability` (~78 tokens)

Preflight: can we deliver Telegram OTP to this number?

Preflight check: can Telegram Gateway deliver to this phone? Use this BEFORE betatel_send_telegram_otp to avoid wasting an OTP attempt on a number that has no Telegram. Returns a reachability verdict and a reason if unreachable.

Input parameters:

- `to` (string, required): Phone number to check, in E.164 format.

### `betatel_telegram_check_verification_status` (~117 tokens)

Verify a code the user entered against the Telegram OTP

After the user types the OTP they received, call this with the original request_id (from betatel_send_telegram_otp) plus the code they entered to verify it. Without `code`, returns the current delivery / verification status without consuming an attempt.

Input parameters:

- `code` (string): Optional code entered by the user. If provided, Telegram verifies it against the OTP it delivered and reports match / no-match.
- `request_id` (string, required): Telegram Gateway request_id returned by betatel_send_telegram_otp.

### `betatel_telegram_revoke_verification` (~69 tokens)

Revoke a pending Telegram OTP

Cancel a previously-sent Telegram OTP. Use this when the user abandons the flow or you need to invalidate the code (e.g. before issuing a new one).

Input parameters:

- `request_id` (string, required): Telegram Gateway request_id to revoke (cancels the pending OTP).

### `betatel_send_whatsapp_otp` (~139 tokens)

Send WhatsApp OTP via Betatel

Send a WhatsApp message (OTP / verification code style) to a phone number via the Betatel API (backed by 360dialog WhatsApp Business). Use this when the user wants to deliver a verification code, transactional alert, or short message over WhatsApp. Accepts the recipient phone number in E.164 format and the message text (up to 4096 characters). Returns a uuid for the delivery record.

Input parameters:

- `text` (string, required): Message body (1-4096 characters). For OTP delivery, include the code in the text.
- `to` (string, required): Recipient phone number in E.164 format.

### `betatel_whatsapp_sandbox` (~84 tokens)

Send WhatsApp OTP (sandbox)

Sandbox variant of betatel_send_whatsapp_otp — mocks the 360dialog WABA call and does not bill the account. Use for integration tests.

Input parameters:

- `text` (string, required): Message body (1-4096 characters). For OTP delivery, include the code in the text.
- `to` (string, required): Recipient phone number in E.164 format.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 60
- 2026-08-01: 0
- 2026-07-31: 14
- 2026-07-30: 39
- 2026-07-28: 39
- 2026-07-27: 39

## Links

- npm package: https://www.npmjs.com/package/betatel-mcp-server
- Socket report: https://socket.dev/npm/package/betatel-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/companybetatel-mcp-server/betatel-mcp-server
