Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

PacketExchange

REMOTE · PACKETEXCHANGE.IO

SMS, voice calls, OTP verification, phone numbers and wholesale voice routes by Minutes Network.

+3 this week 67 Trust /100

Last scanned (18 hours ago)

Scores higher than 56% of remote servers

Reachable. Last reached 22 Oct 2026.

Category Communication

Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability63
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7552 tokens (~228/item across 33 items; 33 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 33 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 22 Oct 26 +1

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

  • 20 Oct 26 +1

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

  • 17 Oct 26 +1
    • Tool “wmmn_list_routes” rewrote its description, which is the text the model reads security
    • Tool “wmmn_route_details” rewrote its description, which is the text the model reads security
    • “wmmn_list_routes” added an optional parameter “origin_policy” cosmetic
    • “wmmn_list_routes” reworded the description of “verification” cosmetic
  • 16 Oct 26 0
    • Tool “wmmn_list_routes” rewrote its description, which is the text the model reads security
    • “wmmn_list_routes” added an optional parameter “verification” cosmetic
  • 15 Oct 26 +1

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

  • 13 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 12 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 22 Oct 2026 · Probed https://packetexchange.io/mcp/http

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=packetexchange.io CN=YE2,O=Let's Encrypt,C=US 16 Oct 2026 14 Jan 2027 ECDSA 256 ECDSA-SHA384 53a7e07b57a0c3dac00b6b352e75a4c4b85
SANs: packetexchange.io, share.packetexchange.io, www.packetexchange.io
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of packetexchange.io. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 57355 8 Verified
packetexchange.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://packetexchange.io/mcp/http Verified 200
http (plaintext) http://packetexchange.io/mcp/http HTTPS enforced 301 https://packetexchange.io/mcp/http
MCP tools · 33 exposed · ~7,552 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
switch_analytics_breakdown ~147

Top-100 metric breakdown grouped by customer, supplier, or destination (the first 3 digits of the dialled number). Find the most/least profitable customers, worst-quality suppliers, or costliest destinations. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
bystring–Grouping; defaults to customer
fromstring–Range start, ISO date; default (to − 30d)
tostring–Range end, ISO date; default now
NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

switch_analytics_overview ~147

Unified P&L + quality KPIs (revenue, cost, margin, marginPct, calls, answered, minutes, ASR, ACD, SMS count, avg PDD) across all operator CDR traffic for a date range. The go-to health snapshot. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
fromstring–Range start, ISO date; default (to − 30d)
tostring–Range end, ISO date; default now
NameTypeReqDescription
answered––integer
asr––number: Answer rate in percent; null when there were no calls
calls––integer
cost––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
freshness––object
margin––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
marginPct––number: null when there was no revenue
minutes––number
rating––object
revenue––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
window––object

No examples provided.

switch_ar_aging ~98

AR aging summary: total outstanding, open count, and current/1-30/31-60/61-90/90+ buckets across open/partial/overdue invoices. Key collections-health read. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

Input schema present but exposes no named parameters.

NameTypeReqDescription
buckets––object
creditNotesOpen––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
grossOutstanding––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
openCount––integer
totalOutstanding––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)

No examples provided.

switch_assign_customer_routing ~273

MUTATES STATE. Point a customer at its routing: dialplan, route group, failover route group, LCR strategy override (cheapest|best_quality|balanced), or a direct supplier (one marketplace route OR one vendor trunk, not both). Only the fields you pass change: omitted fields keep their current value, and null clears a field. Writes the customer's first trunk (a customer with no trunk is refused); multi-trunk customers are configured per trunk in the dashboard. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
dialplanIdstring|null–Dialplan to assign (must be owned)
directRouteIdstring|null–Send all traffic straight to this purchased marketplace route
directVendorTrunkIdstring|null–Send all traffic straight to this vendor trunk
failoverRoutePlanIdstring|null–Failover route group (must be owned)
idstringyesCustomer (sub-account) UUID
routePlanIdstring|null–Route plan/group to assign (must be owned)
strategyOverride––LCR strategy override
NameTypeReqDescription
customerTrunkId––string
dialplanId––string
directRouteId––string
directVendorTrunkId––string
failoverRoutePlanId––string
routePlanId––string
strategyOverride––string
subAccountId––string

No examples provided.

switch_bulk_upsert_sell_rates ~129

MUTATES STATE. Bulk upsert the operator's retail SELL deck (A-Z), de-duped last-wins, up to 50000 rows. Fires the sell_rate.changed webhook. The efficient way to load or refresh retail pricing. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
rowsarrayyesDeck rows { prefix, rate }; prefixes cleaned to digits (max 50000)
NameTypeReqDescription
applied––integer

No examples provided.

switch_bulk_upsert_supplier_rates ~156

MUTATES STATE. Bulk upsert a supplier trunk's A-Z COST deck (paste/CSV rows), de-duped last-wins, up to 50000 rows. Price increases may be queued until the supplier's rate-notice period ends instead of applying at once. The efficient way to load or refresh vendor pricing. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
idstringyesVendor trunk UUID
rowsarrayyesDeck rows { prefix, rate }; prefixes cleaned to digits (max 50000)
NameTypeReqDescription
applied––integer

No examples provided.

switch_create_customer ~403

