{"apiVersion":"v1","directorySlug":"xmrtousdc-mcp-fb106cba7b","title":"Swapper","description":"Swap Monero (XMR) to USDC on Arbitrum One, or USDC back to XMR. No account, no wallet connection. Public API and MCP server for AI agents.","pageUrl":"https://www.mcpbundles.com/skills/xmrtousdc-mcp-fb106cba7b","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.xmrtousdc.xyz/mcp","hostedMcpUrl":null,"toolCount":11,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"xyz.xmrtousdc/xmrtousdc-mcp-fb106cba7b","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_quote","description":"Step 1. Quote Monero (XMR) <-> native USDC on Arbitrum One; no account or API key. Creates no order. 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. Next: create_swap with next.arguments.","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"basis":{"enum":["estimate","minimum"],"type":"string"},"chain":{"type":"string"},"amount":{"type":"string","pattern":"^(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)$"},"detail":{"enum":["lean","full"],"type":"string"},"agentKey":{"type":"string","pattern":"^swk_[a-f0-9]{40}$"},"direction":{"enum":["x2u","u2x"],"type":"string"},"requoteOf":{"type":"string","pattern":"^q_[a-f0-9]{32}$"},"receiveAmount":{"type":"string","pattern":"^(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)$"}},"additionalProperties":false},"title":"Get XMR/USDC swap quote","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_quote","displayName":"Get XMR/USDC swap quote"},{"name":"create_swap","description":"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. An order cannot be cancelled; unfunded, it expires. 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.safeToSend. Next: get_swap_status.","inputSchema":{"type":"object","required":["quoteId"],"properties":{"to":{"type":"string"},"detail":{"enum":["lean","full"],"type":"string"},"quoteId":{"type":"string","pattern":"^q_[a-f0-9]{32}$"},"idempotencyKey":{"type":"string","pattern":"^[A-Za-z0-9:_-]{8,128}$"},"quoteIntentDigest":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"additionalProperties":false},"title":"Create XMR/USDC swap order","logicalName":"create_swap","displayName":"Create XMR/USDC swap order","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_swap_status","description":"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. Call it before funding or showing a deposit again. payment: what your wallet will sign; sign only if paymentCheck.safeToSend.","inputSchema":{"type":"object","required":["orderId"],"properties":{"detail":{"enum":["lean","full"],"type":"string"},"verify":{"type":"string"},"orderId":{"type":"string"},"payment":{"type":"string","maxLength":20000},"waitSec":{"type":"integer","minimum":0},"sinceState":{"enum":["waiting_for_funding","deposit_detected","swap_processing","refunding","completed","terminal_failure","unknown"],"type":"string"}},"additionalProperties":false},"title":"Get swap status","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_swap_status","displayName":"Get swap status"},{"name":"get_funding_options","description":"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).","inputSchema":{"type":"object","properties":{"from":{"type":"object","properties":{"asset":{"type":"string"},"chain":{"type":"string"}},"additionalProperties":false},"amount":{"type":"string","pattern":"^(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)$"},"detail":{"enum":["lean","full"],"type":"string"},"direction":{"enum":["u2x","x2u"],"type":"string"}},"additionalProperties":false},"title":"How to fund a swap","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_funding_options","displayName":"How to fund a swap"},{"name":"list_swaps","description":"Find orders when the orderId is lost (new chat, crash, unknown create outcome): pass the idempotencyKey create_swap used (default q_<quoteId>), or a sessionId. Read-only; addresses redacted; states can lag. Next: get_swap_status (live state, payable).","inputSchema":{"type":"object","properties":{"detail":{"enum":["lean","full"],"type":"string"},"sessionId":{"type":"string"},"idempotencyKey":{"type":"string","pattern":"^[A-Za-z0-9:_-]{8,128}$"}},"additionalProperties":false},"title":"Find my swaps","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_swaps","displayName":"Find my swaps"},{"name":"plan_swap","description":"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.","inputSchema":{"type":"object","properties":{"to":{"type":"string"},"amount":{"type":"string"},"detail":{"enum":["lean","full"],"type":"string"},"direction":{"type":"string"},"receiveAmount":{"type":"string"}},"additionalProperties":false},"title":"Validate swap inputs","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"plan_swap","displayName":"Validate swap inputs"},{"name":"get_capabilities","description":"Optional. Chains, limits (provider minimum, USD), quote window, idempotency, validation rules, polling and the flow.","inputSchema":{"type":"object","properties":{"detail":{"enum":["lean","full"],"type":"string"}},"additionalProperties":false},"title":"Swapper capabilities","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_capabilities","displayName":"Swapper capabilities"},{"name":"create_support_ticket","description":"Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys.","inputSchema":{"type":"object","required":["message"],"properties":{"detail":{"enum":["lean","full"],"type":"string"},"message":{"type":"string","maxLength":2000,"minLength":3},"orderId":{"type":"string"},"category":{"type":"string"},"ticketId":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$"},"sessionId":{"type":"string"},"replyToken":{"type":"string","pattern":"^rt_[a-f0-9]{48}$"},"walletAddress":{"type":"string"}},"additionalProperties":false},"title":"Open support ticket","logicalName":"create_support_ticket","displayName":"Open support ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_support_ticket","description":"Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.","inputSchema":{"type":"object","required":["ticketId","replyToken"],"properties":{"detail":{"enum":["lean","full"],"type":"string"},"ticketId":{"type":"string","pattern":"^[0-9a-fA-F-]{36}$"},"replyToken":{"type":"string","pattern":"^rt_[a-f0-9]{48}$"}},"additionalProperties":false},"title":"Read support replies","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_support_ticket","displayName":"Read support replies"},{"name":"submit_feedback","description":"Optional, after a swap: a rating 1-5 and a comment. The published average counts one rating per completed Swapper order; a comment marked publishable is shown after operator review.","inputSchema":{"type":"object","required":["rating"],"properties":{"detail":{"enum":["lean","full"],"type":"string"},"rating":{"type":"integer","maximum":5,"minimum":1},"comment":{"type":"string","maxLength":600},"orderId":{"type":"string"},"agentName":{"type":"string","maxLength":64},"publishable":{"type":"boolean"}},"additionalProperties":false},"title":"Rate a swap","logicalName":"submit_feedback","displayName":"Rate a swap","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"request_agent_key","description":"Optional. Issues a key that identifies this agent; quotes made with it (get_quote agentKey) and their orders use the agent fee (swapper://trust). The operator sees the name and contact given.","inputSchema":{"type":"object","properties":{"detail":{"enum":["lean","full"],"type":"string"},"contact":{"type":"string","maxLength":200},"purpose":{"type":"string","maxLength":500},"agentName":{"type":"string","maxLength":64,"minLength":2}},"additionalProperties":false},"title":"Register agent key","logicalName":"request_agent_key","displayName":"Register agent key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Swapper&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AueG1ydG91c2RjLnh5ei9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Swapper%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.xmrtousdc.xyz%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Swapper%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.xmrtousdc.xyz%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Swapper&connectorUrl=https%3A%2F%2Fmcp.xmrtousdc.xyz%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Swapper\" --url \"https://mcp.xmrtousdc.xyz/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/xmrtousdc-mcp-fb106cba7b","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/xmrtousdc-mcp-fb106cba7b/tools/{tool}","mcpServerUrl":"https://mcp.xmrtousdc.xyz/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/xmrtousdc-mcp-fb106cba7b?live=1"}