accueil / serveurs / IA & Mémoire / xyz.xmrtousdc/monero-swap
xyz.xmrtousdc/monero-swap
serveur MCP (Model Context Protocol) · swapper-mcp-server 0.6.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que xyz.xmrtousdc/monero-swap est sûr ?
Au dernier audit MCP Hub, le serveur MCP « xyz.xmrtousdc/monero-swap » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 11 outils
- create_support_ticket≈ 439 tokens
Stuck or failed swap, or a question: Support answers (get_support_ticket). Follow up with ticketId + replyToken. Never seed phrases or keys.
Paramètres, retour & exemple (8)
Paramètresdetail· string · optionnel · lean | fullmessage· string · requis
What happened (sent what, when, what the user sees), or your question.orderId· string · optionnel
ord_... of the affected order.category· string · optionnel
Short topic, e.g. "stuck", "refund". Default "agent".ticketId· string · optionnel
Follow-up: an existing ticket.sessionId· string · optionnel
Session UUID, if known.replyToken· string · optionnel
With ticketId.walletAddress· string · optionnel
Public address involved (sending wallet or destination).
Exemple d'appel{"name": "create_support_ticket", "arguments": {"message": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "ticketId": "texte", "operation": "texte", "replyToken": "texte", "userMessage": "texte"}} - create_swap≈ 592 tokens
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.
Paramètres, retour & exemple (5)
Paramètresto· string · optionnel
Destination, only if the quote had none (next.missing). Never guess.detail· string · optionnel · lean | fullquoteId· string · requis
From get_quote's next.arguments.idempotencyKey· string · optionnel
Optional; default q_<quoteId>. Reuse on every retry. A custom key: a fresh random UUID per intent.quoteIntentDigest· string · optionnel
From next.arguments: create fails if the quote's terms differ.
Exemple d'appel{"name": "create_swap", "arguments": {"quoteId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "queue": {}, "state": "texte", "deposit": {}, "orderId": "texte", "payable": true, "replayed": true, "trackUrl": "texte", "fromQueue": true}} - get_capabilities≈ 227 tokens
Optional. Chains, limits (provider minimum, USD), quote window, idempotency, validation rules, polling and the flow.
Paramètres, retour & exemple (1)
Paramètresdetail· string · optionnel · lean | full
Exemple d'appel{"name": "get_capabilities", "arguments": {"detail": "lean"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "operation": "texte", "userMessage": "texte", "contractVersion": "texte"}} - get_funding_options≈ 437 tokens
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).
Paramètres, retour & exemple (4)
Paramètresfrom· object · optionnel
Where the funds are now.amount· string · optionnel
Send amount from a quote, if known.detail· string · optionnel · lean | fulldirection· string · optionnel · u2x | x2u
u2x (default): the user sends USDC. x2u: XMR.
Exemple d'appel{"name": "get_funding_options", "arguments": {"from": {}, "amount": "texte", "detail": "lean", "direction": "u2x"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "route": {}, "state": "texte", "matched": true, "checklist": [], "direction": "texte", "operation": "texte", "userMessage": "texte"}} - get_quote≈ 724 tokens
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.
Paramètres, retour & exemple (9)
Paramètresto· string · optionnel
Destination from the user: x2u an Arbitrum One 0x address, u2x a Monero address. Never guess.basis· string · optionnel · estimate | minimum
receiveAmount met by the estimate (default) or the provider minimum (if published).chain· string · optionnel
Default arbitrum (42161).amount· string · optionnel
What the user SENDS (x2u: XMR, u2x: USDC). Digits and one dot; no commas or units.detail· string · optionnel · lean | fullagentKey· string · optionnel
Optional key from request_agent_key.direction· string · optionnel · x2u | u2x
Required. u2x: send USDC, get XMR. x2u: send XMR, get USDC.requoteOf· string · optionnel
Re-quote this quoteId's stored parameters; pass it alone.receiveAmount· string · optionnel
What the user wants to RECEIVE (u2x: XMR, x2u: USDC); needs direction.
Exemple d'appel{"name": "get_quote", "arguments": {"to": "texte", "basis": "estimate", "chain": "texte", "amount": "texte", "detail": "lean", "agentKey": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "delta": {}, "error": {}, "quote": {}, "state": "texte", "target": {}, "quoteId": "texte", "agentKey": {}, "direction": "texte", "operation": "texte"}} - get_support_ticket≈ 310 tokens
Support's answer on your ticket: status, awaiting, thread. Answers take minutes to hours.
Paramètres, retour & exemple (3)
Paramètresdetail· string · optionnel · lean | fullticketId· string · requisreplyToken· string · requis
Exemple d'appel{"name": "get_support_ticket", "arguments": {"ticketId": "texte", "replyToken": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "status": "texte", "thread": [], "replies": 1, "awaiting": "texte", "ticketId": "texte", "operation": "texte", "userMessage": "texte"}} - get_swap_status≈ 626 tokens
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.
Paramètres, retour & exemple (6)
Paramètresdetail· string · optionnel · lean | fullverify· string · optionnel
Destination address (optional extra check).orderId· string · requis
From create_swap or list_swaps.payment· string · optionnel
Unsigned only: tx JSON {to,data,value,chainId}, an ethereum:/monero: URI, calldata or an unsigned raw tx. Never a signed transaction.waitSec· integer · optionnel
Long-poll seconds for a change from sinceState (max 25; more is capped).sinceState· string · optionnel · waiting_for_funding | deposit_detected | swap_processing | refunding | completed | terminal_failure | unknown
State from your previous call.
Exemple d'appel{"name": "get_swap_status", "arguments": {"orderId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "status": "texte", "waited": {}, "deposit": {}, "orderId": "texte", "outcome": "texte", "payable": true, "evidence": {}}} - list_swaps≈ 350 tokens
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).
Paramètres, retour & exemple (3)
Paramètresdetail· string · optionnel · lean | fullsessionId· string · optionnel
Session UUID, instead of idempotencyKey.idempotencyKey· string · optionnel
The key create_swap used (default q_<quoteId>).
Exemple d'appel{"name": "list_swaps", "arguments": {"detail": "lean", "sessionId": "texte", "idempotencyKey": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "note": "texte", "error": {}, "state": "texte", "lookup": "texte", "orders": [], "payable": true, "operation": "texte", "userMessage": "texte", "payableReason": "texte"}} - plan_swap≈ 368 tokens
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.
Paramètres, retour & exemple (5)
Paramètresto· string · optionnel
Destination from the user: x2u an Arbitrum One 0x address, u2x a Monero address. Never guess.amount· string · optionnel
What the user sends.detail· string · optionnel · lean | fulldirection· string · optionnel
u2x or x2u, as the user said it.receiveAmount· string · optionnel
What the user wants to receive.
Exemple d'appel{"name": "plan_swap", "arguments": {"to": "texte", "amount": "texte", "detail": "lean", "direction": "texte", "receiveAmount": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "question": {}, "operation": "texte", "userMessage": "texte", "missingInputs": [], "validationErrors": []}} - request_agent_key≈ 367 tokens
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.
Paramètres, retour & exemple (4)
Paramètresdetail· string · optionnel · lean | fullcontact· string · optionnel
Optional; stored, shown to the operator.purpose· string · optionnel
Optional; stored, shown to the operator.agentName· string · optionnel
Default: the MCP client's name (clientInfo).
Exemple d'appel{"name": "request_agent_key", "arguments": {"detail": "lean", "contact": "texte", "purpose": "texte", "agentName": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "keyId": "texte", "state": "texte", "agentKey": "texte", "operation": "texte", "feePercent": 1, "userMessage": "texte", "standardFeePercent": 1}} - submit_feedback≈ 328 tokens
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.
Paramètres, retour & exemple (6)
Paramètresdetail· string · optionnel · lean | fullrating· integer · requiscomment· string · optionnelorderId· string · optionnelagentName· string · optionnelpublishable· boolean · optionnel
May other agents read the comment?
Exemple d'appel{"name": "submit_feedback", "arguments": {"rating": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"ok": true, "data": {}, "next": {}, "error": {}, "state": "texte", "operation": "texte", "feedbackId": "texte", "userMessage": "texte", "verifiedSwap": true}}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».