{"id":109357,"name":"Swapper","description":"Swap Monero (XMR) <-> native USDC on Arbitrum One. No account or API key required. Swapper collects no identity documents; the provider may apply its own compliance screening.","card_url":"https://xmrtousdc.xyz/.well-known/agent-card.json","endpoint":"https://xmrtousdc.xyz/a2a","protocol_version":"1.0","first_seen":"2026-10-14T18:02:38.027037+00:00","last_verified":"2026-10-14T18:02:38.027037+00:00","card":{"url":"https://xmrtousdc.xyz/a2a","name":"Swapper","skills":[{"id":"get_quote","name":"Get XMR/USDC swap quote","tags":["monero","xmr","usdc","arbitrum-one","swap","quote"],"examples":["{\"skill\":\"get_quote\",\"arguments\":{\"direction\":\"x2u\",\"amount\":\"0.1\"}}","{\"skill\":\"get_quote\",\"arguments\":{\"direction\":\"u2x\",\"receiveAmount\":\"1\"}}","quote 0.1 XMR to USDC","buy 1 XMR"],"inputModes":["application/json","text/plain"],"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.","outputModes":["application/json","text/plain"]},{"id":"create_swap","name":"Create XMR/USDC swap order","tags":["monero","xmr","usdc","arbitrum-one","swap","order"],"examples":["{\"skill\":\"create_swap\",\"arguments\":{\"quoteId\":\"q_<32 hex>\",\"to\":\"0xYourArbitrumOneAddress\"}}","create swap q_<32 hex> to 0xYourArbitrumOneAddress"],"inputModes":["application/json","text/plain"],"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.","outputModes":["application/json","text/plain"]},{"id":"get_swap_status","name":"Get swap status","tags":["monero","xmr","usdc","arbitrum-one","swap","status"],"examples":["{\"skill\":\"get_swap_status\",\"arguments\":{\"orderId\":\"ord_...\",\"waitSec\":25,\"sinceState\":\"waiting_for_funding\"}}","status ord_..."],"inputModes":["application/json","text/plain"],"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.","outputModes":["application/json","text/plain"]},{"id":"get_funding_options","name":"How to fund a swap","tags":["monero","xmr","usdc","arbitrum-one","swap","funding"],"examples":["{\"skill\":\"get_funding_options\",\"arguments\":{\"direction\":\"u2x\",\"from\":{\"chain\":\"ethereum\",\"asset\":\"USDC\"}}}","how do I fund a USDC to XMR swap"],"inputModes":["application/json","text/plain"],"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).","outputModes":["application/json","text/plain"]},{"id":"request_agent_key","name":"Register agent key","tags":["monero","xmr","usdc","arbitrum-one","swap","agent-key"],"examples":["{\"skill\":\"request_agent_key\",\"arguments\":{\"agentName\":\"example-agent\"}}"],"inputModes":["application/json","text/plain"],"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.","outputModes":["application/json","text/plain"]},{"id":"submit_feedback","name":"Rate a swap","tags":["monero","xmr","usdc","arbitrum-one","swap","feedback"],"examples":["{\"skill\":\"submit_feedback\",\"arguments\":{\"orderId\":\"ord_...\",\"rating\":4}}"],"inputModes":["application/json","text/plain"],"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.","outputModes":["application/json","text/plain"]},{"id":"create_support_ticket","name":"Open support ticket","tags":["monero","xmr","usdc","arbitrum-one","swap","support"],"examples":["{\"skill\":\"create_support_ticket\",\"arguments\":{\"message\":\"The order shows terminal_failure after the deposit was sent.\",\"orderId\":\"ord_...\"}}"],"inputModes":["application/json","text/plain"],"description":"Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys.","outputModes":["application/json","text/plain"]},{"id":"get_support_ticket","name":"Read support replies","tags":["monero","xmr","usdc","arbitrum-one","swap","support"],"examples":["{\"skill\":\"get_support_ticket\",\"arguments\":{\"ticketId\":\"<ticket uuid>\",\"replyToken\":\"rt_...\"}}"],"inputModes":["application/json","text/plain"],"description":"Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.","outputModes":["application/json","text/plain"]}],"iconUrl":"https://xmrtousdc.xyz/icon-512.png","version":"0.6.0","provider":{"url":"https://xmrtousdc.xyz","organization":"Swapper"},"signatures":[{"protected":"eyJhbGciOiJFZERTQSIsInR5cCI6IkpPU0UiLCJraWQiOiJwcm9kLWVkMjU1MTktMSIsImprdSI6Imh0dHBzOi8veG1ydG91c2RjLnh5ei8ud2VsbC1rbm93bi9qd2tzLmpzb24ifQ","signature":"6fc7GqbGI2jjbvCI0e-L0hEq0T0Bk5Bosv8Xz4NwQ5QIcyt8mbe6enUzx3-zu8jAg7HORcUv19Y2xqRLdHDJBA"}],"description":"Swap Monero (XMR) <-> native USDC on Arbitrum One. No account or API key required. Swapper collects no identity documents; the provider may apply its own compliance screening.","capabilities":{"streaming":false,"extendedAgentCard":false,"pushNotifications":false},"protocolVersion":"0.3.0","documentationUrl":"https://docs.xmrtousdc.xyz/","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"preferredTransport":"JSONRPC","supportedInterfaces":[{"url":"https://xmrtousdc.xyz/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://xmrtousdc.xyz/a2a","protocolBinding":"JSONRPC","protocolVersion":"0.3"}]},"signature_status":"verified","signature_detail":"Card signature matches a key at its advertised or same-host key source","signature_key_url":"https://xmrtousdc.xyz/.well-known/jwks.json","signature_checked_at":"2026-10-14T18:02:38.027037+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Agent Tools Catalog","source_url":"https://agent-tools.cloud","last_check":{"checked_at":"2026-10-14T18:02:38.027037+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://xmrtousdc.xyz/.well-known/agent-card.json"],"also_observed_in":[{"source_name":"Agent Tools Catalog","source_url":"https://agent-tools.cloud","last_seen":"2026-10-14T17:56:48.832685+00:00"}],"skills":[{"skill_id":"create_swap","name":"Create XMR/USDC swap order","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.","tags":["monero","xmr","usdc","arbitrum-one","swap","order"],"quality_warning":false},{"skill_id":"get_quote","name":"Get XMR/USDC swap 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.","tags":["monero","xmr","usdc","arbitrum-one","swap","quote"],"quality_warning":false},{"skill_id":"get_swap_status","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.","tags":["monero","xmr","usdc","arbitrum-one","swap","status"],"quality_warning":false},{"skill_id":"get_funding_options","name":"How to fund a swap","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).","tags":["monero","xmr","usdc","arbitrum-one","swap","funding"],"quality_warning":false},{"skill_id":"create_support_ticket","name":"Open 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.","tags":["monero","xmr","usdc","arbitrum-one","swap","support"],"quality_warning":false},{"skill_id":"submit_feedback","name":"Rate a swap","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.","tags":["monero","xmr","usdc","arbitrum-one","swap","feedback"],"quality_warning":false},{"skill_id":"get_support_ticket","name":"Read support replies","description":"Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.","tags":["monero","xmr","usdc","arbitrum-one","swap","support"],"quality_warning":false},{"skill_id":"request_agent_key","name":"Register 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.","tags":["monero","xmr","usdc","arbitrum-one","swap","agent-key"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":1,"passed":1},"recent_checks":[{"card_url":"https://xmrtousdc.xyz/.well-known/agent-card.json","checked_at":"2026-10-14T18:02:38.027037+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":null,"protocol_check":{"checked_at":"2026-10-14T18:02:38.027037+00:00","state":"a2a_response","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup"},"x402_price_check":null,"events":[],"relationships":[],"verification":{"agent_card_url":"https://xmrtousdc.xyz/.well-known/agent-card.json","last_successful_card_check":"2026-10-14T18:02:38.027037+00:00","latest_card_check":{"checked_at":"2026-10-14T18:02:38.027037+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"verified","signature_checked_at":"2026-10-14T18:02:38.027037+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":null,"endpoint_tls_reachable":null,"protocol_check_state":"a2a_response","protocol_checked_at":"2026-10-14T18:02:38.027037+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}