gasrescue MCP server
OfficialUse this MCP server to rescue stablecoins from gasless wallets on EVM chains, Solana, and Tron by checking balances, quoting sends/swaps, getting signing requests, submitting signatures, and tracking transfers.
Discover supported chains, tokens, gas coins, fees, limits, and gas-drop behavior with
gasrescue_info.Read-only check a wallet across supported chains for stablecoin balances, gas, stuck funds, frozen tokens, and swap availability with
check_wallet.Quote a gasless stablecoin send to another address, returning fees, recipient net amount, and a transfer id with
quote_send.Quote a gasless swap of a stablecoin into the gas coin or another stablecoin, returning expected/minimum output and a transfer id with
quote_swap.Fetch exact signing payloads for EVM typed data, Tron transactions, BNB Chain gas-drop transactions, or Solana transactions with
get_signing_request.Submit signatures, a signed Solana transaction, or gas-drop tx hashes so gasrescue broadcasts, pays gas, and confirms with
submit_signatures; this is irreversible and one-time.Check quote/transfer status, transaction hash, and explorer link with
get_transfer.The README also describes optional EVM signing via
sign_and_submitwhenGASRESCUE_EVM_PRIVATE_KEYis set, with quote-field checks and recipient allowlisting; this tool is not present in the supplied schema.
Enables gasless stablecoin transfers on Ethereum via gasrescue, including checking wallet stablecoin balances and gas, quoting sends and swaps, obtaining signing requests, submitting signatures, and tracking transfer status.
Supports Robinhood Chain as a supported blockchain for gasless stablecoin moves, including wallet checks, quotes, signing requests, signature submission, and transfer tracking.
Enables gasless stablecoin transfers on Solana via gasrescue, including checking wallet stablecoin balances and gas, quoting sends and swaps, obtaining signing requests, submitting signatures, and tracking transfer status.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gasrescue MCP serverSend 50 USDC on Base to 0x1234... from my wallet with no gas"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gasrescue MCP server
Rescues stablecoins from wallets that have no gas, for AI agents, through gasrescue.io. EVM chains, Solana and Tron in one server, no API key and no account.
The wallet holds USDC or USDT but no ETH, POL, AVAX, BNB, SOL, TRX or HYPE, so every transfer fails with "insufficient funds for gas". With this server an agent can find out where the money is stuck, then still send the stablecoins, or swap a few dollars into the gas coin so the wallet works on its own again: the wallet signs, gasrescue sends the transaction and pays the network fee, and its fees come out of the amount.
Chains: Base, Arbitrum, Ethereum, Polygon, Avalanche, BNB Chain, HyperEVM, Robinhood Chain, Solana, Tron. Tokens: USDC, USDC.e, USDT (USDT0 on Arbitrum, Polygon and HyperEVM), USDG, USD1, FDUSD, depending on the chain.
Listed in the official MCP Registry as io.github.gasrescue/gasrescue.
Tools
Tool | What it does |
| Chains, tokens, fees and limits |
| Read-only: stablecoins and gas of an address on every chain, issuer freezes included |
| Quote a send without gas; returns fees, what the recipient gets and a transfer id |
| Quote a swap into the gas coin (ETH, POL, AVAX, SOL, HYPE) without gas |
| What the wallet has to sign for a quote |
| Submit the signatures; gasrescue sends and pays the gas |
| Status and explorer link |
| Only with |
Related MCP server: Arbitrum Bridge MCP Server
Setup
Claude Desktop, Cursor and other MCP clients:
{
"mcpServers": {
"gasrescue": {
"command": "npx",
"args": ["-y", "gasrescue-mcp"]
}
}
}Without a key the server never signs anything. The agent hands the signing request to the user's wallet, or to its own wallet tool, and submits the signatures.
BNB Chain works without a contract, because USDT and USDC there have no signed transfers. The signing
request has kind evm-transactions: call submit_signatures with fund: true and gasrescue sends the
wallet a little BNB, then the wallet sends the two listed transfers itself (fee first) and the agent
reports their hashes with submit_signatures and txs: { fee, transfer }.
Letting the agent sign (EVM only)
"env": {
"GASRESCUE_EVM_PRIVATE_KEY": "0x…",
"GASRESCUE_ALLOWED_RECIPIENTS": "0xYourExchangeDeposit,0xYourOtherWallet"
}Before it signs, sign_and_submit checks every signed field against the quote: the wallet, the chain,
the gasrescue contract, the amount, the fee, the recipient and, on a swap, the minimum output. Tokens with
only a permit (USDT0 and USDC.e on Polygon, USDT on Avalanche) take two signatures, a permit plus the order itself; both are checked. Against gasrescue.io it signs only for the
published gasrescue contracts. With GASRESCUE_ALLOWED_RECIPIENTS set, sends go only to those addresses.
The key stays in this process; only signatures are sent.
Use a wallet that holds only what the agent should be able to move. Transfers on a blockchain are final.
Limits
$2 to $1,000 per transfer, 10 transfers per wallet in 24 hours, Tron at least $10. Service fee 0.5%, at least $0.25, at most $2 per send and $5 per swap, plus the network fee. Every quote shows the exact figures.
More: https://gasrescue.io/agents
License
MIT
Available Tools
7 toolscheck_walletCheck a wallet for stuck stablecoinsARead-onlyIdempotent
Checks one address on every supported chain where it is valid: which stablecoins it holds, its gas balance, whether the stablecoins are stuck (not enough gas to move them) and whether a token is frozen by its issuer. Use it before quote_send or quote_swap to find the chain and token to rescue. A frozen token cannot be moved by any tool here; only the issuer can lift that. Read-only: nothing is signed, sent or stored. Returns { address, chains: [{ key, label, native, tokens: [{ symbol, balance, frozen }], gas, stuck, frozen, canSwap }] }; a chain that did not answer has error: true.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Wallet address: 0x… for EVM chains, base58 for Solana, T… for Tron. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, but the description adds material behavior beyond them: the definition of 'stuck' (not enough gas to move the tokens), the per-chain partial-failure signal ('a chain that did not answer has error: true'), and the hard blocker that frozen tokens are unfixable by any available tool. That is exactly the mutation/failure context an agent needs before chaining into a rescue flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then usage, then the safety note, then the return shape — a sensible order with no filler. The single long paragraph is dense and the inline return signature is syntactically heavy, but no sentence is disposable given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by spelling out the return object and the per-chain error flag. Combined with the stuck/frozen semantics and the pointer to quote_send/quote_swap, an agent has everything needed to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the address-format guidance (0x…, base58, T…) is already in the schema, so the description gets no credit there. It does add one thing the schema does not say: the address is checked on every chain 'where it is valid', implying per-chain applicability filtering rather than a uniform sweep.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Checks one address on every supported chain') and enumerates exactly what it reports: stablecoin holdings, gas balance, stuck status and issuer freeze. An agent can distinguish it from quote_send/quote_swap/get_transfer without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes usage: 'Use it before quote_send or quote_swap to find the chain and token to rescue', naming the downstream siblings and the condition that selects them. It also states the exclusion case — a frozen token cannot be moved by any tool here, only the issuer can lift it — so the agent knows when to stop rather than trying further tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gasrescue_infoSupported chains, tokens and feesARead-onlyIdempotent
Lists what gasrescue supports: the chains, the stablecoins on each, which chains can swap into their gas coin, the fees and the limits. Use gasrescue when a wallet holds USDC, USDT or USDG but no ETH, POL, AVAX, BNB, SOL, TRX or HYPE for the network fee ("insufficient funds for gas"). Call this first to get the chain keys and token symbols the other tools expect. Read-only, takes no input. Returns network, fees (service percent, minimum, maximum), limits (USD per transfer, transfers per wallet per day, quote validity) and the chains with their tokens and gas coin. gasDrop: true marks a chain without a gasrescue contract (BNB Chain): there gasrescue sends the wallet a little gas and the wallet sends two plain transfers itself.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds real behavioral value beyond that: no input required, the exact shape of what comes back (network, fees, limits, tokens per chain, quote validity), and the non-obvious gasDrop case where BNB Chain has no gasrescue contract and the wallet must send two plain transfers itself. Only gap is error/rate-limit behavior, which is minor here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the supported-assets summary, then usage conditions, then ordering guidance, then return shape. Dense but every clause carries information; the gasDrop explanation is long but covers a genuinely surprising execution path, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing the return payload and does so field-by-field (fees percent/min/max, USD per transfer, transfers per wallet per day, quote validity, gasDrop flag). Combined with zero-param simplicity and covered annotations, nothing needed to invoke and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema carries everything and the baseline is 4. The description correctly states 'takes no input', which prevents an agent from inventing arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource set — chains, stablecoins per chain, swap-capable gas coins, fees and limits — and positions itself relative to siblings by saying the chain keys and token symbols it returns are what the other tools expect. An agent can immediately tell this is the discovery/config tool rather than a quote or execution tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger scenario (wallet holds USDC/USDT/USDG but no native gas coin, error 'insufficient funds for gas') and an explicit ordering rule ('call this first') before quote_send/quote_swap/get_transfer etc. The when-not case is implicit but the alternative is clearly the rest of the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signing_requestGet what the wallet must signARead-onlyIdempotent
Returns what the sender's wallet has to sign for a quote from quote_send or quote_swap. kind "evm-typed-data": sign every steps[].typedData with eth_signTypedData_v4, in order (one authorization, or for permit tokens a permit plus the order itself); binding is the order the authorization commits to, so recipient, fee and minimum can be checked first. kind "tron-transactions": sign every steps[].transaction (first the fee, then the transfer). kind "evm-transactions" (gas drop, BNB Chain): if funding.needed, call submit_signatures with fund: true first, so gasrescue sends the wallet the gas; then send every steps[].tx from the wallet (eth_sendTransaction, fee first) and report the hashes with submit_signatures txs: { fee, transfer }. kind "solana-transaction" or "solana-versioned-transaction": sign the base64 transaction. Read-only. Pass the result to submit_signatures. Fails when the quote expired; then request a new quote.
| Name | Required | Description | Default |
|---|---|---|---|
| transferId | Yes | The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. "b39f46001a5680455091152d". Not a transaction hash and not an id of another service. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses per-kind signing behavior, required ordering of signatures and transactions, the gas-drop funding prerequisite, and the expired-quote failure condition. These details materially help an agent invoke the tool and follow up correctly, and they are consistent with readOnlyHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and every clause is relevant to a different signing kind or workflow step. It is dense and semi-colon heavy rather than cleanly structured, but given the multi-kind behavior it is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the relevant response fields and structures for each kind: kind, steps[].typedData, steps[].transaction, steps[].tx, funding.needed, and binding. It is complete enough for an agent to know what to do with the returned signing request across the supported chains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for transferId, including pattern, example, and source, so the schema already carries the parameter meaning. The tool description does not add parameter-level detail beyond referencing quotes from quote_send or quote_swap, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource: returns the signing payload the sender's wallet must sign for a quote from quote_send or quote_swap. It distinguishes this from the quote-producing siblings and from submit_signatures, so an agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description places the tool clearly in the workflow: use it on a quote from quote_send or quote_swap, then pass the result to submit_signatures. It also covers the expired-quote failure path by telling the agent to request a new quote. It does not explicitly say when not to use it, but the surrounding workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transferTransfer statusARead-onlyIdempotent
Returns the current state of a quote or transfer by its id, with the fees, the transaction hash and the explorer link once sent. States: quoted (waiting for the signature), submitting and sent (on its way; ask again after a few seconds), confirmed (done), failed (error says why) and expired (not signed in time; request a new quote). Use it to follow up after submit_signatures or to see whether a quote is still open. It cannot start, change or cancel anything; use quote_send or quote_swap to start. Read-only. Returns { summary, transfer }. An unknown or malformed id, or one older than 30 days, fails with "Transfer not found".
| Name | Required | Description | Default |
|---|---|---|---|
| transferId | Yes | The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. "b39f46001a5680455091152d". Not a transaction hash and not an id of another service. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), but the description adds the full lifecycle state machine, tells the agent to poll again after a few seconds for submitting/sent, and explains what expired means and what to do about it. It also documents error behavior for unknown, malformed, or 30-day-old ids returning 'Transfer not found', which nothing in the structured fields conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation, then states, then usage routing, then constraints — a sensible order with no filler sentences. The state enumeration is dense but each state carries an actionable parenthetical, so it earns its space; only the explicit returns shape slightly duplicates what a caller would learn from the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description supplies everything an agent needs: scope, state semantics with polling advice, sibling routing, mutation limits, the top-level response shape, and the exact error condition. There is no ambiguity left that would cause an incorrect call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the transferId property already explains the 24-hex-character format and that it is not a transaction hash, so the baseline is 3. The description adds meaning beyond the schema by clarifying that the same id space covers both quotes and transfers and by documenting the failure mode ('Transfer not found') for an id that is well-formed but unknown or older than 30 days.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returns the current state of a quote or transfer by id — and enumerates exactly what comes back (fees, transaction hash, explorer link once sent). An agent can distinguish it from quote_send, quote_swap, and submit_signatures purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to follow up after submit_signatures or to see whether a quote is still open, and names the alternatives for starting a flow (quote_send or quote_swap). It also closes off misuse by stating it cannot start, change, or cancel anything, so when-not-to-use is covered alongside when-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_sendQuote a send without gasA
Prices sending USDC, USDT or USDG from a wallet without gas (no ETH, POL, AVAX, BNB, SOL or TRX) to another address, e.g. an exchange deposit or another wallet. Use quote_swap instead when the user wants gas in the same wallet. Creates a free quote, valid for 10 minutes; nothing moves on chain until the wallet signs it. Returns { summary, transfer }: the transfer id, network and service fee, what the recipient gets (net) and status "quoted". Show the summary to the user and get approval before signing. Fails with a readable error when the amount is outside $2 to $1,000 (Tron: from $10), the wallet holds too little, the token is frozen, or the wallet sent 10 transfers in 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain key from gasrescue_info, e.g. "base", "arbitrum", "ethereum", "polygon", "avalanche", "bsc", "hyperevm", "robinhood", "solana", "tron". | |
| token | Yes | Stablecoin symbol, e.g. "USDC", "USDC.e", "USDT", "USDT0", "USDG", "USD1" or "FDUSD". gasrescue_info lists what each chain supports. | |
| amount | Yes | Amount of the token, as a decimal string, e.g. "25" or "12.5". Fees come out of it. | |
| sender | Yes | Wallet address: 0x… for EVM chains, base58 for Solana, T… for Tron. | |
| recipient | Yes | Wallet address: 0x… for EVM chains, base58 for Solana, T… for Tron. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses that the quote is free, expires in 10 minutes, and that nothing executes on chain until the wallet signs, which matters given readOnlyHint=false. It also lists concrete failure conditions — amount bounds, insufficient balance, frozen token, and a 10-transfers-per-24h limit — that an agent cannot derive from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the quote_swap alternative are front-loaded, then return shape, then failure modes — a sensible order. It is dense and slightly long, with the return-value enumeration bordering on over-specification, but nearly every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ({ summary, transfer }, net amount, status "quoted"), which the agent would otherwise lack. Combined with the approval workflow, expiry, and error cases, nothing material is missing for a 5-parameter quote tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the sendable token set is narrowed to USDC/USDT/USDG, and the amount parameter gains bounds ($2–$1,000, Tron from $10) plus the note that fees come out of it. That goes beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (prices sending a stablecoin from a gasless wallet to another address) and names the exact scenario it covers, e.g. exchange deposits. It also explicitly distinguishes itself from quote_swap, so the agent can separate the two without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not rule: use quote_swap when the user wants gas in the same wallet. It additionally prescribes the workflow step (show the summary to the user and get approval before signing), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_swapQuote a swap into gas without gasA
Prices swapping a stablecoin into the chain's gas coin (ETH, POL, AVAX, SOL, HYPE) or another stablecoin, for a wallet without gas, so it can pay its own fees again. The result always goes back to the same wallet; use quote_send to pay someone else. Not available on Tron. Creates a free quote, valid for 2 minutes because prices move; nothing moves on chain until the wallet signs it. Returns { summary, transfer } with the transfer id, fees, the expected output and the minimum output (below it the swap reverts and nothing moves). Show the summary to the user and get approval before signing.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain key from gasrescue_info, e.g. "base", "arbitrum", "ethereum", "polygon", "avalanche", "bsc", "hyperevm", "robinhood", "solana", "tron". | |
| token | Yes | Stablecoin symbol, e.g. "USDC", "USDC.e", "USDT", "USDT0", "USDG", "USD1" or "FDUSD". gasrescue_info lists what each chain supports. | |
| amount | Yes | Amount of the token, as a decimal string, e.g. "25" or "12.5". Fees come out of it. | |
| sender | Yes | Wallet address: 0x… for EVM chains, base58 for Solana, T… for Tron. | |
| tokenOut | Yes | What to get: the gas coin ("ETH", "POL", "AVAX", "SOL", "HYPE") or another stablecoin. gasrescue_info lists what each chain can buy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the quote is free, valid for 2 minutes, nothing moves on chain until the wallet signs, output always returns to the same wallet, and the swap reverts if the minimum output is not met. That is exactly the safety and lifecycle context an agent needs before presenting a quote, and it does not conflict with readOnlyHint=false/destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is priced and for whom, then constraints, then return shape and the approval step. Every sentence carries a distinct fact (scope, sibling routing, chain exclusion, expiry, return payload, revert condition, approval) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-required-parameter quoting tool with no output schema, the description still discloses the return shape ({ summary, transfer } with transfer id, fees, expected and minimum output) and the signing-approval step. Nothing essential to selecting or invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with per-parameter examples and cross-references to gasrescue_info, so the schema already carries the parameter burden. The description only restates the tokenOut concept (gas coin vs another stablecoin) and adds no format, default, or validation detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (quote) and resource (swap of a stablecoin into the chain's gas coin or another stablecoin) plus the concrete scenario (wallet with no gas paying its own fees). It explicitly contrasts itself with the sibling quote_send, so an agent can distinguish them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when-to-use and when-not-to-use: use this when the result should return to the same wallet, use quote_send to pay someone else, and it is not available on Tron. It also states the workflow prerequisite ('get approval before signing'), which is the key routing condition for this family of tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_signaturesSubmit signatures and sendADestructive
Submits the wallet's signatures for a quote; gasrescue broadcasts the transaction, pays the gas and waits up to 3 minutes for the result. This moves funds and cannot be undone: call it only after the user approved the quote summary. A transfer can be submitted once; a second call is refused. Give signatures for EVM and Tron, signedTransaction for Solana, or for a gas drop fund: true and then txs. Returns { summary, transfer } with status confirmed or failed, the transaction hash and the explorer link.
| Name | Required | Description | Default |
|---|---|---|---|
| txs | No | Gas drop only: the hashes of the transactions the wallet sent, { fee, transfer }. gasrescue checks them on chain; the transfer closes the quote. | |
| fund | No | Gas drop (kind "evm-transactions") only: true asks gasrescue to send the wallet the gas for its two transfers. Returns status funded. | |
| signatures | No | EVM and Tron: one signature per step of get_signing_request, in the same order, as hex strings. | |
| transferId | Yes | The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. "b39f46001a5680455091152d". Not a transaction hash and not an id of another service. | |
| signedTransaction | No | Solana only: the transaction from get_signing_request, signed by the sender, base64. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that funds move irreversibly ('cannot be undone'), that the server broadcasts and pays gas, that the call blocks up to 3 minutes, and that re-submission is rejected. It also describes the return payload (status confirmed or failed, hash, explorer link), which annotations alone would not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and the consequence, then preconditions, then the parameter routing, then the return value. Every sentence carries distinct information and nothing is repeated from the annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, one-shot mutation tool with five parameters and no output schema, the description covers the safety warning, the timing behavior, the re-call behavior, the per-chain parameter routing, and the shape of the response. Nothing an agent needs before invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds genuine routing logic beyond the schema: signatures for EVM/Tron, signedTransaction for Solana, or fund: true followed by txs for a gas drop. That conditional mapping across the 5 parameters is meaningfully additive, though it stops short of detailing formats already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Submits the wallet's signatures for a quote') and explains the downstream effect ('gasrescue broadcasts the transaction, pays the gas'). This is clearly distinguishable from the quoting siblings (quote_send, quote_swap) and from get_signing_request, which produces rather than consumes the signatures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition ('call it only after the user approved the quote summary') and an exclusion via the once-per-transfer rule ('a second call is refused'). It does not explicitly name which sibling to call first (get_signing_request) or what to do if submission fails, but the sequencing context is clear enough to act on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.9- Changed
quote_send1 field changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"avalanche\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."
- Changed
quote_swap2 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"avalanche\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"." - changed
Input schema / properties / tokenOut / descriptionPrevious value: -"What to get: the gas coin (\"ETH\", \"POL\", \"SOL\", \"HYPE\") or another stablecoin. gasrescue_info lists what each chain can buy."New value: +"What to get: the gas coin (\"ETH\", \"POL\", \"AVAX\", \"SOL\", \"HYPE\") or another stablecoin. gasrescue_info lists what each chain can buy."
3 tool updates
v0.1.8- Changed
quote_send2 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"." - changed
Input schema / properties / token / descriptionPrevious value: -"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports."New value: +"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\", \"USDG\", \"USD1\" or \"FDUSD\". gasrescue_info lists what each chain supports."
- Changed
quote_swap2 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"bsc\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"." - changed
Input schema / properties / token / descriptionPrevious value: -"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports."New value: +"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\", \"USDG\", \"USD1\" or \"FDUSD\". gasrescue_info lists what each chain supports."
- Changed
submit_signatures2 fields changed- added
Input schema / properties / fundAdded value: +{ + "description": "Gas drop (kind \"evm-transactions\") only: true asks gasrescue to send the wallet the gas for its two transfers. Returns status funded.", + "type": "boolean" +} - added
Input schema / properties / txsAdded value: +{ + "additionalProperties": false, + "description": "Gas drop only: the hashes of the transactions the wallet sent, { fee, transfer }. gasrescue checks them on chain; the transfer closes the quote.", + "properties": { + "fee": { + "type": "string" + }, + "transfer": { + "type": "string" + } + }, + "type": "object" +}
2 tool updates
v0.1.7- Changed
quote_send2 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"." - changed
Input schema / properties / token / descriptionPrevious value: -"Stablecoin symbol, e.g. \"USDC\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports."New value: +"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports."
- Changed
quote_swap3 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"."New value: +"Chain key from gasrescue_info, e.g. \"base\", \"arbitrum\", \"ethereum\", \"polygon\", \"hyperevm\", \"robinhood\", \"solana\", \"tron\"." - changed
Input schema / properties / token / descriptionPrevious value: -"Stablecoin symbol, e.g. \"USDC\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports."New value: +"Stablecoin symbol, e.g. \"USDC\", \"USDC.e\", \"USDT\", \"USDT0\" or \"USDG\". gasrescue_info lists what each chain supports." - changed
Input schema / properties / tokenOut / descriptionPrevious value: -"What to get: the gas coin (\"ETH\", \"SOL\", \"HYPE\") or another stablecoin. gasrescue_info lists what each chain can buy."New value: +"What to get: the gas coin (\"ETH\", \"POL\", \"SOL\", \"HYPE\") or another stablecoin. gasrescue_info lists what each chain can buy."
3 tool updates
v0.1.6- Changed
get_signing_request1 field changed- changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id returned by quote_send or quote_swap (24 hex characters)."New value: +"The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. \"b39f46001a5680455091152d\". Not a transaction hash and not an id of another service."
- Changed
get_transfer1 field changed- changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id returned by quote_send or quote_swap (24 hex characters)."New value: +"The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. \"b39f46001a5680455091152d\". Not a transaction hash and not an id of another service."
- Changed
submit_signatures1 field changed- changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id returned by quote_send or quote_swap (24 hex characters)."New value: +"The id gasrescue returned as transfer.id from quote_send or quote_swap: 24 lowercase hex characters, e.g. \"b39f46001a5680455091152d\". Not a transaction hash and not an id of another service."
4 tool updates
v0.1.5- Changed
get_signing_request2 fields changed- changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id from a quote."New value: +"The transfer id returned by quote_send or quote_swap (24 hex characters)." - added
Input schema / properties / transferId / patternAdded value: +"^[0-9a-f]{24}$"
- Changed
get_transfer2 fields changed- changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id from a quote."New value: +"The transfer id returned by quote_send or quote_swap (24 hex characters)." - added
Input schema / properties / transferId / patternAdded value: +"^[0-9a-f]{24}$"
- Changed
quote_swap1 field changed- changed
Input schema / properties / tokenOut / descriptionPrevious value: -"What to get, e.g. \"ETH\", \"SOL\", \"HYPE\" or another stablecoin."New value: +"What to get: the gas coin (\"ETH\", \"SOL\", \"HYPE\") or another stablecoin. gasrescue_info lists what each chain can buy."
- Changed
submit_signatures4 fields changed- added
Input schema / properties / signatures / descriptionAdded value: +"EVM and Tron: one signature per step of get_signing_request, in the same order, as hex strings." - added
Input schema / properties / signedTransaction / descriptionAdded value: +"Solana only: the transaction from get_signing_request, signed by the sender, base64." - changed
Input schema / properties / transferId / descriptionPrevious value: -"The transfer id from a quote."New value: +"The transfer id returned by quote_send or quote_swap (24 hex characters)." - added
Input schema / properties / transferId / patternAdded value: +"^[0-9a-f]{24}$"
7 tool updates
v0.1.0- First observed
check_wallet - First observed
gasrescue_info - First observed
get_signing_request - First observed
get_transfer - First observed
quote_send - First observed
quote_swap - First observed
submit_signatures
TDQS
Scored across 7 tools
Each tool has a distinct role in the rescue workflow, and the descriptions explicitly distinguish sending to another address from swapping within the same wallet. Signing, submission, status lookup, wallet diagnosis, and capability discovery are also clearly separated.
All tools use readable snake_case, and most follow an action-oriented naming pattern. The server-prefixed gasrescue_info is a minor deviation from the unprefixed check_, quote_, get_, and submit_ names.
Seven tools are well scoped for this specialized service. Each one supports a necessary step or one of the two distinct transfer modes, with no apparent redundancy or filler.
The set covers the full lifecycle: discover supported networks, diagnose a wallet, obtain either type of quote, retrieve signing instructions, submit signatures, and track the result. Quote expiration and one-time submission are handled through new quotes and status checks, so there are no obvious workflow dead ends.
Maintenance
Related MCP Connectors
Stablecoin payments for AI agents: customers, quotes, transfers, payment routes.
Zero-key, non-custodial cross-chain crypto swap aggregator for AI agents: 100+ chains, 15+ providers
Cheaper cross-chain stablecoin routes for AI agents; 5 % of the verified saving, nothing if none.
Gasless, MEV-protected onchain token swaps for AI agents on 14 EVM chains, built on CoW Protocol.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables fee-free USDC transfers on the Base blockchain network using Coinbase CDP MPC Wallet integration, with support for ENS and BaseName domain resolution.9 npm21MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform cross-chain bridging operations using natural language intents, with support for multiple protocols (Across, Stargate) and advanced security features like oracle validation and slippage protection. Provides comprehensive bridging tools including quote estimation, transaction building, and approval management across Arbitrum and Ethereum networks.MIT
- FlicenseCqualityCmaintenanceEnables AI agents to interact with any EVM-compatible blockchain through natural language, supporting token swaps, cross-chain bridges, staking, lending, governance, gas optimization, and portfolio tracking across networks like Ethereum, BSC, Polygon, Arbitrum, and more.10020 npm44-
- AlicenseAqualityCmaintenanceGasless ERC-20 token deployment on Base using CDP Paymaster. Deploy tokens, verify contracts, check status.536 npm2MIT