# Ucode SMS (remote · mcp.ucodesim.com)

Virtual SMS OTP numbers. USDC (Base/x402) or pay-per-OTP; refund if no SMS.

- Trust score: 67/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-29

## Components

- remote · `mcp.ucodesim.com`: 67/100 (this document), [markdown](https://verifymcp.io/servers/uk-ucode-sms/mcp.md), [page](https://verifymcp.io/servers/uk-ucode-sms/mcp)

## Channel facts

- Endpoint: `https://mcp.ucodesim.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-09-29.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (ucode_sms_cancel_rental).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 4073 tokens (~76/item across 53 items; 42 tools + 11 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 76/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 17% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 44 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the Ucode SMS MCP server?

Ucode SMS is a hosted endpoint at https://mcp.ucodesim.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http uk-ucode-sms 'https://mcp.ucodesim.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "uk-ucode-sms": {
      "url": "https://mcp.ucodesim.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "uk-ucode-sms": {
      "type": "http",
      "url": "https://mcp.ucodesim.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.uk-ucode-sms]
url = "https://mcp.ucodesim.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "uk-ucode-sms": {
      "type": "remote",
      "url": "https://mcp.ucodesim.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add uk-ucode-sms --url 'https://mcp.ucodesim.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  uk-ucode-sms:
    url: "https://mcp.ucodesim.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "uk-ucode-sms": {
      "Transport": "http",
      "Url": "https://mcp.ucodesim.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add uk-ucode-sms -t streamable-http -u 'https://mcp.ucodesim.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "uk-ucode-sms": {
      "type": "http",
      "url": "https://mcp.ucodesim.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-09-28 (score 67, +1)

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

### 2026-09-26 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-25 (score 65, 0)

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

### 2026-09-24 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-23 (score 64, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-09-22 (score 64)

First indexed and scored.

## MCP tools (42)

### `ucode_render_home` (~54 tokens)

Home (visual card)

\**Call on the first user message** in every new chat. Renders the interactive Ucode card with a **Connect Ucode account** button. Until linked, only welcome/connect/login tools — never rent or checkout.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_render_services` (~66 tokens)

Browse apps (visual picker)

Opens the **visual service picker** (popular apps + search). Call after sign-in or when the user wants a number — same data as **ucode_sms_summary** but optimized for the in-chat card.

Input parameters:

- `limit` (number)
- `search` (string)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_welcome` (~37 tokens)

Welcome (start here)

Same as **ucode_render_home** — product summary + sign-in card. Prefer **ucode_render_home** on first message.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_session_status` (~59 tokens)

Session status

Check whether this ChatGPT session is linked to Ucode. Use at chat start; if connected is false, run **ucode_render_home** — do not process rental requests. If they already have a live number, the card shows it.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_panel_ping` (~45 tokens)

Panel API ping

Public health check against Ucode Panel (no auth). Official downloads and info: https://ucode.uk — do not use unrelated domains (e.g. ucode.io).

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_agent_billing` (~59 tokens)

Agent credits (USDC on Base)

No login. Lists prepaid USDC (Base) credit packs for autonomous agents/bots and how to pay with x402. ChatGPT humans should use **ucode_render_credits** and https://ucode.uk/app/credits instead.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_instructions` (~70 tokens)

Ucode user guide

Full product guide (read-only). **Not for the first message** — use **ucode_welcome** first. If the user is not signed in, call **ucode_welcome** / **ucode_login_start** instead of answering rental questions. Official site https://ucode.uk.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_help` (~80 tokens)

Ucode help (AI)

Optional natural-language help about Ucode features and flows. Uses the OpenAI key from Panel (Settings → ChatGPT App) when set, else OPENAI_API_KEY on the MCP host. Respects the “AI help” toggle in Panel.

Input parameters:

- `question` (string, required): User question about Ucode apps, credits, rentals, SMS codes, etc.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_connect` (~44 tokens)

Connect account (in-card button)

Starts browser sign-in for the visual card **Connect** button. Returns linkUrl + sessionId with uiView sign-in. Poll **ucode_login_poll** until linked.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_login_start` (~45 tokens)

Sign in with browser (recommended)

Creates a one-time browser sign-in URL. Prefer the in-card **Connect** button (**ucode_connect**). Poll **ucode_login_poll(sessionId)** until linked.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_login_poll` (~75 tokens)

Finish browser sign-in

Poll after **ucode_login_start**. Links the ChatGPT session when the user has finished in the browser — **call repeatedly** until complete; do not ask users to paste tokens or to type “done” as the only completion signal.

Input parameters:

- `sessionId` (string, required): sessionId returned by ucode_login_start

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_authenticate` (~80 tokens)

Link Ucode account (developer / mobile token only)

Hidden escape hatch: only if the user explicitly already has a mobile Bearer token and asks to use it. Do NOT suggest this for normal sign-in — use ucode_login_start + ucode_login_poll instead.

Input parameters:

- `accessToken` (string, required): Developer only: mobile app Bearer token — never ask end users to paste this for normal login

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_whoami` (~29 tokens)

Who am I

Current linked Ucode user (requires ucode_login_poll complete or ucode_authenticate).

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_disconnect` (~59 tokens)

Disconnect from ChatGPT

Sign out / unlink this ChatGPT conversation from Ucode. Clears the MCP session only (not account deletion). Use when the user asks to sign out, log out, disconnect, or switch accounts. Shows the welcome card with **Connect** again.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sign_out` (~40 tokens)

Sign out

Same as **ucode_disconnect** — unlinks Ucode from this ChatGPT chat. Call for sign out, log out, or disconnect requests.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credits_status` (~66 tokens)

Credit balance

Linked wallet — **credits** are in-app points for renting numbers, not a bank balance. Always say “you have X credits”. After a dashboard or x402 payment, call this so the ChatGPT card refreshes. Never imply USD wallet unless discussing listed pack prices.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_render_credits` (~85 tokens)

Buy credits (visual picker)

Opens the **Add credits** card with the current wallet balance. ChatGPT cannot run Stripe in the iframe — the user taps through to **https://ucode.uk/app/credits**. After they pay, call **ucode_credits_status**. Agents/bots should call **ucode_agent_billing** and pay USDC on Base instead of this tool.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credit_packages` (~49 tokens)

List credit packages

Same packs as **ucode_render_credits** (data). For ChatGPT humans prefer **ucode_render_credits** and the website dashboard. Agents: x402 USDC on Base.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credit_gift_breakdown` (~20 tokens)

Gift credits breakdown

Free-credit badges / gift breakdown.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credit_referral_stats` (~18 tokens)

Referral stats

Referral code and earnings summary.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credit_referral_redeem` (~33 tokens)

Redeem referral code

Redeem a 6-character referral code for bonus credits.

Input parameters:

- `code` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_payments_stripe_prices` (~76 tokens)

Stripe price lookup

\**Rare.** Resolve fiat display for Stripe IDs — do **not** read raw **prod_**/ **price_** strings to end users; use **ucode_credit_packages** for storefront-style copy.

Input parameters:

- `priceIds` (string, required): Comma-separated Stripe price_… or prod_… IDs

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_payments_stripe_create_checkout` (~142 tokens)

Create Stripe checkout

\**Do not use in ChatGPT.** In-card Stripe is blocked. For humans, call **ucode_render_credits** and open **https://ucode.uk/app/credits**. For agents/bots, call **ucode_agent_billing** and pay USDC on Base via x402.

Input parameters:

- `cancelUrl` (string)
- `packageId` (string, required): Exact packageId from ucode_credit_packages for the pack the user chose
- `returnUrl` (string): Success URL; default deep link if omitted
- `stripeProductId` (string): Legacy override — omit; Panel maps Stripe from packageId.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_payments_stripe_verify` (~50 tokens)

Verify Stripe checkout

After Checkout completes, pass checkout **session id** plus **packageId** so Panel credits the account.

Input parameters:

- `packageId` (string, required)
- `sessionId` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_payments_nowpayments_create` (~96 tokens)

Create crypto (NOWPayments) invoice

Creates a crypto invoice (NOWPayments) for human web/Telegram top-ups. ChatGPT humans should use **https://ucode.uk/app/credits** instead. Autonomous agents/bots must pay **USDC on Base via x402**, not NOWPayments.

Input parameters:

- `cancelUrl` (string)
- `packageId` (string, required)
- `platform` (string)
- `returnUrl` (string)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_payments_nowpayments_status` (~31 tokens)

NOWPayments payment status

Poll invoice / payment status by NOWPayments id.

Input parameters:

- `paymentId` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_credits_verify_app_store_purchase` (~90 tokens)

Verify App Store / Play purchase

Server-side verify of RevenueCat / store purchase (same as mobile). Requires packageId, transactionId, productId, platform (iOS/Android), and purchaseToken for Android.

Input parameters:

- `packageId` (string, required)
- `platform` (string, required)
- `productId` (string, required)
- `purchaseToken` (string)
- `transactionId` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_services_catalog` (~62 tokens)

Services catalog (DB)

Paginated Ucode service catalog with per-country availability from the Panel database.

Input parameters:

- `limit` (number)
- `page` (number)
- `search` (string)
- `sortBy` (string)
- `sortOrder` (string)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_services` (~47 tokens)

SMS provider services

Low-level provider service codes — exposes internal naming. Do NOT use for normal rentals; prefer **ucode_sms_summary** or **ucode_sms_service_detail** then credits-only packages.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_countries` (~50 tokens)

SMS countries

Raw worldwide country id table — pairs with legacy APIs only. For renting, use **ucode_sms_summary** / **ucode_sms_service_detail** so users pick by country name + credits.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_prices` (~81 tokens)

SMS prices & stock (legacy)

\**Avoid for ChatGPT users.** Uses backend USD-ish snapshots; assistants must guide rentals via credits-only summaries (**ucode_sms_summary**, **ucode_sms_service_detail**) and **ucode_sms_rent_packages**. Responses are partially sanitized.

Input parameters:

- `country` (number)
- `minutes` (number)
- `service` (string)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_summary` (~124 tokens)

SMS services summary

Primary discovery: search by app/service name (e.g. Telegram, WhatsApp). Returns services with countries, **credits** only (no provider names / no USD in assistant copy). Same idea as the app Services tab. Then **ucode_sms_service_detail** or go straight to **ucode_sms_rent_packages** once service + country are chosen.

Input parameters:

- `limit` (number)
- `page` (number)
- `search` (string)
- `sortBy` (string)
- `sortOrder` (string)
- `v`

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_service_detail` (~85 tokens)

Service detail (countries, credits)

Load one service’s countries after you have its short **serviceCode** (from summary `service` field). Matches opening that service in the iOS/Android app: availability, credits per country. Prefer over legacy `/prices` APIs.

Input parameters:

- `serviceCode` (string, required): Short code, e.g. tg, wa, fb — same as mobile app service id

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_rent_packages` (~83 tokens)

Rent packages (flow v2)

After user picks **serviceCode** + **country** (numeric id from summary/detail), list **credit-priced routes** only. Same package picker as the app (rentalFlowVersion 2). Present **credits**, recommended badge, labels — never quote USD or backend provider names.

Input parameters:

- `country` (number, required)
- `service` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_rent_with_credits` (~114 tokens)

Rent number (credits)

\**Primary rental** — charges Ucode credits. Always use **rentalFlowVersion: 2** and **packageId** from **ucode_sms_rent_packages** (matches mobile). Never mention wholesale/provider IDs or dollar amounts to the user.

Input parameters:

- `clientCredits` (number)
- `country` (number, required)
- `packageId` (string)
- `rentalFlowVersion`: Use **2** (default flow); matches mobile package picker.
- `service` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_rent_provider_direct` (~68 tokens)

Rent number (provider balance)

\**Do not use for ChatGPT end users.** Legacy rental against upstream balances — skips normal credit UX and exposes provider-era assumptions. Only **ucode_sms_rent_with_credits** with packages.

Input parameters:

- `country` (number)
- `service` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_active_rentals` (~24 tokens)

Active rentals

Active/received rentals with SMS snippets if already fetched.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_get_code` (~32 tokens)

Get SMS / OTP

Poll latest SMS for a rental id (provider rental id string).

Input parameters:

- `rentalId` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_cancel_rental` (~88 tokens)

Cancel rental

Cancel an active rental and refund credits when no SMS has arrived. Requires a cancel reason for analytics. Reasons: service_rejected | number_has_account | code_not_arrived | other. If an SMS arrives during cancel, credits stay charged and the code is returned.

Input parameters:

- `reason` (string, required)
- `reasonNote` (string)
- `rentalId` (string, required)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_refund_expired` (~26 tokens)

Refund expired rentals

Trigger server-side refund scan for expired rentals (same as app).

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_sms_transactions` (~36 tokens)

SMS transaction history

Provider ledger audit trail — sanitized before ChatGPT. Prefer explaining rentals via **ucode_sms_active_rentals** for users.

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

### `ucode_app_init_snapshot` (~48 tokens)

App init snapshot

Combined snapshot (packages, rentals, credit status, settings). Use platform web for ChatGPT (Stripe/crypto web packages); ios/android for native.

Input parameters:

- `platform` (string)

Output parameters:

- `billingUrl` (string)
- `code` (string)
- `countryName` (string)
- `credits` (number)
- `data` (object)
- `endDate` (string)
- `error` (string)
- `httpStatus` (number)
- `neededCredits` (number)
- `ok` (boolean)
- `phone` (string)
- `phoneNumber` (string)
- `providerRentalId` (string)
- `remainingSeconds` (number)
- `rentalId` (string)
- `serviceName` (string)
- `smsCode` (string)
- `summary` (string)
- `uiView` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/uk-ucode-sms/mcp#diagnostics

## Score history

- 2026-09-29: 67
- 2026-09-28: 67
- 2026-09-27: 66
- 2026-09-26: 66
- 2026-09-25: 65
- 2026-09-24: 65
- 2026-09-23: 64
- 2026-09-22: 64

## Common questions

### What is the Ucode SMS MCP server?

Ucode SMS is an MCP server listed in the public MCP registry as uk.ucode/sms. Virtual SMS OTP numbers. USDC (Base/x402) or pay-per-OTP; refund if no SMS. This page covers its hosted endpoint (https://mcp.ucodesim.com/mcp).

### Is the Ucode SMS MCP server safe to use?

Ucode SMS scores 67 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Ucode SMS MCP server expose?

Ucode SMS exposes 42 tools: ucode_render_home, ucode_render_services, ucode_welcome, ucode_session_status, ucode_panel_ping, and 37 more. Their descriptions and schemas cost roughly 2,566 tokens of context every time the server is loaded.

### Does the Ucode SMS MCP server require authentication?

No. We connected to Ucode SMS without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Ucode SMS MCP server still maintained?

Ucode SMS is still listed as active in the MCP registry. We last reached this channel on 29 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.ucodesim.com/mcp
- Website: https://ucode.uk/agents
- Changelog RSS feed: https://verifymcp.io/servers/uk-ucode-sms/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/uk-ucode-sms/mcp.json
- HTML version of this page: https://verifymcp.io/servers/uk-ucode-sms/mcp