MUTATES STATE. Create a switch-native customer and mint its first API key (returned ONCE, with sipPassword). Set markupPct, credit limit, margin floor, spend and concurrency caps, CPS, blocked prefixes, tax details and portalEmail. externalRef is an idempotency key: repeating a create with the same externalRef returns the existing customer WITHOUT a new API key or sipPassword. The provisioning entry point for onboarding a buyer. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
billingIncrement––Billing increment in seconds as "initial/subsequent", e.g. 60/60
blockedPrefixesarray–Destination prefixes this customer may not call (digits only, max 200)
creditLimit––Postpaid credit limit in USD
currency––ISO 4217 currency code (default USD)
dailySpendCap––Daily spend cap in USD — enforced: further traffic is blocked once the day's spend reaches it
externalRef––Your reference id; also an idempotency key (a repeat create returns the existing customer)
labelstringyesCustomer name
marginFloorAction––Action when margin below floor
markupPct––Retail markup percent over your cost
maxConcurrentCalls––Concurrent call limit
maxCps––Max calls per second, enforced at call admission
minMarginPct––Minimum margin percent
portalEmail––Self-service portal login email
sourcestring–Defaults to marketplace
statusstring–Create dormant (draft) or live (active, the default)
taxCountry––Tax country, ISO 3166-1 alpha-2
taxId––Customer tax / VAT id
NameTypeReqDescription
apiKey––string: The customer's first API key. Returned ONCE, here.
apiKeyPrefix––string
balance––Prepaid wallet balance (negative = owed), 6-decimal USD string
billingIncrement––string: e.g. "60/60" or "6/6"
blockedPrefixes––array
createdAt––string: ISO-8601 timestamp (UTC)
creditLimit––string: USD decimal string as stored (2 decimal places), e.g. "5000.00"
currency––string
dailySpendCap––string: USD decimal string as stored (2 decimal places), e.g. "5000.00"
defaultTrunkId––string: The "Default" trunk created with every customer
externalRef––string
id––string
label––string
marginFloorAction––string: One of: block, alert.
markupPct––string: Default markup over cost, percent as a decimal string
maxConcurrentCalls––integer
maxCps––integer
minMarginPct––string
portalEmail––string
sipPassword––string: The inbound SIP password in plain text. Returned ONCE, here.
sipUsername––string
source––string: One of: marketplace, external.
status––string: One of: draft, active, suspended, closed.
taxCountry––string
taxId––string
updatedAt––string: ISO-8601 timestamp (UTC)

No examples provided.

switch_create_invoice ~331

Two steps, like a human review. Step 1 (read-only, writes nothing): call WITHOUT review_token to get a preview of the AR invoice for a customer over a period from settled CDR usage (itemized voice + SMS lines, totals, anything unrated) plus a reviewToken. Step 2 (MUTATES STATE, irreversible): call again with the SAME arguments and review_token to issue it; this allocates the invoice number, claims the usage and emits invoice.created. If the usage changed since the preview the issue is refused (409) with a fresh preview. Issuing does not send the invoice to the customer. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
applyCreditsboolean–Consume the customer's open credit notes on this invoice
customerIdstringyesCustomer to bill (must be owned)
includeBroughtForwardboolean–Also bill priced usage from BEFORE the period that is still unbilled
notesstring–Optional invoice notes
periodEndstringyesBilling period end, ISO date (must be > periodStart)
periodStartstringyesBilling period start, ISO date e.g. "2026-07-01" (must be < periodEnd)
review_tokenstring–Only on step 2: the reviewToken from the step-1 preview. Providing it ISSUES the invoice
NameTypeReqDescription
amountPaid––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
broughtForward––object
charges––number: US dollars as a JSON number rounded to 6 decimals (a computed figure, not a ledger string)
credits––object
currency––string
customer––object
customerId––string
customerLabel––string: On list rows
dueDate––string: ISO-8601 timestamp (UTC)
id––string
invoiceNumber––string: Sequential per operator, gap-free
issueDate––string: ISO-8601 timestamp (UTC)
lines––array
notes––string
overdue––boolean
paymentTermsDays––integer
period––object
periodEnd––string: ISO-8601 timestamp (UTC)
periodStart––string: ISO-8601 timestamp (UTC)
preview––object
provenance––object
replacesInvoiceId––string
reviewDigest––string
reviewToken––string: Pass to POST /switch/invoices to issue exactly what was reviewed
sendCount––integer
sentAt––string: ISO-8601 timestamp (UTC)
status––string: One of: draft, open, partial, paid, overdue, void.
subtotal––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
tax––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
total––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
unrated––object: Usage that could not be priced. Blocks issue unless excluded with a reason.
usage––object: Billable, rated-at-zero, by-trunk and by-channel usage

No examples provided.

switch_create_payable ~160

MUTATES STATE. Generate an AP payable for a supplier trunk over a period from CDR seller-credit cost. The core settlement action for what the operator owes vendors. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
notesstring–Optional payable notes
periodEndstringyesPeriod end, ISO date
periodStartstringyesPeriod start, ISO date e.g. "2026-07-01" (must be < periodEnd)
vendorTrunkIdstringyesSupplier vendor trunk UUID to bill cost for
NameTypeReqDescription
amountPaid––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
createdAt––string: ISO-8601 timestamp (UTC)
currency––string
dueDate––string: ISO-8601 timestamp (UTC)
id––string
issueDate––string: ISO-8601 timestamp (UTC)
notes––string
overdue––boolean
payableNumber––string
periodEnd––string: ISO-8601 timestamp (UTC)
periodStart––string: ISO-8601 timestamp (UTC)
status––string: One of: draft, open, partial, paid, overdue, void.
subtotal––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
total––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
trunkLabel––string: On list rows
updatedAt––string: ISO-8601 timestamp (UTC)
vendorTrunkId––string

