Swapper - XMR to USDC swaps
Server Details
Swap Monero (XMR) <-> native USDC on Arbitrum One. No KYC, no account, no API key. For AI agents.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Score is being calculated.
Available Tools
11 toolscreate_support_ticketOpen support ticketInspect
Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| message | Yes | What happened (sent what, when, what the user sees), or your question. | |
| orderId | No | ord_... of the affected order. | |
| category | No | Short topic, e.g. "stuck", "refund". Default "agent". | |
| ticketId | No | Follow-up: an existing ticket. | |
| sessionId | No | Session UUID, if known. | |
| replyToken | No | With ticketId. | |
| walletAddress | No | Public address involved (sending wallet or destination). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| ticketId | No | |
| operation | Yes | |
| replyToken | No | |
| userMessage | No |
create_swapCreate XMR/USDC swap orderIdempotentInspect
Step 2. Creates the order from get_quote's next.arguments (quoteId, plus to if the quote had none): one order per quote; moves no funds. Retry with the same arguments: the default idempotencyKey returns the same order. Fund once, only while payable is true: before signing deposit.payment, get_swap_status {orderId, payment} must return paymentCheck.matches. Next: get_swap_status.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Destination, only if the quote had none (next.missing). Never guess. | |
| detail | No | ||
| quoteId | Yes | From get_quote's next.arguments. | |
| idempotencyKey | No | Optional; default q_<quoteId>. Reuse on every retry. A custom key: a fresh random UUID per intent. | |
| quoteIntentDigest | No | From next.arguments: create fails if the quote's terms differ. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| queue | No | |
| state | No | |
| deposit | No | |
| orderId | No | |
| payable | No | |
| replayed | No | |
| trackUrl | No | |
| operation | Yes | |
| recovered | No | |
| destination | No | |
| userMessage | No | |
| payableReason | No | |
| expectedReceive | No | |
| reconfirmRequired | No |
get_capabilitiesSwapper capabilitiesRead-onlyIdempotentInspect
Optional. Chains, limits (provider minimum, USD), quote window, idempotency, validation rules, polling and the flow.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| operation | Yes | |
| userMessage | No | |
| contractVersion | No |
get_funding_optionsHow to fund a swapRead-onlyIdempotentInspect
Offline. How to get what the user sends: native USDC (not USDC.e) plus a little ETH for gas on Arbitrum One (u2x, default), or XMR in their own wallet (x2u). Pass from {chain, asset} (and amount) for one ordered checklist: quote, fund, re-quote (requoteOf).
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Where the funds are now. | |
| amount | No | Send amount from a quote, if known. | |
| detail | No | ||
| direction | No | u2x (default): the user sends USDC. x2u: XMR. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| route | No | |
| state | No | |
| matched | No | |
| checklist | No | |
| direction | No | |
| operation | Yes | |
| userMessage | No |
get_quoteGet XMR/USDC swap quoteRead-onlyIdempotentInspect
Step 1. Quote Monero (XMR) <-> native USDC on Arbitrum One; no KYC, account or API key. Read-only; quotes are estimates. Buy XMR ("get me 1 XMR"): {direction:"u2x", receiveAmount:"1"}. Sell XMR: {direction:"x2u", amount:"0.5"}. direction plus exactly one of amount (what the user sends) or receiveAmount (what they want). Pass to if known; re-quote with {requoteOf}. Next: create_swap with next.arguments; no confirmation step is required.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Destination from the user: x2u an Arbitrum One 0x address, u2x a Monero address. Never guess. | |
| basis | No | receiveAmount target met by the estimate (default) or the provider minimum (only if one is published). | |
| chain | No | Default arbitrum (42161). | |
| amount | No | What the user SENDS (x2u: XMR, u2x: USDC). Digits and one dot; no commas or units. | |
| detail | No | ||
| agentKey | No | From request_agent_key: lower fee. | |
| direction | No | Required. u2x: send USDC, get XMR. x2u: send XMR, get USDC. | |
| requoteOf | No | Re-quote this quoteId's stored parameters; pass it alone. | |
| receiveAmount | No | What the user wants to RECEIVE (u2x: XMR, x2u: USDC); needs direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| delta | No | |
| error | No | |
| quote | No | |
| state | No | |
| target | No | |
| quoteId | No | |
| agentKey | No | |
| direction | No | |
| operation | Yes | |
| guaranteed | No | |
| acceptUntil | No | |
| destination | No | |
| userMessage | No | |
| expiresInSec | No | |
| prerequisites | No | |
| minimumSwapUsd | No | |
| acceptWindowSec | No | |
| belowProviderMinimum | No |
get_support_ticketRead support repliesRead-onlyIdempotentInspect
Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| ticketId | Yes | ||
| replyToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| status | No | |
| thread | No | |
| replies | No | |
| awaiting | No | |
| ticketId | No | |
| operation | Yes | |
| userMessage | No |
get_swap_statusGet swap statusRead-onlyIdempotentInspect
Step 3. waiting_for_funding -> deposit_detected -> swap_processing -> completed, or refunding / terminal_failure (outcome refunded, failed, expired). Long-poll with waitSec 25 and sinceState = the last state; repeat next until terminal. deposit.payment may be used only while payable is true. Call it before funding or showing a deposit again. payment: what your wallet will sign; sign only if paymentCheck.matches.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| verify | No | Destination address (optional extra check). | |
| orderId | Yes | From create_swap or list_swaps. | |
| payment | No | Raw tx hex, tx JSON, monero:/ethereum: URI or calldata. | |
| waitSec | No | Long-poll seconds for a change from sinceState (max 25; more is capped). | |
| sinceState | No | State from your previous call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| status | No | |
| waited | No | |
| deposit | No | |
| orderId | No | |
| outcome | No | |
| payable | No | |
| evidence | No | |
| received | No | |
| terminal | No | |
| trackUrl | No | |
| afterSwap | No | |
| attention | No | |
| mayChange | No | |
| operation | Yes | |
| destination | No | |
| userMessage | No | |
| paymentCheck | No | |
| payableReason | No | |
| receivedBelowMinimum | No |
list_swapsFind my swapsRead-onlyIdempotentInspect
Find orders when the orderId is lost (new chat, crash, unknown create outcome): pass the idempotencyKey create_swap used (default q_), or a sessionId. Read-only; addresses redacted; states can lag. Next: get_swap_status (live state, payable).
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| sessionId | No | Session UUID, instead of idempotencyKey. | |
| idempotencyKey | No | The key create_swap used (default q_<quoteId>). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| note | No | |
| error | No | |
| state | No | |
| lookup | No | |
| orders | No | |
| payable | No | |
| operation | Yes | |
| userMessage | No | |
| payableReason | No |
plan_swapValidate swap inputsRead-onlyIdempotentInspect
Optional, offline. Checks a partial request (direction, amount or receiveAmount, to) and returns the next question for the user. Skip it when you have what get_quote needs.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Destination from the user: x2u an Arbitrum One 0x address, u2x a Monero address. Never guess. | |
| amount | No | What the user sends. | |
| detail | No | ||
| direction | No | u2x or x2u, as the user said it. | |
| receiveAmount | No | What the user wants to receive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| question | No | |
| operation | Yes | |
| userMessage | No | |
| missingInputs | No | |
| validationErrors | No |
request_agent_keyRequest an agent key (lower fee)Inspect
Free key for a lower fee: pass it as agentKey on get_quote (its order keeps the fee). Keep it private.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| contact | No | ||
| purpose | No | ||
| agentName | No | Default: your client's name. | |
| referredBy | No | Referral code of the agent that sent you. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| keyId | No | |
| state | No | |
| welcome | No | |
| agentKey | No | |
| operation | Yes | |
| feePercent | No | |
| userMessage | No | |
| referralCode | No | |
| standardFeePercent | No |
submit_feedbackRate a swapInspect
Optional, after a swap: rating 1-5 and a sentence. Every rating counts; a publishable comment is shown to other agents after review. Returns your referralCode.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | ||
| rating | Yes | ||
| comment | No | ||
| orderId | No | ||
| agentName | No | ||
| publishable | No | May other agents read the comment? |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| data | No | |
| next | Yes | |
| error | No | |
| state | No | |
| operation | Yes | |
| feedbackId | No | |
| userMessage | No | |
| referralCode | No | |
| verifiedSwap | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
create_swap1 field changed- added
Output schema / properties / queueAdded value: +{ + "type": [ + "object", + "null" + ] +}
- Changed
get_swap_status1 field changed- added
Output schema / properties / afterSwapAdded value: +{ + "type": [ + "object", + "null" + ] +}
- Changed
request_agent_key3 fields changed- added
Input schema / properties / referredByAdded value: +{ + "description": "Referral code of the agent that sent you.", + "pattern": "^ref_[a-f0-9]{10}$", + "type": "string" +} - added
Output schema / properties / referralCodeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / welcomeAdded value: +{ + "type": [ + "object", + "null" + ] +}
- Added
submit_feedback
4 tool updates
- Changed
create_support_ticket4 fields changed- changed
Input schema / properties / message / descriptionPrevious value: -"What happened: what was sent, when, what the user sees."New value: +"What happened (sent what, when, what the user sees), or your question." - added
Input schema / properties / replyTokenAdded value: +{ + "description": "With ticketId.", + "pattern": "^rt_[a-f0-9]{48}$", + "type": "string" +} - added
Input schema / properties / ticketIdAdded value: +{ + "description": "Follow-up: an existing ticket.", + "pattern": "^[0-9a-fA-F-]{36}$", + "type": "string" +} - added
Output schema / properties / replyTokenAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
get_quote2 fields changed- added
Input schema / properties / agentKeyAdded value: +{ + "description": "From request_agent_key: lower fee.", + "pattern": "^swk_[a-f0-9]{40}$", + "type": "string" +} - added
Output schema / properties / agentKeyAdded value: +{ + "type": [ + "object", + "null" + ] +}
- Added
get_support_ticket - Added
request_agent_key
8 tool updates
- First observed
create_support_ticket - First observed
create_swap - First observed
get_capabilities - First observed
get_funding_options - First observed
get_quote - First observed
get_swap_status - First observed
list_swaps - First observed
plan_swap
Related MCP Connectors
Non-custodial cross-chain crypto swap MCP — 1288+ assets, no KYC. Solana/EVM/Monero, RPC, oracle.
Swap crypto across chains, including Monero (XMR): quote, create and track swaps.
Cross-chain swap API for native Bitcoin, Solana and EVM chains. No API key, no custody.
Token swaps and honeypot/rug checks for AI agents on 8 chains, paid per-call in USDC via x402.
Related MCP Servers
AlicenseAqualityCmaintenanceNon-custodial USDC <-> bank for AI agents. Free quotes; $0.05 USDC per session via x402; 1% commission itemised in every quote. Own funds only. PT + EU/EEA (not UK). 18+.4341 npm1MIT- AlicenseAqualityDmaintenanceNon-custodial crypto swaps for AI agents: Solana (Jupiter) + 7 EVM chains (KyberSwap), 1288+ assets, cross-chain routing, priority-fee oracle, Hyperliquid perps. Returns unsigned transactions — your wallet signs, no API key, no KYC. Hosted at https://swaptitan.net/mcp181MIT

Purple Flea Walletofficial
FlicenseNot gradedqualityDmaintenanceNon-custodial HD wallet API for AI agents. Generate wallets on 6 chains (ETH, Base, SOL, BTC, TRX, XMR), check balances, send crypto, and swap cross-chain via Wagyu aggregator. 10% referral commissions.7 npm-- AlicenseAqualityAmaintenanceEnables cross-chain swap execution across 12 venues and 17 chains, including native Bitcoin as source or destination, with tools for quoting, execution, status, and health checks. No signup, API key, or protocol fee required.5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.