gasrescue

io.github.gasrescuePublished by GitHub account gasrescuev0.1.9Updated Nov 4, 2026

Rescue USDC, USDT and USDG from wallets with no gas: send or swap them on EVM, Solana and Tron.

VerifiedSTDIODesktop onlyCloud & InfrastructureFinance

Overview

AI-generated overview

Moves USDC, USDT and USDG out of wallets that lack gas, or swaps them into the gas coin, across EVM chains, Solana and Tron.

What you can do
  • List supported chains, tokens, fees and limits
  • Check an address across chains for stablecoin balances, gas and frozen tokens
  • Quote sending stablecoins from a gasless wallet, or swapping them into the gas coin
  • Return the signing request for a quote and submit the wallet's signatures
  • Track a quote or transfer's state, fees and explorer link
When to use it
Useful when a wallet holds stablecoins but no native gas coin, so transfers fail with insufficient funds for gas, and the user wants to send those funds elsewhere or restore the wallet's ability to pay fees itself.
Requirements
Runs locally over stdio, typically via npx with the gasrescue-mcp package; no account or API key. Optional GASRESCUE_EVM_PRIVATE_KEY enables EVM signing, and optional GASRESCUE_ALLOWED_RECIPIENTS restricts send destinations. Network access to gasrescue.io is needed.
Before you install
Submitting signatures moves funds and is irreversible; transfers are final and can be submitted only once. Setting GASRESCUE_EVM_PRIVATE_KEY lets the server sign with that wallet, so use a wallet holding only what the agent may move. Fees are 0.5% (minimum $0.25, capped per send or swap) plus network fees, deducted from the amount. Limits: $2 to $1,000 per transfer, 10 per wallet per 24 hours, Tron at least $10.

Installation

In SourceWeft

  1. Open gasrescue in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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

ToolWhat it does
gasrescue_infoChains, tokens, fees and limits
check_walletRead-only: stablecoins and gas of an address on every chain, issuer freezes included
quote_sendQuote a send without gas; returns fees, what the recipient gets and a transfer id
quote_swapQuote a swap into the gas coin (ETH, POL, AVAX, SOL, HYPE) without gas
get_signing_requestWhat the wallet has to sign for a quote
submit_signaturesSubmit the signatures; gasrescue sends and pays the gas
get_transferStatus and explorer link
sign_and_submitOnly with GASRESCUE_EVM_PRIVATE_KEY: checks and signs an EVM quote with that wallet

Setup

Claude Desktop, Cursor and other MCP clients:

json
{  "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)

json
"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

Source: README.md at commit d462d91

Tools

7

gasrescue_info

Supported chains, tokens and fees

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.

Takes no parameters.

check_wallet

Check a wallet for stuck stablecoins

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.

Parametersaddressrequired

quote_send

Quote a send without gas

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.

Parameterschainrequiredtokenrequiredamountrequiredsenderrequiredrecipientrequired

quote_swap

Quote a swap into gas without gas

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.

ParameterschainrequiredtokenrequiredamountrequiredsenderrequiredtokenOutrequired

get_signing_request

Get what the wallet must sign

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.

ParameterstransferIdrequired

submit_signatures

Submit signatures and send

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.

ParameterstxsfundsignaturestransferIdrequiredsignedTransaction

get_transfer

Transfer status

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".

ParameterstransferIdrequired

Version history

4
  1. v0.1.9LatestNov 4, 2026
  2. v0.1.7Nov 3, 2026
  3. v0.1.5Nov 3, 2026
  4. v0.1.3Nov 3, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts