{
  "name": "Sablebolt",
  "description": "Account-free crypto swaps between two addresses: no account, no sign-up, a floating rate, the network fee shown before sending. Over MCP and a REST API (OpenAPI): read-only tools for assets and routes, limits, quotes, address validation, swap status, payment links and signed status notifications, plus create_swap for an agent that controls the sending wallet and pays the payment instruction itself. For a person the swap is created on the page, from their own wallet. There is no A2A task endpoint.",
  "version": "1.0.0",
  "provider": {
    "organization": "Sablebolt",
    "url": "https://sablebolt.io"
  },
  "documentationUrl": "https://sablebolt.io/developers",
  "iconUrl": "https://sablebolt.io/favicon-192.png",
  "supportedInterfaces": [
    {
      "url": "https://api.sablebolt.io/mcp",
      "protocolBinding": "https://modelcontextprotocol.io/specification/2025-06-18/basic/transports",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://sablebolt.io/openapi.json",
      "protocolBinding": "https://spec.openapis.org/oas/v3.1.0",
      "protocolVersion": "1.0"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://sablebolt.io/openapi.json#/webhooks/swap.status",
        "description": "Signed swap.status notifications for a swap id registered through POST /v1/swaps/{id}/notify (HMAC-SHA256 over timestamp.body, X-Sablebolt-Signature); a REST webhook, not an A2A push notification.",
        "required": false
      }
    ]
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/markdown"
  ],
  "skills": [
    {
      "id": "list-routes",
      "name": "List swap routes",
      "description": "Which assets and routes can be swapped right now, with network, confirmations and arrival estimates.",
      "tags": [
        "swap",
        "routes",
        "assets",
        "networks"
      ],
      "examples": [
        "Which coins can I swap USDT on TRON into?",
        "Is XMR available right now?"
      ]
    },
    {
      "id": "get-quote",
      "name": "Get a swap estimate",
      "description": "Estimate what arrives for an amount on a route, including the network fee. Floating rate; the final amount is set when the deposit confirms.",
      "tags": [
        "quote",
        "estimate",
        "rate",
        "fee"
      ],
      "examples": [
        "How much BTC arrives for 500 USDT on TRON?",
        "What is the minimum for ETH to XMR?"
      ]
    },
    {
      "id": "compare-networks",
      "name": "Compare USDT and USDC networks",
      "description": "For a token held on one network, compare arrival time, confirmations, fee token and address format on the other networks.",
      "tags": [
        "usdt",
        "usdc",
        "networks",
        "fees"
      ],
      "examples": [
        "Which USDT network is cheapest to receive on?"
      ]
    },
    {
      "id": "swap-status",
      "name": "Check swap status",
      "description": "Stage, deposit address and both transaction hashes of a swap by its id.",
      "tags": [
        "status",
        "swap",
        "transaction"
      ],
      "examples": [
        "What is the status of swap 1a2b3c4d5e6f7a8b?"
      ]
    },
    {
      "id": "prepare-swap",
      "name": "Prepare a swap for a person",
      "description": "Open https://sablebolt.io/swap/{from}/{to}?amount={amount} (or the MCP tool swap_page_link) with the route and amount preselected; the person pastes both addresses, gets a one-time deposit address and sends from their own wallet.",
      "tags": [
        "swap",
        "handoff",
        "deposit"
      ],
      "examples": [
        "Set up a swap of 0.1 BTC to XMR for me to confirm in my wallet."
      ]
    },
    {
      "id": "execute-swap",
      "name": "Create a swap and pay it from a wallet you control",
      "description": "For agents with their own wallet: POST /v1/swaps (or the MCP tool create_swap) with the route, the amount, the address you send from and the address that receives. The answer carries a payment instruction — the one-time deposit address, the memo if the chain needs one, the exact amount in decimal and base units with the decimals and token contract as listed by the liquidity partner, a wallet URI where a standard exists (BIP-21, ERC-681, Solana Pay, Monero, TON) — and the status URL. Send the deposit from the address you gave, then follow the status or subscribe to swap.status events. Floating rate; no refund address; Sablebolt holds no funds.",
      "tags": [
        "swap",
        "wallet",
        "agent",
        "payment instruction"
      ],
      "examples": [
        "Swap 0.05 BTC from my wallet bc1q… to XMR at 4… and pay the deposit yourself."
      ]
    },
    {
      "id": "payment-link",
      "name": "Create a payment link",
      "description": "Build a link that asks the payer for a set amount of one asset at one address. The payer opens it, pays with whatever they hold and gives the address they send from; the swap delivers the asset to the receiving address at the floating rate. No account on either side.",
      "tags": [
        "payment",
        "invoice",
        "link"
      ],
      "examples": [
        "Make a link so a client can pay me 150 USDT on TRON."
      ]
    },
    {
      "id": "swap-notifications",
      "name": "Subscribe to swap status notifications",
      "description": "Stage, deposit address and both transaction hashes of a swap by its id. A client holding the swap id can register an https URL and a secret to receive a signed swap.status event on every status or stage change instead of polling; the response carries a management token for DELETE and replacement (Authorization: Bearer); events are signed over timestamp.body (X-Sablebolt-Timestamp, X-Sablebolt-Signature: sha256=<hex HMAC-SHA256>; reject a timestamp more than 300 s off); one subscription per swap, 48 h, at most 20 per client IP, kept in memory only, ended by the final status or DELETE.",
      "tags": [
        "webhook",
        "status",
        "notifications"
      ],
      "examples": [
        "Notify my server when swap 1a2b3c4d5e6f7a8b changes stage."
      ]
    }
  ]
}