No examples provided.

switch_create_supplier ~488

MUTATES STATE. Create an external supplier vendor trunk (SIP host/port/transport, auth, codecs, default rate, capacity, CPS, settlement mode) and/or its SMS delivery (HTTP URL or SMPP bind). Needs a label plus at least one way to deliver traffic: sipHost, smsDeliveryUrl, or smppHost with smppSystemId. A new trunk may be held as draft until it passes readiness checks. The provisioning entry point for a termination vendor. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
balance––Prepaid credit remaining, in USD
billingIncrement––Billing increment in seconds as "initial/subsequent", e.g. 60/60
capacity––Channel capacity (concurrent calls)
currency––ISO 4217 currency code (default USD)
defaultRatePerUnit––Default cost rate per unit in USD (per minute for voice, per message for SMS)
labelstringyesSupplier name
maxCps––Max calls per second
portalEmail––Supplier portal login email
settlementModestring–AP payable or prepaid wallet draw
sipAuthPassword––SIP auth password
sipAuthUsername––SIP auth username
sipHost––SIP host IP/hostname (voice termination)
sipPort––SIP port
smppBindType––SMPP bind type
smppHost––SMPP SMSC host
smppPasswordstring|null–SMPP password (stored sealed, never returned)
smppPort––SMPP port
smppSystemId––SMPP system_id (max 16)
smppTps––SMPP throughput cap, messages per second
smsDeliveryMethod––SMS termination: http (smsDeliveryUrl) or smpp (bind to the SMSC below)
smsDeliveryUrl––HTTP SMS delivery URL
statusstring–Trunk status
supportedCodecs––Codec list
techPrefix––Tech prefix (digits/*/# only)
transport––Transport; defaults udp
NameTypeReqDescription
balance––Prepaid credit remaining with this supplier (prepaid settlement)
billingIncrement––string
capacity––integer: Max concurrent channels
createdAt––string: ISO-8601 timestamp (UTC)
currency––string
defaultRatePerUnit––Cost per minute used when no deck row matches
id––string
label––string
maxCps––integer
mediaMode––string: One of: proxy, direct.
reachCheckedAt––string: ISO-8601 timestamp (UTC)
reachable––boolean
settlementMode––string: One of: ap, prepaid.
sipAuthPasswordSet––boolean: Whether a SIP password is stored. The value is only readable via GET /switch/suppliers/{id}/credentials
sipAuthUsername––string
sipHost––string: Null on a marketplace trunk: the seller address is never disclosed
sipPort––integer
smppPasswordSet––boolean
smsDeliveryMethod––string: One of: http, smpp.
source––string: "external" for a carrier you entered; "marketplace" for a trunk promoted from a marketplace purchase
status––string: One of: active, disabled, draft, testing, draining, fault.
supplierId––string: The owning provider; null = ungrouped
techPrefix––string
transport––string: One of: udp, tcp, tls.
updatedAt––string: ISO-8601 timestamp (UTC)

No examples provided.

switch_fraud_events ~92

List the 100 most recent fraud events (newest first) with score, action (flag|block), destination, reasons, and customer label. Monitor and triage abuse. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

Input schema present but exposes no named parameters.

NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

switch_list_customers ~93

List all sell-side customers (sub-accounts) with balance, credit limit, markup, margin floor, spend caps, concurrency, and status. Core inventory read for who is connected. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

Input schema present but exposes no named parameters.

NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

switch_list_invoices ~128

List AR invoices with customer/status filters, pagination, and computed overdue flag. Survey receivables. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
customerIdstring–Filter by customer UUID
limitinteger–Page size (1..500, default 50)
offsetinteger–Page offset (default 0)
statusstring–Filter by status
NameTypeReqDescription
limit––integer
offset––integer
rows––array
total––integer

No examples provided.

switch_list_suppliers ~89

List all buy-side supplier vendor trunks with SIP egress config, default rate, capacity, CPS, settlement mode, and status. Core inventory read for termination options. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

Input schema present but exposes no named parameters.

NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

switch_preview_routing ~238

Read-only routing preview for a dialed number: resolves the dialplan (matched rule, block verdict, translated number, out-CLI) and returns the ordered supplier failover chain with per-attempt price and prefix match. No side effects: the single best tool to sanity-check routing before real traffic. Optionally scope to a customer via sub_account_id (their assigned dialplan) and customer_trunk_id (that trunk's restrictions; default is the customer's single active trunk). Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
clistring–Calling line identity
customer_trunk_idstring–Customer trunk UUID, for an exact restriction preview when the customer has several trunks
sub_account_idstring–Customer (sub-account) UUID to preview under, using its assigned dialplan
tostringyesDestination/dialed number (required)
typestring–Traffic type; defaults to voice
NameTypeReqDescription
blockCause––integer
blocked––boolean
candidates––array
dialplanId––string
dialplanName––string
failoverMode––string: One of: sequential.
failoverSipCodes––array
kind––string: fixed route or route group
matched––boolean
maxAttempts––integer
outCli––string
refusal––object: Why the chain is empty on purpose
restriction––object: A customer or trunk restriction that would refuse this call
routeGroupId––string
routeGroupName––string
ruleId––string
ruleLabel––string
selectionMode––string
setupBudgetSeconds––number
skipped––array
translatedNumber––string

No examples provided.

switch_run_netting ~162

MUTATES STATE. Run bilateral netting for a counterparty over a period: offsets AR (their invoices) against AP (their payables), returning net amount and direction (settled|receivable|payable). Key settlement automation. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
idstringyesCounterparty UUID
notesstring–Optional netting-run notes
periodEndstringyesPeriod end, ISO date
periodStartstringyesPeriod start, ISO date e.g. "2026-07-01"
NameTypeReqDescription
apTotal––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
arTotal––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
counterpartyId––string
counterpartyName––string
createdAt––string: ISO-8601 timestamp (UTC)
direction––string: One of: receivable, payable, settled.
id––string
netAmount––Absolute net amount; see direction
notes––string
periodEnd––string: ISO-8601 timestamp (UTC)
periodStart––string: ISO-8601 timestamp (UTC)
status––string

No examples provided.

switch_set_route_plan_entries ~155

MUTATES STATE. Replace ALL entries of a route group with an ordered supplier list (per-prefix, with failover priority, load-balance weight, and ASR/PDD gates). The primary tool to (re)configure LCR/failover routing. Enforces exactly-one-target (routeId XOR vendorTrunkId) and ownership. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
entriesarrayyesFull replacement entry list (max 200)
idstringyesRoute plan (route group) UUID
NameTypeReqDescription
createdAt––string: ISO-8601 timestamp (UTC)
description––string
enabled––boolean
entries––array
failoverSipCodes––array: SIP results that move the call to the next supplier
failoverTimeoutSeconds––integer: null = the platform budget
id––string
maxAttempts––integer: 1 to 6
name––string
operatorId––string
selectionMode––string: How the first supplier is picked; failover is always sequential One of: priority, least_cost, weighted.
updatedAt––string: ISO-8601 timestamp (UTC)

No examples provided.

switch_update_fraud_settings ~183

MUTATES STATE. Update per-operator fraud screening: enable/disable, block/alert score thresholds (1-100), and high-risk destination prefixes. highRiskPrefixes REPLACES the whole list; an empty list reverts to the platform defaults. Tune protection. Requires an active Switch subscription (402 SWITCH_SUBSCRIPTION_REQUIRED otherwise) and a full-access API key (scoped keys need switch:manage). Test keys are NOT sandboxed here: they read and change your live Switch data.

NameTypeReqDescription
fraudAlertScoreinteger–Flag threshold (1-100)
fraudBlockScoreinteger–Block threshold (1-100)
fraudEnabledboolean–Enable/disable per-operator fraud screening
highRiskPrefixesarray–Full replacement list of high-risk destination prefixes (cleaned to digits, max 500)
NameTypeReqDescription
fraudAlertScore––integer: Risk score at or above which a call is flagged
fraudBlockScore––integer: Risk score at or above which a call is refused
fraudEnabled––boolean
highRiskPrefixes––array

No examples provided.

wmmn_get_balance ~66

Read-only. Current account balance and test credit, in USD, plus their sum for reference. Only the balance pays for live calls and messages; test credit covers test API keys (simulated traffic) only. Requires the account:read scope (full-access keys have it).

Input schema present but exposes no named parameters.

NameTypeReqDescription
balance––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
testCredit––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
total––balance + testCredit

No examples provided.

wmmn_get_call ~101

Returns one call placed with wmmn_make_call (or POST /comms/calls): live status (queued, ringing, answered, then completed, no_answer, busy or failed), timestamps, duration, exact USD cost, the hangup reason in plain words, and the keypad digits collected by gather actions. Free. Requires the voice:send scope.

NameTypeReqDescription
call_idstringyesThe callId returned by wmmn_make_call
NameTypeReqDescription
actions––array: The call actions as you sent them
answeredAt––string: ISO-8601 timestamp (UTC)
attempts––array: Present when the call was tried on more than one route: every attempt in order. Only the attempt that connected is billed
billableSeconds––integer: Duration rounded up to the route billing increment
billingIncrement––string
callId––string
cost––What the call cost you, platform fee included. Null until it ends
createdAt––string: ISO-8601 timestamp (UTC)
durationSeconds––integer
endedAt––string: ISO-8601 timestamp (UTC)
error––string: Why the call could not be placed, when it failed before reaching the network
from––string
gathered––array: Keypad input from gather actions, filled in when the call ends
hangupCause––string: The switch cause code, e.g. NORMAL_CLEARING or USER_BUSY
hangupReason––string: Why the call ended, in plain words. Null while it is live
mode––string: One of: sync, async.
ringingAt––string: ISO-8601 timestamp (UTC)
routeId––string: Present when the call was placed over a failover chain: the route that carried it, or the last one tried
simulated––boolean: True for test-key calls: nothing was dialled
sipResponseCode––integer
status––string: queued, ringing and answered are live states; completed (answered, then ended), no_answer, busy and failed are final One of: queued, ringing, answered, completed, no_answer, busy, failed.
to––string

No examples provided.

wmmn_list_purchases ~79

Read-only. List the routes you have connected (your purchases, newest 50), with status, per-unit USD pricing and your SIP credentials (username + password) for each. Requires a FULL-ACCESS API key (one created with no scope restrictions): because the response contains SIP passwords, every scoped key is refused with 403.

Input schema present but exposes no named parameters.

NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

wmmn_list_routes ~1,012

Read-only, free, no key needed. Search and filter live voice/SMS termination routes on the PacketExchange marketplace. By default it returns what the website shows: one row per route and mobile network, routes we have PROVEN first (tested_desc), each with two platform-measured marks: route_status (proven = a real call or our test connected to that network recently; weak = it connects but few calls do; at_risk = the latest test failed; untested = no evidence yet, not a fault) and caller_id (full = the caller ID arrived intact on a real phone on that network; replaced; none; untested). Every listing also carries a verification tier for the whole route (owner, 16 Oct 2026), and every view lists the best tier first: cli = "International CLI" (our international caller-ID test showed the exact number we sent, in full), ncli = "NCLI" (the test reached the phone with a different number or none), connected = "Qualified" (a real answered call or passed test, no caller-ID result), not_verified = "Untested" (not tested by us yet, or the latest test failed; new listings start here; still buyable). Quoted names are what the marketplace shows; the values are stable keys. Use verification=<tier> to keep one tier, or tested=true / verified_cli=true to keep only proven rows. Prices are USD per minute (voice) or per message (SMS). ASR/ACD figures are the SELLER-DECLARED expected values, not platform-measured. Route quality tiers (route_type): direct | premium | standard | ncli (NCLI = no caller ID: lowest cost, more intermediate carriers, and the called party does not see the number). Set per_network=false for one row per listing (a multi-destination A-Z deck then shows only its cheapest "from" rate, so check wmmn_route_details). CALLER ID ORIGIN: some sellers price by where the call originates, judged by the caller ID sent (From and P-Asserted-Identity). origin_policy "dual" = two prices: origin_price applies when the call presents a VALID caller ID from origin_group (EEA = the 27 E…

NameTypeReqDescription
cli_typestring–Caller-ID handling: full_cli (your CLI passed through), local_cli (a local number presented), mixed_cli (CLI passed on some calls), ncli (no CLI)
countrystring–Filter by country name, substring match (e.g. "United Kingdom")
limitinteger–Max results, 1-100 (default 25)
max_pricestring–Max price per unit in USD (per minute for voice, per message for SMS), e.g. "0.0100"
min_asrstring–Minimum seller-declared expected ASR in percent, e.g. "40"
networkstring–Only this network, exact name as returned (e.g. "Vodafone"). Needs per_network
origin_policystring–Caller ID origin: dual = listings with a separate (usually lower) price for an EEA caller ID; origin_only = listings that take EEA caller IDs only; any = one price for every caller. Omitted = all
per_networkboolean–One row per route and mobile network, with the measured marks (default true). false = one row per listing, without marks
route_typestring–Route quality tier
searchstring–Search by country, dial code or number, mobile/fixed, tier (premium/direct/standard/ncli) or an operator name (e.g. "Safaricom")
sortstring–Sort order. Default tested_desc: proven rows first (full caller ID ahead), then cheapest. cli_desc: verified caller ID first. tested_desc and cli_desc need per_network (the default). ASR/ACD/PDD sort…
testedboolean–Only rows proven to connect to their network (a real call or our test). Needs per_network
typestring–Traffic type: voice or sms
verificationstring–Only listings in this verification tier (voice): cli = International CLI, ncli = NCLI, connected = Qualified, not_verified = Untested. Omitted = every tier, best first
verified_cliboolean–Only rows where the caller ID arrived intact on a real phone on that network. Needs per_network
NameTypeReqDescription
count––integer: number of routes returned
routesarray–Matching rows: by default one per route and network, best verification tier first, then proven first

No examples provided.

wmmn_list_transactions ~79

Read-only. Recent billing transactions for your account, newest first, amounts in USD (charges are negative, credits/top-ups positive). Types: topup, charge, credit, payout, platform_fee, test_credit. Requires the account:read scope.

NameTypeReqDescription
limitinteger–Max rows, 1-100 (default 20)
NameTypeReqDescription
itemsarrayyesOne entry per result.

No examples provided.

wmmn_make_call ~520

SPENDS MONEY. Places a REAL outbound phone call and CHARGES your balance for a connected call: billable minutes (per the route billing increment) at the route price, plus a platform fee of 2% of the carrier cost, capped at $0.001 per call or message (0.5%, same cap, when the traffic runs over your own SIP trunk; no fee when the carrier cost is 0). Unanswered calls cost nothing. The worst-case cost for max_duration is reserved from your balance up front and the unused part refunded on hangup. The call is placed ASYNCHRONOUSLY: this tool waits up to wait_seconds (default 20) for it to finish, then returns either the final result (status completed, no_answer, busy or failed, with duration, cost, plain-words hangup reason and any gathered digits) or, if the call is still running, its call_id and live status - check it later with wmmn_get_call. Optional actions make the answered call speak (say, in en/es/fr/de/pt/hi), play an https MP3, collect keypad digits (gather), pause or hang up, in order; the call ends when they finish; no charge for the speech. Omit route_id to Smart-Route across the public marketplace (no purchase needed); a route_id must be a route you have purchased. A test key (wmmn_test_sk_...) simulates against test credit with no real telephony and runs no actions. Requires the voice:send scope.

NameTypeReqDescription
actionsarray–What the answered call does, in order. E.g. [{"say":"Press 1 to confirm"},{"gather":{"digits":1,"timeout":5}}]
fromstringyesCaller ID, E.164
languagestring–Default language for say actions (default en)
max_durationinteger–Max call duration in SECONDS, 10-3600 (default 300). Your balance must cover the worst-case cost of this duration
route_idstring–A route you have purchased; omit for Smart Routing
strategystring–Smart Routing strategy when route_id is omitted (default balanced)
tostringyesDestination number, E.164 (e.g. "+447700900123")
wait_secondsinteger–How long to wait for the call to finish before returning its call_id (default 20, max 50)
NameTypeReqDescription
actions––array: The call actions as you sent them
answeredAt––string: ISO-8601 timestamp (UTC)
attempts––array: Present when the call was tried on more than one route: every attempt in order. Only the attempt that connected is billed
billableSeconds––integer: Duration rounded up to the route billing increment
billingIncrement––string
callId––string
cost––What the call cost you, platform fee included. Null until it ends
createdAt––string: ISO-8601 timestamp (UTC)
durationSeconds––integer
endedAt––string: ISO-8601 timestamp (UTC)
error––string: Why the call could not be placed, when it failed before reaching the network
from––string
gathered––array: Keypad input from gather actions, filled in when the call ends
hangupCause––string: The switch cause code, e.g. NORMAL_CLEARING or USER_BUSY
hangupReason––string: Why the call ended, in plain words. Null while it is live
mode––string: One of: sync, async.
notestring–Present while the call is still running: how to follow it with wmmn_get_call.
ringingAt––string: ISO-8601 timestamp (UTC)
routeId––string: Present when the call was placed over a failover chain: the route that carried it, or the last one tried
simulated––boolean: True for test-key calls: nothing was dialled
sipResponseCode––integer
status––string: queued, ringing and answered are live states; completed (answered, then ended), no_answer, busy and failed are final One of: queued, ringing, answered, completed, no_answer, busy, failed.
to––string

No examples provided.

wmmn_market_summary ~87

Read-only, free. Live marketplace snapshot: total routes, destinations, voice and SMS route counts, market status and as-of time. When the connection carries an API key, the averages are included too (capacity, average and measured ASR, ACD and USD price); without a key only the counts are returned. 24h trading volumes are not part of this summary.

Input schema present but exposes no named parameters.

NameTypeReqDescription
asOf––string: Start of the 24h activity window
avgAcd––number
avgAsr––number
avgPrice––number: Display figure
capacity––integer
destinations––integer
hasActivityData––boolean
hasRoutes––boolean
marketStatus––string
measuredAsr––number
measuredAsrSample––integer
routes––integer
smsRoutes––integer
topMovers––array
voiceRoutes––integer

No examples provided.

wmmn_purchase_route ~189

PROVISIONING ACTION (not read-only). Connect a marketplace route to your account. Connecting is free, with no upfront charge, but it provisions live SIP credentials, and any traffic you then send over the route CHARGES your balance per minute/message at the route price. Requires a LIVE key with the purchases:write scope: a test key (wmmn_test_sk_...) is refused with 400 "Route purchases require a LIVE API key". Your email must be verified; a private route needs an access grant from its seller; US voice routes need a complete STIR/SHAKEN profile and start as pending_review; connecting a route you already hold returns 409. The response includes your SIP username and password, shown once here (also retrievable later with wmmn_list_purchases on a full-access key).

NameTypeReqDescription
route_idstringyesRoute UUID to connect
NameTypeReqDescription
agreedPrice––Negotiated price (from an accepted offer) that overrides the list price
buyerId––string: Your account id
cancelledAt––string: ISO-8601 timestamp (UTC)
createdAt––string: ISO-8601 timestamp (UTC)
heldNewRate––The increased rate waiting for your acceptance
heldOldRate––Set while the purchase is paused by a seller rate increase: the rate you were paying
id––string
offerId––string: The accepted offer that set agreedPrice
pendingCompliance––boolean: True when US STIR/SHAKEN compliance review must finish before traffic flows
requiresUsCompliance––boolean: A US voice route that needs STIR/SHAKEN review before traffic flows
reviewNote––string: The compliance reviewer's note to you, if any
reviewedAt––string: ISO-8601 timestamp (UTC)
route––object
routeId––string
routingPriority––integer: Your routing position (1 = first); null = unranked
sipPassword––string: Plaintext SIP password, returned once here
sipPasswordSet––boolean: Whether a SIP password exists. The value is not returned here: it is shown once at purchase, on your purchased-routes list and on Interconnections.
sipPublicIp––string: Where to send your SIP traffic
sipUsername––string
smppSystemId––string
status––string: One of: active, paused, cancelled, pending_review.

No examples provided.

wmmn_resolve_route ~151

Read-only, free, no call placed. Preview which route Smart Routing would pick for a destination, plus up to 4 ranked alternatives. It ranks every active public marketplace route for that destination together with any private routes you have purchased. Requires an API key with the routes:read scope (full-access keys have it).

NameTypeReqDescription
strategystring–How Smart Routing ranks the candidates: lowest price, a balance of price and quality, or quality first. Defaults to balanced.
tostringyesDestination number, E.164 (e.g. "+447700900123")
typestring–Which traffic to route: a voice call or an SMS. Defaults to voice.
NameTypeReqDescription
alternatives––array
count––integer
selected–––
strategy––string: One of: cheapest, best_quality, balanced.

No examples provided.

wmmn_route_details ~154

Read-only, free, no key needed. Full details for one route — USD pricing, billing increment, seller-declared expected ASR/ACD/PDD, CLI type, capacity, and the first-party Exchange Score plus seller trust profile. originPolicy / originGroup / originPricing say whether the route is priced by caller ID origin: with "dual", originPricing.originFrom is the lowest price for calls presenting a valid caller ID from originGroup (EEA), and pricePerUnit / the deck rates are the International price for every other call; "origin_only" carries only calls with a caller ID from originGroup.

NameTypeReqDescription
route_idstringyesRoute UUID (from wmmn_list_routes)
NameTypeReqDescription
billingIncrement––string: First/subsequent increment in seconds, e.g. "60/60"
capacity––integer: Channels (voice) or messages per second (SMS)
cliType––string: One of: full_cli, ncli, partial_cli, local_cli, mixed_cli.
country––string
countryCode––string: E.164 country calling code, digits only
destinationName––string: The listing name. For anyone but the seller it is GENERATED by the platform from its own data, never the seller's text: "<Country> <Operator?> <Mobile|Fixed|All Networks>" for one destination…
exchangeScore––integer: Exchange Score 1-100, null until the route has carried real traffic. Uses the measured ASR, NER, ACD and PDD in place of the stated ones when the listing has recent measured figures
expectedAcd––string: Seller-stated ACD in seconds
expectedAsr––string: Seller-stated ASR %. The measured figure is in `measured.asr`
expectedPdd––string: Seller-stated PDD in seconds
id––string
kind––string: One of: single, blend.
listingRef––string: Anonymous short reference of the listing (4 characters, e.g. "7K2Q"): stable for the life of the listing, unique enough to tell two same-named listings apart, and derived from the listing alo…
measured––Measured quality from real calls; null until the listing has enough traffic from enough buyers
originGroup––string: Origin group key (EEA) when originPolicy is not any, else null
originPolicy––string: Caller ID origin. One of: any, dual, origin_only.
originPricing––object: { policy, group, originFrom, internationalFrom, basis }: the lowest price for a valid caller ID from the group, the lowest price for every other call, and the rule in one sentence. null on a…
otpCompatible––boolean
prefix––array: Dial prefixes the route covers
pricePerUnit––USD per minute (voice) or per message segment (SMS). On an A-Z deck (rateCount > 0) the per-destination rates apply instead. On a route priced by caller ID origin (originPolicy dual) this is the Inte…
rateCount––integer: Active per-destination deck rows; > 0 means an A-Z deck
routeChecks––Route checks on this listing in the last 7 days. Null when there were none.
routeType––string: Quality tier One of: direct, premium, standard, ncli.
smsType––string: One of: a2p, p2p, both.
status––string: One of: active, paused, suspended, pending_review.
type––string: One of: voice, sms.
visibility––string: One of: public, private.

No examples provided.

wmmn_send_sms ~318

SPENDS MONEY. Sends a REAL SMS and CHARGES your balance: the route price per segment, plus a platform fee of 2% of the carrier cost, capped at $0.001 per call or message (0.5%, same cap, when the traffic runs over your own SIP trunk; no fee when the carrier cost is 0). Long messages are split into segments (160 GSM-7 characters, 153 per part when split; 70 Unicode, 67 per part). Returns message id, segment count and exact USD cost. The returned status is carrier ACCEPTANCE, not handset delivery; delivery receipts are not returned by this tool. Omit route_id to Smart-Route across the public marketplace (no purchase needed); a route_id must be a route you have purchased. A test key (wmmn_test_sk_...) simulates against test credit with no real delivery. Requires the sms:send scope.

NameTypeReqDescription
fromstringyesSender ID — alphanumeric (e.g. "MyBrand"; max 30 chars, letters/digits/spaces/.+_- only) or an E.164 number
messagestringyesMessage text (max 1600 chars; billed per segment)
route_idstring–A route you have purchased; omit for Smart Routing
strategystring–Smart Routing strategy when route_id is omitted (default balanced)
tostringyesDestination number, E.164 (e.g. "+447700900123")
NameTypeReqDescription
cost––string: US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point.
from––string
messageId––string: Use with GET /comms/sms/{messageId}
network––object: Present when the route prices SMS to this country per destination network. The network is determined from the number's range (ported numbers may be priced at the network the range belongs to)
segments––integer: Billed segments (160 GSM-7 / 70 UCS-2 characters each, fewer when concatenated)
simulated––boolean: Present and true for test-key messages: nothing was sent
status––string: Send-time outcome when we forwarded the message, not a handset delivery receipt One of: sent, delivered, failed, pending, accepted.
submittedAt––string: ISO-8601 timestamp (UTC)
to––string

No examples provided.

wmmn_send_voice_otp ~526

SPENDS MONEY. Places a REAL short phone call (capped at 120 seconds) and speaks a one-time passcode digit by digit ("Your {brand} verification code is 4, 8, 2, 9, 1, 3. Again, ..."), repeated (default twice), then hangs up. Billed like any API call: billable minutes at the route price, plus a platform fee of 2% of the carrier cost, capped at $0.001 per call or message (0.5%, same cap, when the traffic runs over your own SIP trunk; no fee when the carrier cost is 0); no text-to-speech surcharge. Returns as soon as the call is dialled (status "initiated") with a voice_otp id; the final outcome and cost are recorded later (GET /api/v1/comms/voice-otp/{id} in the REST API). Omit code to have one generated; it is returned only when return_code is true. Limits: 5 per number per hour, 30 second resend cooldown, 20 per number range per hour, 1000 per account per day; embargoed, high-risk and do-not-contact numbers are refused. A test key (wmmn_test_sk_...) simulates with no real call and returns status "accepted" with simulated: true. Requires the voice:send scope. For send-and-check, prefer wmmn_verify_start with channel "voice".

NameTypeReqDescription
brandstring–Name spoken in "Your {brand} verification code is" (letters, digits, spaces; max 30). Defaults to your company name
codestring–The code to speak, 4-10 digits. Omit to generate one
fromstring–Caller ID, E.164. May be omitted only when the platform has a default caller ID configured; otherwise the call is refused with 400
languagestring–Spoken language (default en)
lengthinteger–Length of a generated code, 4-10 (default 6). Ignored when code is given
repeatinteger–How many times the code is spoken, 1-3 (default 2)
return_codeboolean–Return a GENERATED code in the response (default false)
strategystring–Smart Routing strategy (default balanced)
tostringyesDestination number, E.164 (e.g. "+447700900123")
NameTypeReqDescription
callId––string: The call carrying the code; it also appears in GET /comms/calls and the call.completed webhook
code––string: Present only when we generated the code AND you sent `returnCode: true`
codeLength––integer
cost––Test keys: the simulated charge. Live: null here; the final cost arrives with call.completed and on GET
createdAt––string: ISO-8601 timestamp (UTC)
from––string: The caller ID presented
language––string
repeat––integer: How many times the code is read
simulated––boolean: Present and true for test keys: nothing was dialled
status––string: `initiated`: the call is ringing. `accepted`: simulated on a test key One of: initiated, accepted.
to––string
voiceOtpId––string: Use with GET /comms/voice-otp/{id}

No examples provided.

wmmn_topup_x402 ~264

SPENDS MONEY FROM AN ON-CHAIN WALLET. Funds your PacketExchange balance with real USDC on Base over the x402 protocol. Step 1 is safe/read-only: call with just amount_usd to receive the payment requirements (HTTP 402 challenge naming the network, USDC amount and payTo address; nothing is charged). Step 2 MOVES FUNDS: sign the EIP-3009 USDC transferWithAuthorization, base64-encode it, and call again passing it as payment_header; the transfer settles on-chain and your balance is credited. Amounts are USD, min $5, max $50,000, subject to account verification (KYC) and top-up velocity limits. The credit goes to your LIVE balance whichever key you use: a test key does not simulate this. Requires the billing:write scope.

NameTypeReqDescription
amount_usdnumberyesAmount to add to your balance, in USD (paid 1:1 in USDC). Min 5, max 50000
payment_headerstring–Only on the SECOND call: the base64-encoded X-PAYMENT payload (your signed USDC authorization) from step 1. Providing it authorizes an on-chain transfer
NameTypeReqDescription
already––Step 2: true when this payment had already been credited
amountUsd––Step 2: the amount credited, in USD
network––Step 2: the chain the USDC moved on
next_step––Step 1 only: what to sign and send back as payment_header
paymentResponseHeader––Step 2: the settlement receipt (X-PAYMENT-RESPONSE)
payment_required––Step 1 only: the HTTP 402 payment requirements (network, USDC amount, payTo address)
status––Step 2: confirmed once the transfer has settled
topupId––Step 2: the top-up record
txHash––Step 2: the on-chain transaction hash

No examples provided.

wmmn_verify_check ~140

Free, no send. Checks a code the user entered against a verification from wmmn_verify_start. Returns status approved | denied | expired | max_attempts and attemptsRemaining. Only "approved" proves the user holds the number. Each wrong code uses one of 5 attempts; an approved verification cannot be approved again (a repeat check is denied with reason already_used). Check with the same kind of key (test or live) that started the verification. Requires the verify:write scope.

NameTypeReqDescription
codestringyesThe code the user entered
verification_idstringyesThe verificationId returned by wmmn_verify_start
NameTypeReqDescription
attemptsRemaining––integer
reason––string: Why a check was not approved, when it is not obvious from `status` One of: wrong_code, already_used, not_pending.
status––string: One of: approved, denied, expired, max_attempts.
verificationId––string

No examples provided.

Install

How do I install the PacketExchange MCP server?

PacketExchange is a hosted endpoint at https://packetexchange.io/mcp/http, 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.

remote · packetexchange.io

# add to Claude Code
claude mcp add --transport http io-packetexchange-mcp 'https://packetexchange.io/mcp/http'
Common questions

What is the PacketExchange MCP server?

PacketExchange is an MCP server listed in the public MCP registry as io.packetexchange/mcp. SMS, voice calls, OTP verification, phone numbers and wholesale voice routes by Minutes Network. This page covers its hosted endpoint (https://packetexchange.io/mcp/http).

Is the PacketExchange MCP server safe to use?

PacketExchange 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 PacketExchange MCP server expose?

PacketExchange exposes 33 tools: wmmn_list_routes, wmmn_route_details, wmmn_market_summary, wmmn_resolve_route, wmmn_purchase_route, and 28 more. Their descriptions and schemas cost roughly 7,552 tokens of context every time the server is loaded.

Does the PacketExchange MCP server require authentication?

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

Is the PacketExchange MCP server still maintained?

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