Compare live rates across instant crypto exchanges and create swaps at the best one. No API key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create the swap and get the deposit address. No funds move here: the user then sends amount_from of from_asset to deposit_address (with deposit_extra_id as the memo, when present), as instructions says. Follow it with get_swap.
The user's payout address for to_asset, as they gave it.
Asset the user receives.
Asset the user sends.
The user's email, when the chosen quote has email_required.
Amount of from_asset the user sends. Pass this or amount_to.
The chosen quote's rate_id (fixed rate).
Memo/tag for the payout address, if the user's wallet needs one (XRP, XLM...).
The chosen quote's provider. Without it: the best quote now, then the next best, among exchanges without a notice.
Exact amount of to_asset to receive, instead of amount (fixed rate only): the result's amount_from is what the user must send.
'float' or 'fixed'. Default float, or fixed with amount_to.
Network of to_asset, when its ticker is on several.
Network of from_asset, when its ticker is on several.
The user's from_asset address, for a refund if the swap fails.
A UUID made once per swap. A retry with the same one and the same arguments returns the swap already made.
Memo/tag for the refund address.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://api.swaplume.com/mcp
Create the swap and get the deposit address. No funds move here: the user then sends amount_from of from_asset to deposit_address (with deposit_extra_id as the memo, when present), as instructions says. Follow it with get_swap.
| Argument | Type | Description |
|---|---|---|
| string | The user's email, when the chosen quote has email_required. | |
| amount | string | Amount of from_asset the user sends. Pass this or amount_to. |
| address* | string | The user's payout address for to_asset, as they gave it. |
| rate_id | string | The chosen quote's rate_id (fixed rate). |
| extra_id | string | Memo/tag for the payout address, if the user's wallet needs one (XRP, XLM...). |
| provider | string | The chosen quote's provider. Without it: the best quote now, then the next best, among exchanges without a notice. |
| to_asset* | string | Asset the user receives. |
| amount_to | string | Exact amount of to_asset to receive, instead of amount (fixed rate only): the result's amount_from is what the user must send. |
| rate_type | any | 'float' or 'fixed'. Default float, or fixed with amount_to. |
| from_asset* | string | Asset the user sends. |
| to_network | string | Network of to_asset, when its ticker is on several. |
| from_network | string | Network of from_asset, when its ticker is on several. |
| refund_address | string | The user's from_asset address, for a refund if the swap fails. |
| idempotency_key | string | A UUID made once per swap. A retry with the same one and the same arguments returns the swap already made. |
| refund_extra_id | string | Memo/tag for the refund address. |
{
"type": "object",
"$defs": {
"RateType": {
"enum": [
"float",
"fixed"
],
"type": "string",
"description": "`float`: the market rate when the deposit arrives. `fixed`: what you receive is locked when the swap is\ncreated, usually at a slightly worse rate."
}
},
"required": [
"from_asset",
"to_asset",
"address"
],
"properties": {
"email": {
"type": "string",
"maxLength": 254,
"description": "The user's email, when the chosen quote has email_required."
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"examples": [
"0.1"
],
"description": "Amount of from_asset the user sends. Pass this or amount_to."
},
"address": {
"type": "string",
"maxLength": 256,
"minLength": 4,
"description": "The user's payout address for to_asset, as they gave it."
},
"rate_id": {
"type": "string",
"maxLength": 1024,
"description": "The chosen quote's rate_id (fixed rate)."
},
"extra_id": {
"type": "string",
"maxLength": 128,
"description": "Memo/tag for the payout address, if the user's wallet needs one (XRP, XLM...)."
},
"provider": {
"type": "string",
"maxLength": 32,
"description": "The chosen quote's provider. Without it: the best quote now, then the next best, among exchanges without a notice."
},
"to_asset": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Asset the user receives."
},
"amount_to": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"examples": [
"0.1"
],
"description": "Exact amount of to_asset to receive, instead of amount (fixed rate only): the result's amount_from is what the user must send."
},
"rate_type": {
"$ref": "#/$defs/RateType",
"description": "'float' or 'fixed'. Default float, or fixed with amount_to."
},
"from_asset": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Asset the user sends."
},
"to_network": {
"type": "string",
"maxLength": 64,
"description": "Network of to_asset, when its ticker is on several."
},
"from_network": {
"type": "string",
"maxLength": 64,
"description": "Network of from_asset, when its ticker is on several."
},
"refund_address": {
"type": "string",
"maxLength": 256,
"description": "The user's from_asset address, for a refund if the swap fails."
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"description": "A UUID made once per swap. A retry with the same one and the same arguments returns the swap already made."
},
"refund_extra_id": {
"type": "string",
"maxLength": 128,
"description": "Memo/tag for the refund address."
}
}
}Compare every exchange's offer for a swap, best first. In each quote, amount_to is what the user receives after all fees. With amount_to given instead of amount, quotes are sorted by amount_from, what the user sends. errors lists the exchanges that can't, and why (with their min/max when the amount is out of range); with no quote at all, limits has the widest min/max: suggest an amount inside it. savings_pct: how much more the best quote gives than the worst. Ask again after refresh_after seconds, not sooner.
| Argument | Type | Description |
|---|---|---|
| amount | string | Amount of from_asset to send. Pass this or amount_to. |
| to_asset* | string | Asset to receive, as from_asset. |
| amount_to | string | Exact amount of to_asset to receive, instead of amount (fixed rate only). |
| providers | array | Only ask these exchanges (ids from list_providers). |
| rate_type | any | 'float': the market rate when the deposit arrives, usually more. 'fixed': an amount guaranteed for a short time. Default float, or fixed with amount_to. |
| from_asset* | string | Asset to send: 'btc', 'usdt:trx', or a ticker with from_network. |
| to_network |
A swap's live status: waiting (for the deposit), confirming, exchanging, sending, finished, failed, refunding, refunded, expired, verifying (held for an ID check), action_required or unknown. instructions is the next step, for the user. Read it again after poll_after seconds, not sooner (each read asks the exchange), until is_final.
| Argument | Type | Description |
|---|---|---|
| swap_id* | string | The id create_swap returned ('sw_...'). |
{
"type": "object",
"required": [
"swap_id"
],
"properties": {
"swap_id": {
"type": "string",
"pattern": "^sw_[a-z0-9]+$",
"maxLength": 40,
"minLength": 4,
"description": "The id create_swap returned ('sw_...')."
}
}
}Find assets and their networks. Each id ('ticker:network') works as from_asset or to_asset. contract: the token's address; extra_id_name: the asset uses a memo/tag.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many matches to list (count has the total). |
| search | string | Part of a ticker or name ('usd', 'doge'). |
| ticker | string | Exact ticker ('usdt'): lists every network it's on. |
| network | string | Network code or name ('trx', 'tron', 'solana'). |
| provider | string | Only assets this exchange supports. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"minimum": 1,
"description": "How many matches to list (count has the total)."
},
"search": {
"type": "string",
"maxLength": 64,
"description": "Part of a ticker or name ('usd', 'doge')."
},
"ticker": {
"type": "string",
"maxLength": 32,
"description": "Exact ticker ('usdt'): lists every network it's on."
},
"network": {
"type": "string",
"maxLength": 64,
"description": "Network code or name ('trx', 'tron', 'solana')."
},
"provider": {
"type": "string",
"maxLength": 32,
"description": "Only assets this exchange supports."
}
}
}The exchanges compared, with what each asks of a swap (email_required, refund_address_required...), kyc, ip_shared, ip_kept and notice.
No arguments.
{
"type": "object",
"properties": {}
}Check a payout or refund address (create_swap runs the same check). valid: true; false: show reason to the user and ask again; null: this network's format isn't checked here. extra_id_name: the asset uses a memo/tag.
| Argument | Type | Description |
|---|---|---|
| asset* | string | Asset the address receives: 'usdt:trx', 'btc'... |
| address* | string | The address, as the user gave it. |
| network | string | Network of asset, when its ticker is on several. |
{
"type": "object",
"required": [
"asset",
"address"
],
"properties": {
"asset": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Asset the address receives: 'usdt:trx', 'btc'..."
},
"address": {
"type": "string",
"maxLength": 256,
"description": "The address, as the user gave it."
},
"network": {
"type": "string",
"maxLength": 64,
"description": "Network of asset, when its ticker is on several."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
| string |
| Network of to_asset, when its ticker is on several. |
| from_network | string | Network of from_asset, when its ticker is on several: a code or a name ('trx', 'tron', 'erc20'). |
{
"type": "object",
"$defs": {
"RateType": {
"enum": [
"float",
"fixed"
],
"type": "string",
"description": "`float`: the market rate when the deposit arrives. `fixed`: what you receive is locked when the swap is\ncreated, usually at a slightly worse rate."
}
},
"required": [
"from_asset",
"to_asset"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"examples": [
"0.1"
],
"description": "Amount of from_asset to send. Pass this or amount_to."
},
"to_asset": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Asset to receive, as from_asset."
},
"amount_to": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"examples": [
"0.1"
],
"description": "Exact amount of to_asset to receive, instead of amount (fixed rate only)."
},
"providers": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Only ask these exchanges (ids from list_providers)."
},
"rate_type": {
"$ref": "#/$defs/RateType",
"description": "'float': the market rate when the deposit arrives, usually more. 'fixed': an amount guaranteed for a short time. Default float, or fixed with amount_to."
},
"from_asset": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Asset to send: 'btc', 'usdt:trx', or a ticker with from_network."
},
"to_network": {
"type": "string",
"maxLength": 64,
"description": "Network of to_asset, when its ticker is on several."
},
"from_network": {
"type": "string",
"maxLength": 64,
"description": "Network of from_asset, when its ticker is on several: a code or a name ('trx', 'tron', 'erc20')."
}
}
}