About PacketExchange
PacketExchange is a hosted MCP server for agents and MCP clients using its voice and SMS marketplace. It provides tools for route discovery, messaging, calls, verification, account management and Switch operations.
Key features
- 01Search and compare voice routes
- 02Purchase and manage routes
- 03Send SMS and place calls
- 04Run phone verification
- 05Check balances and transactions
- 06Manage Switch routing and settings
Use cases
- 01Find voice routes by destination and price
- 02Send verification codes by voice or SMS
- 03Place a call and check its status
- 04Review account activity and balance
MCP support
The hosted MCP server exposes 33 tools for marketplace discovery, route and account operations, communications, verification and Switch management. It supports Streamable HTTP and a legacy HTTP+SSE endpoint.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://packetexchange.io/mcp/httpclaude mcp add --transport http io-packetexchange https://packetexchange.io/mcp/http{"mcpServers":{"io-packetexchange":{"type":"http","url":"https://packetexchange.io/mcp/http"}}}Open in Cursor{"servers":{"io-packetexchange":{"type":"http","url":"https://packetexchange.io/mcp/http"}}}Open in VS Code{"mcpServers":{"io-packetexchange":{"type":"http","url":"https://packetexchange.io/mcp/http"}}}{"mcpServers":{"io-packetexchange":{"serverUrl":"https://packetexchange.io/mcp/http"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://packetexchange.io/mcp/httpAuth requiredTools
33| Parameter | Type | Required | Description |
|---|---|---|---|
| sort | enum | No | 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 sorts use the seller-declared values; score = Exchange Scoretested_desc | cli_desc | price_asc | price_desc | asr_desc | asr_asc | acd_desc | acd_asc | pdd_asc | pdd_desc | capacity_desc | created_desc | country_asc | score_desc | score_asc |
| type | enum | No | Traffic type: voice or smsvoice | sms |
| limit | integer | No | Max results, 1-100 (default 25) |
| search | string | No | Search by country, dial code or number, mobile/fixed, tier (premium/direct/standard/ncli) or an operator name (e.g. "Safaricom") |
| tested | boolean | No | Only rows proven to connect to their network (a real call or our test). Needs per_network |
| country | string | No | Filter by country name, substring match (e.g. "United Kingdom") |
| min_asr | string | No | Minimum seller-declared expected ASR in percent, e.g. "40" |
| network | string | No | Only this network, exact name as returned (e.g. "Vodafone"). Needs per_network |
| cli_type | enum | No | 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)full_cli | local_cli | mixed_cli | ncli |
| max_price | string | No | Max price per unit in USD (per minute for voice, per message for SMS), e.g. "0.0100" |
| route_type | enum | No | Route quality tierdirect | premium | standard | ncli |
| per_network | boolean | No | One row per route and mobile network, with the measured marks (default true). false = one row per listing, without marks |
| verification | enum | No | Only listings in this verification tier (voice): cli = International CLI, ncli = NCLI, connected = Qualified, not_verified = Untested. Omitted = every tier, best firstcli | ncli | connected | not_verified |
| verified_cli | boolean | No | Only rows where the caller ID arrived intact on a real phone on that network. Needs per_network |
| origin_policy | enum | No | 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 = allany | dual | origin_only |
Details
From the project READMEConnect AI agents and MCP clients to the PacketExchange voice and SMS marketplace.
PacketExchange runs a hosted Model Context Protocol server. Once your client is connected, an agent can search the marketplace, compare routes, run a phone verification, send an SMS, place a call and follow it, and check the account balance, by calling tools by name.
This repository holds the documentation and ready-to-use client configurations. There is nothing to build or host: the server runs at PacketExchange.
Server
| Endpoint | https://packetexchange.io/mcp/http |
| Transport | Streamable HTTP, stateless (every request stands alone, with no session to keep) |
| Legacy endpoint | https://packetexchange.io/mcp/sse, for clients that only speak the older HTTP+SSE transport |
| Tools | 33: 15 marketplace and account tools, 18 Switch tools |
| Authentication | Authorization: Bearer <API key> header, set in your client configuration. The three public tools work without it. |
Install
Pick your client and copy its configuration:
| Client | Guide | Configuration |
|---|---|---|
| Claude Code | docs/setup/claude-code.md | configs/claude-code.json |
| Claude Desktop | docs/setup/claude-desktop.md | configs/claude-desktop.json |
| Cursor | docs/setup/cursor.md | configs/cursor.json |
| VS Code | docs/setup/vscode.md | configs/vscode.json |
| Codex | docs/setup/codex.md | configs/codex.toml |
| Any other MCP client | docs/setup/other-clients.md | configs/generic-stdio.json |
Clients that connect to remote servers directly need only the URL and the header. For example, a client that reads an mcpServers file with environment variable expansion:
{
"mcpServers": {
"packetexchange": {
"type": "http",
"url": "https://packetexchange.io/mcp/http",
"headers": {
"Authorization": "Bearer ${PACKETEXCHANGE_API_KEY}"
}
}
}
}
Clients that can only start local commands reach the server through the mcp-remote bridge, which needs a current Node.js LTS release.
Quick start
With the server connected, try a public tool. These need no key and cost nothing:
- "What are the five cheapest voice routes to Kenya on PacketExchange? Include the seller-stated ASR."
- "Give me a summary of the PacketExchange marketplace right now."
More in docs/example-prompts.md.
Tools
| Group | Tools |
|---|---|
| Discover (public, free) | wmmn_list_routes, wmmn_route_details, wmmn_market_summary |
| Route | wmmn_resolve_route, wmmn_purchase_route, wmmn_list_purchases |
| Send (billed) | wmmn_send_sms, wmmn_make_call, wmmn_get_call (free) |
| Verify | wmmn_send_voice_otp, wmmn_verify_start, wmmn_verify_check |
| Account | wmmn_get_balance, wmmn_list_transactions, wmmn_topup_x402 |
| Switch (Switch plan) | 18 switch_* tools for routing, customers, suppliers, rates, invoicing and fraud settings |
wmmn_make_call places the call asynchronously and can speak text, play audio and collect keypad digits once the call is answered. It waits a short time for the result; if the call is still running, wmmn_get_call reads its status, cost and gathered digits later.
The full reference, with parameters, required scopes and cost notes, is in docs/tools.md.
Authentication
Using account tools needs a PacketExchange account with prepaid credit: sign up at packetexchange.io, add credit, and create an API key in the dashboard under API keys.
- The key is sent as an
Authorization: Bearer <key>header, configured once in your MCP client. It is the only way the server accepts a key: no tool takes a key as an argument, so the key never passes through the model or into the conversation. - The public tools (
wmmn_list_routes,wmmn_route_details,wmmn_market_summary) work without a key. Any other tool called on a connection without one returns an error asking you to add the header. - Use a dedicated key with only the scopes the agent needs. Read docs/security.md before using account tools.
Costs
Tools that spend money say so in their descriptions, so the agent knows before it calls them. Calls and messages are billed from your prepaid balance at the route price plus the platform fee (2% of the route rate, capped at $0.001 per call or message). See pricing for details.
Good to know
- ASR and ACD figures on listings are stated by the seller, not measured by PacketExchange.
wmmn_send_smsreturns the send-time outcome (accepted, sent or failed). The delivery outcome, when the route returns a carrier receipt, is available from the REST API (GET /comms/sms/{messageId}) and thesms.deliveredandsms.failedwebhooks.- Voice passcodes and spoken call actions can use English, Spanish, French, German, Portuguese and Hindi.
- Test keys (
wmmn_test_sk_...) simulate calls and messages against test credit. They can read Switch data but cannot change it, and cannot make x402 top-ups: those requests are refused withTEST_KEY_NOT_ALLOWED. - Use PacketExchange for transactional messages and calls to people who expect them, such as verification codes, alerts and appointment reminders.
Links
- MCP server overview: packetexchange.io/mcp
- Developers: packetexchange.io/developers
- API reference: packetexchange.io/api-docs
- OpenAPI specification: packetexchange-openapi
- Support: [email protected]
License
The documentation and configurations in this repository are released under the MIT License.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.
