Search / xyz.xmrtousdc/monero-swap
Swapper - XMR to USDC swaps
R0· no sign-inSwap Monero (XMR) <-> native USDC on Arbitrum One. No account or API key required. For AI agents.
v0.6.0 · active · website · descriptor JSON · versions
Search / xyz.xmrtousdc/monero-swap
R0· no sign-inSwap Monero (XMR) <-> native USDC on Arbitrum One. No account or API key required. For AI agents.
v0.6.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"monero-swap": {
"type": "http",
"url": "https://xmrtousdc.xyz/mcp"
}
}
}claude mcp add --transport http monero-swap https://xmrtousdc.xyz/mcp[mcp_servers.monero-swap]
url = "https://xmrtousdc.xyz/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"monero-swap": {
"type": "remote",
"url": "https://xmrtousdc.xyz/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"monero-swap": {
"type": "http",
"url": "https://xmrtousdc.xyz/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=monero-swap&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8veG1ydG91c2RjLnh5ei9tY3AifQ%3D%3D"
}{
"servers": {
"monero-swap": {
"type": "http",
"url": "https://xmrtousdc.xyz/mcp"
}
}
}{
"mcpServers": {
"monero-swap": {
"httpUrl": "https://xmrtousdc.xyz/mcp"
}
}
}extensions:
"monero-swap":
enabled: true
name: "monero-swap"
type: streamable_http
uri: "https://xmrtousdc.xyz/mcp"
timeout: 300
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltool list is cacheable (ttlMs 600000)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations11 of 11 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 2,486 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes7 tool changes in 30 daysstability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagerequest_agent_keyaddedOptional. 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.
submit_feedbackaddedOptional, 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.
get_support_ticketaddedSupport's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.
create_support_ticketchangeddescription, input schema, output schemameaning changedFor a failed or stuck swap: orderId and what happened; never seed phrases or private keys. Returns ticketId; no tool reads replies (follow up at [email protected]).
Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys.
get_swap_statuschangeddescription, input schemaStep 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.
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.
create_swapchangeddescription, output schemaStep 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.
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.
get_quotechangeddescription, input schema, output schemaStep 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.
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.
Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-97% +updated-7d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://xmrtousdc.xyz/mcp streamable-http | none | yes | 97% | 857 ms | 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 | 2026-10-21 |
create_support_ticket | Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys. |
create_swap | 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. |
get_capabilitiesread-only | Optional. Chains, limits (provider minimum, USD), quote window, idempotency, validation rules, polling and the flow. |
get_funding_optionsread-only | 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). |
get_quoteread-only | 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. |
get_support_ticketread-only | Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours. |
get_swap_statusread-only | 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. |
list_swapsread-only | 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). |
plan_swapread-only | 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. |
request_agent_key | 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. |
submit_feedback | 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. |
Schemas: list_tools.
{
"name": "xyz.xmrtousdc/monero-swap",
"_meta": {
"io.modelcontextprotocol.registry/publisher-provided": {
"xyz.xmrtousdc/transparency": {
"docs": "https://xmrtousdc.xyz/mcp#verify",
"attestationKeys": [
{
"x": "AYtBHQ6I3i5LrC5ycMA3jdru5L3p8itLUAOSm32u8mU",
"alg": "EdDSA",
"crv": "Ed25519",
"kid": "att-2026-10",
"purpose": "swapper.order-attestation.v1",
"thumbprint": "5yWF-doLdALe_RYnlor-yMpnZp_qft-8XYDJ03hbi84"
}
]
}
}
},
"icons": [
{
"src": "https://xmrtousdc.xyz/favicon.svg",
"sizes": [
"any"
],
"mimeType": "image/svg+xml"
},
{
"src": "https://xmrtousdc.xyz/icon-512.png",
"sizes": [
"512x512"
],
"mimeType": "image/png"
},
{
"src": "https://xmrtousdc.xyz/icon-192.png",
"sizes": [
"192x192"
],
"mimeType": "image/png"
}
],
"title": "Swapper - XMR to USDC swaps",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://xmrtousdc.xyz/mcp",
"type": "streamable-http"
}
],
"version": "0.6.0",
"websiteUrl": "https://xmrtousdc.xyz",
"description": "Swap Monero (XMR) <-> native USDC on Arbitrum One. No account or API key required. For AI agents."
}