MCP Server

AgentRoam

ai.agentroam/agentroam

What this MCP does

Browses and purchases travel eSIMs, gift cards, and mobile top-ups using supported cryptocurrencies, with order validation and status tracking.

create_order
Create the real order (requires confirm_token from validate_order, after user approval). Returns the payment wallet address, exact crypto amount, 30-minute expiry, and an order-status URL. The purchased code/QR is emailed by Cryptorefills to the buyer — it is never returned here.
Destructive Open world
Input schema
{'type': 'object', 'required': ['confirm_token'], 'properties': {'full_name': {'type': 'string', 'description': 'Buyer full legal name — only if a previous attempt returned FULLNAME_MISSING'}, 'confirm_token': {'type': 'string', 'description': 'One-time token returned by validate_order (valid 10 minutes)'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'coin': {'type': 'string'}, 'error': {'type': 'string', 'description': 'Present on failure: KYC_MISSING | FULLNAME_MISSING | PHONE_MISSING | CONFIRM_TOKEN_*'}, 'state': {'type': 'string', 'description': 'CREATED | WAITING_FOR_PAYMENT | PARTIAL | COMPLETED | CANCELED | EXPIRED'}, 'qr_url': {'type': 'string', 'description': 'QR code PNG of the address'}, 'kyc_url': {'type': 'string', 'description': 'Hosted verification link when error=KYC_MISSING'}, 'network': {'type': 'string', 'description': 'Exact network — funds sent elsewhere are lost'}, 'pay_amount': {'type': 'number', 'description': 'EXACT amount to send'}, 'status_url': {'type': 'string', 'description': 'Live order-status page'}, 'payment_url': {'type': 'string', 'description': 'Payment page with QR'}, 'instructions': {'type': 'string'}, 'status_token': {'type': 'string'}, 'network_label': {'type': 'string'}, 'pay_to_address': {'type': 'string', 'description': 'Wallet address to send funds to'}, 'external_order_id': {'type': 'string'}, 'payment_expires_at': {'type': 'string', 'description': 'ISO timestamp; 30-minute window'}}, 'additionalProperties': True}
get_currencies
List all supported payment cryptocurrencies (the response carries the current set).
Read only
Input schema
{'type': 'object', 'required': [], 'properties': {}}
Output schema
{'type': 'object', 'required': ['currencies'], 'properties': {'currencies': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
get_order_status
Poll order state (WAITING_FOR_PAYMENT → PARTIAL → COMPLETED, or CANCELED/EXPIRED). Requires the status_token from create_order.
Read only Open world
Input schema
{'type': 'object', 'required': ['external_order_id', 'status_token'], 'properties': {'status_token': {'type': 'string', 'description': 'statusToken returned by create_order'}, 'external_order_id': {'type': 'string'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'coin': {'type': 'string'}, 'brand': {'type': 'string'}, 'error': {'type': 'string', 'description': 'not_found when id/token mismatch'}, 'state': {'type': 'string', 'description': 'WAITING_FOR_PAYMENT | PARTIAL | COMPLETED | CANCELED | EXPIRED | REFUNDED'}, 'network': {'type': 'string'}, 'status_url': {'type': 'string'}, 'denomination': {'type': 'string'}, 'external_order_id': {'type': 'string'}, 'payment_expires_at': {'type': 'string'}}, 'additionalProperties': True}
get_payment_methods
Full payment matrix: every supported coin × network combination currently available, with the exact network strings orders require. The response includes live totals — report those, never a memorized count.
Read only
Input schema
{'type': 'object', 'required': [], 'properties': {}}
Output schema
{'type': 'object', 'required': ['combinations'], 'properties': {'payment_via': {'type': 'string'}, 'combinations': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'coin': {'type': 'string'}, 'display': {'type': 'string'}, 'network': {'type': 'string', 'description': 'Exact string to pass on orders'}}, 'additionalProperties': True}}}, 'additionalProperties': True}
get_price
Live crypto price for one product/denomination. Payment coins include USDT, USDC, BTC (incl. Lightning), ETH, SOL, DAI, PYUSD, LTC, TRX, TON, DOGE and SUI across many networks — call get_payment_methods for the current list. Never creates an order.
Read only Open world
Input schema
{'type': 'object', 'required': ['brand_slug', 'country_code', 'denomination_label', 'amount_usd', 'dynamic', 'coin', 'network'], 'properties': {'coin': {'type': 'string', 'description': 'Payment coin, e.g. USDC, USDT, BTC, SOL'}, 'dynamic': {'type': 'boolean', 'description': 'true for dynamic-range amounts, false for fixed denomination labels'}, 'network': {'type': 'string', 'description': 'Exact network string from get_price/networks, e.g. "Solana", "Tron", "ETH Mainnet"'}, 'amount_usd': {'type': 'number', 'description': 'USD amount (for dynamic-range products)'}, 'brand_slug': {'type': 'string', 'description': 'brandSlug from search_products'}, 'country_code': {'type': 'string', 'description': 'countryCode from search_products'}, 'denomination_label': {'type': 'string', 'description': 'Exact denomination label (e.g. "100 USD", "60 UC", "1 GB 7 days")'}}}
Output schema
{'type': 'object', 'required': ['payAmount', 'coin', 'network'], 'properties': {'coin': {'type': 'string'}, 'feePct': {'type': 'number', 'description': 'Fee percent over USD face value (0 for volatile coins)'}, 'network': {'type': 'string'}, 'estimate': {'type': 'boolean', 'description': 'true = indicative only; exact amount fixed at order creation'}, 'payAmount': {'type': 'number', 'description': 'Amount to pay in the chosen coin'}, 'faceValueUsd': {'type': 'number'}}, 'additionalProperties': True}
list_brands
Browse all available brands/carriers for a country: gift cards (500+ US brands) and mobile top-up carriers (100+ countries). Never creates an order.
Read only Open world
Input schema
{'type': 'object', 'required': ['country_code'], 'properties': {'kind': {'type': 'string', 'description': 'Filter by product type'}, 'country_code': {'type': 'string', 'description': 'ISO country code, e.g. "us", "mx"'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'count': {'type': 'number'}, 'brands': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'kind': {'type': 'string', 'description': 'giftcard | topup'}, 'note': {'type': 'string'}, 'range': {'type': 'string'}, 'category': {'type': 'string'}, 'brandName': {'type': 'string'}, 'brandSlug': {'type': 'string'}, 'outOfStock': {'type': 'boolean'}}, 'additionalProperties': True}}, 'country': {'type': 'string'}}, 'additionalProperties': True}
list_esim_plans
PREFERRED for any eSIM request: live eSIM data plans for a destination (110+ countries, plus "eu" Europe and "ww" Global multi-country plans) with USD prices and crypto amounts. Renders an interactive plan-picker widget where the user can complete the purchase directly. Never creates an order by itself.
Read only Open world
Input schema
{'type': 'object', 'required': ['destination'], 'properties': {'coin': {'type': 'string', 'description': 'Coin for live pricing (default USDC)'}, 'destination': {'type': 'string', 'description': 'Destination: 2-letter country code (e.g. "il", "jp", "fr"), or "eu" (Europe region plan) / "ww" (Global plan)'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'url': {'type': 'string'}, 'coin': {'type': 'string'}, 'flag': {'type': 'string'}, 'brand': {'type': 'string'}, 'error': {'type': 'string'}, 'country': {'type': 'string', 'description': 'Destination code — pass as country_code to validate_order'}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'usd': {'type': 'number'}, 'data_gb': {'type': 'number'}, 'coin_amount': {'type': 'number'}, 'validity_days': {'type': 'number'}, 'denomination_label': {'type': 'string', 'description': 'Exact label for validate_order'}}, 'additionalProperties': True}}, 'destination_name': {'type': 'string'}}, 'additionalProperties': True}
list_products
List a brand's live products/denominations with prices in the chosen coin — exact labels to use with get_price/validate_order (for eSIM use list_esim_plans instead). Never creates an order.
Read only Open world
Input schema
{'type': 'object', 'required': ['brand_slug', 'country_code'], 'properties': {'coin': {'type': 'string', 'description': 'Coin for live pricing (default USDC)'}, 'brand_slug': {'type': 'string', 'description': 'brandSlug from list_brands/search_products'}, 'country_code': {'type': 'string'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'url': {'type': 'string', 'description': 'Product page on the AgentRoam site'}, 'coin': {'type': 'string'}, 'flag': {'type': 'string'}, 'kind': {'type': 'string', 'description': 'giftcard | esim | topup'}, 'brand': {'type': 'string'}, 'error': {'type': 'string', 'description': 'product_not_found'}, 'country': {'type': 'string'}, 'is_esim': {'type': 'boolean'}, 'logoUrl': {'type': 'string'}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'usd': {'type': 'number'}, 'range': {'type': 'object', 'required': [], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}, 'step': {'type': 'number'}}, 'additionalProperties': True}, 'data_gb': {'type': 'number', 'description': 'eSIM plans only'}, 'dynamic': {'type': 'boolean'}, 'coin_amount': {'type': 'number', 'description': 'Live price in the requested coin'}, 'validity_days': {'type': 'number', 'description': 'eSIM plans only'}, 'denomination_label': {'type': 'string', 'description': 'Exact label for get_price/validate_order'}}, 'additionalProperties': True}}, 'brand_slug': {'type': 'string'}, 'country_name': {'type': 'string'}, 'destination_name': {'type': 'string'}}, 'additionalProperties': True}
purchase_wizard
Text-only fallback purchase flow for clients WITHOUT widget support. In ChatGPT prefer list_esim_plans / list_products + validate_order + create_order instead. Stateful: call repeatedly with the same session_token, answering one question at a time, until status is "complete". First call: empty arguments. The final "confirm" answer creates a REAL order — get explicit user approval first.
Destructive Open world
Input schema
{'type': 'object', 'required': [], 'properties': {'action': {'type': 'string', 'description': '"back" to return to the previous step'}, 'answer': {'type': 'string', 'description': 'Answer to the current question'}, 'session_token': {'type': 'string', 'description': 'Omit on the first call — a new session is minted'}}}
Output schema
{'type': 'object', 'required': ['status', 'session_token'], 'properties': {'hint': {'type': 'string'}, 'step': {'type': 'string'}, 'error': {'type': 'string'}, 'result': {'type': 'object', 'required': [], 'properties': {'coin': {'type': 'string'}, 'error': {'type': 'string', 'description': 'Present on failure: KYC_MISSING | FULLNAME_MISSING | PHONE_MISSING | CONFIRM_TOKEN_*'}, 'state': {'type': 'string', 'description': 'CREATED | WAITING_FOR_PAYMENT | PARTIAL | COMPLETED | CANCELED | EXPIRED'}, 'qr_url': {'type': 'string', 'description': 'QR code PNG of the address'}, 'kyc_url': {'type': 'string', 'description': 'Hosted verification link when error=KYC_MISSING'}, 'network': {'type': 'string', 'description': 'Exact network — funds sent elsewhere are lost'}, 'pay_amount': {'type': 'number', 'description': 'EXACT amount to send'}, 'status_url': {'type': 'string', 'description': 'Live order-status page'}, 'payment_url': {'type': 'string', 'description': 'Payment page with QR'}, 'instructions': {'type': 'string'}, 'status_token': {'type': 'string'}, 'network_label': {'type': 'string'}, 'pay_to_address': {'type': 'string', 'description': 'Wallet address to send funds to'}, 'external_order_id': {'type': 'string'}, 'payment_expires_at': {'type': 'string', 'description': 'ISO timestamp; 30-minute window'}}, 'additionalProperties': True}, 'status': {'type': 'string', 'description': 'in_progress | complete | error'}, 'options': {'type': 'array', 'items': {'type': 'string'}}, 'summary': {'type': 'string'}, 'question': {'type': 'string', 'description': 'Ask the user this'}, 'session_token': {'type': 'string', 'description': 'Pass back on every call of this session'}}, 'additionalProperties': True}
search_products
Search the AgentRoam travel-crypto catalog: gift cards (Airbnb, Uber, airlines, 500+ US brands), eSIM data plans (110+ destinations incl. Europe/Global region plans) and mobile top-ups (carriers in 100+ countries). Returns product handles for get_price/validate_order. Never creates an order.
Read only Open world
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'kind': {'type': 'string', 'description': 'Product type filter'}, 'query': {'type': 'string', 'description': 'Brand, carrier or destination to search for'}, 'country': {'type': 'string', 'description': 'ISO country code filter (e.g. "us", "mx")'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'hint': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': [], 'properties': {'url': {'type': 'string', 'description': 'Product page on the AgentRoam site'}, 'kind': {'type': 'string', 'description': 'giftcard | esim | topup'}, 'range': {'type': 'string', 'description': 'Price range display, e.g. "$50 – $500"'}, 'brandName': {'type': 'string'}, 'brandSlug': {'type': 'string'}, 'outOfStock': {'type': 'boolean'}, 'countryCode': {'type': 'string'}, 'destination': {'type': 'string', 'description': 'eSIM destination name'}}, 'additionalProperties': True}}}, 'additionalProperties': True}
validate_order
Dry-run an order and mint a one-time confirm_token (valid 10 minutes). Returns a human-readable summary that MUST be shown to the user for approval before calling create_order. Does NOT create the order or reserve funds.
Open world
Input schema
{'type': 'object', 'required': ['brand_slug', 'country_code', 'denomination_label', 'amount_usd', 'dynamic', 'coin', 'network', 'email'], 'properties': {'coin': {'type': 'string', 'description': 'Payment coin, e.g. USDC, USDT, BTC, SOL'}, 'email': {'type': 'string', 'description': 'Delivery email for the buyer'}, 'phone': {'type': 'string', 'description': 'Phone number to recharge (REQUIRED for mobile top-ups, with country code)'}, 'dynamic': {'type': 'boolean', 'description': 'true for dynamic-range amounts, false for fixed denomination labels'}, 'network': {'type': 'string', 'description': 'Exact network string from get_price/networks, e.g. "Solana", "Tron", "ETH Mainnet"'}, 'amount_usd': {'type': 'number', 'description': 'USD amount (for dynamic-range products)'}, 'brand_slug': {'type': 'string', 'description': 'brandSlug from search_products'}, 'country_code': {'type': 'string', 'description': 'countryCode from search_products'}, 'denomination_label': {'type': 'string', 'description': 'Exact denomination label (e.g. "100 USD", "60 UC", "1 GB 7 days")'}}}
Output schema
{'type': 'object', 'required': [], 'properties': {'error': {'type': 'string', 'description': 'product_not_found | out_of_stock | PHONE_MISSING'}, 'price': {'type': 'object', 'required': [], 'properties': {'coin': {'type': 'string'}, 'feePct': {'type': 'number', 'description': 'Fee percent over USD face value (0 for volatile coins)'}, 'network': {'type': 'string'}, 'estimate': {'type': 'boolean', 'description': 'true = indicative only; exact amount fixed at order creation'}, 'payAmount': {'type': 'number', 'description': 'Amount to pay in the chosen coin'}, 'faceValueUsd': {'type': 'number'}}, 'additionalProperties': True}, 'valid': {'type': 'boolean'}, 'message': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Human-readable purchase summary — show to the user for approval'}, 'instructions': {'type': 'string'}, 'confirm_token': {'type': 'string', 'description': 'One-time token for create_order, valid 10 minutes'}, 'expires_in_seconds': {'type': 'number'}}, 'additionalProperties': True}
Added
purchase_wizard
2026年9月11日0:30
Added
get_payment_methods
2026年9月11日0:30
Added
get_currencies
2026年9月11日0:30
Added
list_products
2026年9月11日0:30
Added
list_brands
2026年9月11日0:30
Added
get_order_status
2026年9月11日0:30
Added
list_esim_plans
2026年9月11日0:30
Added
create_order
2026年9月11日0:30
Added
validate_order
2026年9月11日0:30
Added
get_price
2026年9月11日0:30
Added
search_products
2026年9月11日0:30