ChangeNOW
by changenow.io · remote · no sign-in to list tools · v2.1.1 · published by io.changenow
Quote, create and track cross-chain crypto swaps. Non-custodial exchange, no account, no KYC.
7 tools: 3 do something that can't be undone and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone3Claude Code: ask: see these tools
- Changes things0Claude Code: ask
- Only reads4Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http crypto-swap https://mcp.changenow.io/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnquote_swap
The server marks "quote_swap" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
- Warnswap_link
The server marks "swap_link" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "swap_link" says "link": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
7 tools
Can't be undone 3Claude Code: ask
create_swapCreate a real swap order and return the deposit address the user has to send funds to.No findings
Why it is in this group
- The name "create_swap" says "create": a word for a change.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it Create a real swap order and return the deposit address the user has to send funds to. This call moves no money by itself, but the order is real: it exists in support, it can expire, and a fixed rate is locked against it. Quote the swap first, validate the recipient address, and confirm the amount and the address with the user before calling this. If the user has not explicitly approved both, use swap_link instead and let them confirm on the page. The answer names who executes the order, and that has to be relayed: some orders are routed to a partner aggregator rather than ChangeNOW.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
quote_swapAsk what a swap would give, in either direction: pass amount_from to learn what the user receives, or amount_to to learn what the user must send.1 finding
Why it is in this group
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "quote_swap" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it Ask what a swap would give, in either direction: pass amount_from to learn what the user receives, or amount_to to learn what the user must send. Returns the rate, the pair minimum and maximum, who would execute the order, and the warnings to relay. With rate_type "fixed" it also returns the rate_id that create_swap needs; that lock lasts about two minutes, so quote again right before creating the order. A fixed rate is not offered on every pair and the tool says so rather than quietly falling back to a float rate. Nothing is created and no funds move.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
swap_linkBuild a changenow.io link with the pair, the amount, the recipient address and the memo already filled in, so the user checks the numbers on the real page and presses Confirm thems…1 finding
Why it is in this group
- The name "swap_link" says "link": a word for a change.
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "swap_link" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "swap_link" says "link": a word for a change.
Description, as the server wrote it Build a changenow.io link with the pair, the amount, the recipient address and the memo already filled in, so the user checks the numbers on the real page and presses Confirm themselves. Opening the link creates nothing. This is the recommended way to finish a swap: the user sees the rate and the address with their own eyes, which no amount of care in a chat transcript can replace. Use create_swap instead only when the user has explicitly approved this exact amount and address.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 4Claude Code: allow
check_swap_statusFollow an existing order by id: where it stands, what the deposit and payout amounts turned out to be, the transaction hashes, and a plain-language explanation of what the current …No findings
Why it is in this group
- The name "check_swap_status" says "status": a word for reading.
Description, as the server wrote it Follow an existing order by id: where it stands, what the deposit and payout amounts turned out to be, the transaction hashes, and a plain-language explanation of what the current stage means and what happens next. Use it after create_swap, and again whenever the user asks where their swap is.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_assetEverything needed to build a swap for one asset: the canonical id, the legacy ticker used in website links, decimals, whether a memo is required and what the receiving side calls i…No findings
Why it is in this group
- The name "get_asset" says "get": a word for reading.
Description, as the server wrote it Everything needed to build a swap for one asset: the canonical id, the legacy ticker used in website links, decimals, whether a memo is required and what the receiving side calls it, the address format, the token contract and the warnings to relay to the user. Minimum and maximum amounts are not here because they belong to the pair, not to the asset: get them from quote_swap.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_assetsFind the assets ChangeNOW can exchange and turn what the user said into a canonical asset id.No findings
Why it is in this group
- The name "list_assets" says "list": a word for reading.
Description, as the server wrote it Find the assets ChangeNOW can exchange and turn what the user said into a canonical asset id. Search by ticker, name or network, filter by network, by fiat or crypto, and by whether a fixed rate is possible. Always call this before quoting: the same ticker exists on several networks and only the canonical id "ticker.network" identifies one of them. When has_more is false the response is the complete answer and no paging is needed.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
validate_addressCheck a recipient address, and its memo when the asset needs one, against the format the network requires, before any order exists.No findings
Why it is in this group
- The name "validate_address" says "validate": a word for reading.
Description, as the server wrote it Check a recipient address, and its memo when the asset needs one, against the format the network requires, before any order exists. Call this on every address the user gives. A valid-looking address on the wrong network is the one mistake in a swap that destroys the funds with no way back, so when the address belongs to another network the answer names that network instead of just refusing. A few assets carry no address format in the catalogue; for those the answer says the address could not be checked rather than calling it valid.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 2.1.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http crypto-swap https://mcp.changenow.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__crypto-swap__list_assets",
"mcp__crypto-swap__get_asset",
"mcp__crypto-swap__validate_address",
"mcp__crypto-swap__check_swap_status"
],
"ask": [
"mcp__crypto-swap__quote_swap",
"mcp__crypto-swap__swap_link",
"mcp__crypto-swap__create_swap"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as crypto-swap. Review it before you use it.