Examples
These walkthroughs show how Claude uses Tenderly MCP tools to complete real development tasks. You don’t need to call tools by name — just describe what you want and Claude handles the rest.
Create a Virtual TestNet and fund a wallet
What to ask:
“Create a Virtual TestNet forked from Ethereum mainnet and fund my wallet 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 with 100 ETH.”
What Claude does:
- Calls
list_projectsto find your projects, thenset_active_projectto select one. - Calls
get_networksto find the Ethereum mainnet network ID. - Calls
create_vnetwith the network ID, creating a forked environment. - Calls
fund_accountwith the VNet ID and your wallet address, setting the balance to 100 ETH in hex wei. - Returns the VNet details including Admin RPC and Public RPC URLs, ready for use in Hardhat, Foundry, or any Web3 library.
What you get back:
A running Virtual TestNet forked from latest mainnet state, your wallet funded, and RPC URLs you can drop into your development framework config.
Simulate a Uniswap swap
What to ask:
“Simulate a swap of 1 ETH for USDC on Uniswap V3 from 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 on Ethereum mainnet. Show me the expected output and any token transfers.”
What Claude does:
- Calls
simulate_transactionwith the Uniswap V3 router address, your sender address, the swap calldata, and 1 ETH as value. - The simulation runs against current mainnet state and returns: success/revert status, gas used, and decoded method name.
- Calls
get_simulation_asset_transfersto show all token movements — the ETH going in and USDC coming out. - Calls
get_simulation_balance_changesto show the net impact on your balances with USD values.
What you get back:
The exact USDC output, gas cost, and a breakdown of every asset transfer. If the swap would revert (e.g., slippage too high), you get the decoded revert reason.
Pre-flight check a transaction before sending
What to ask:
“I’m about to call
approveon 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 to give 0xE592427A0AEce92De3Edee1F18E0157C05861564 unlimited USDC allowance. Simulate it first and show me exactly what approvals and state changes it will create.”
What Claude does:
- Calls
simulate_transactionwith your wallet as sender, the token contract as recipient, and theapprovecalldata. - Calls
get_simulation_exposure_changesto show every approval and allowance change — which spender gets access to what, and how much. - Calls
get_simulation_state_changesto show the exact storage slots modified.
What you get back:
The exact approval being granted (spender address, token, amount), the storage diff confirming the allowance slot changed, and whether the transaction would succeed. Useful any time you’re interacting with an unfamiliar contract or want to verify calldata before signing.
Debug a failed on-chain transaction
What to ask:
“Why did transaction 0x6c5df5a1e6b34e2432ae19706e38a84239495cdbf40c2a9d4d79806443c4aa0d revert on Ethereum?”
What Claude does:
- Calls
trace_transactionwith the tx hash. Returns the status (false= reverted), gas used, decoded method name, and error message. - Calls
get_simulation_call_traceto get the full internal call tree — every function call, with decoded names, inputs, outputs, and which specific call failed. - Calls
get_simulation_eventsto see what events were emitted before the revert point. - Optionally calls
get_simulation_state_changesto see what state was modified up to the failure.
What you get back:
A clear explanation of exactly which internal call failed, the decoded revert reason (e.g., "ERC20: transfer amount exceeds balance"), and the full call trace so you can see the execution path leading up to the failure.
Re-simulate a failed transaction with a fix
What to ask:
“Transaction 0x… failed with ‘ERC20: transfer amount exceeds balance’. Re-simulate it but override my USDC balance to 10,000 USDC to confirm that’s the only issue.”
What Claude does:
- Calls
resimulate_transactionwith the original tx hash and a state override setting your token balance to 10,000 USDC. - If the simulation succeeds, confirms the root cause was insufficient balance.
- Calls
get_simulation_call_traceto verify the execution path now completes without error. - Optionally calls
get_simulation_asset_transfersto show what the transaction would have done if it had succeeded.
What you get back:
Confirmation of whether the fix resolves the issue, without deploying anything or spending gas. State overrides let you test assumptions — insufficient balance, wrong allowance, incorrect ownership — instantly, against real mainnet state.
Understand what a transaction did
What to ask:
“Walk me through everything that happened in transaction 0x… on Ethereum — every internal call, who called who, and what changed.”
What Claude does:
- Calls
trace_transactionfor a top-level summary: method name, sender, recipient, gas used, and status. - Calls
get_simulation_call_traceto get the full internal call tree — every nested call with decoded function names, inputs, outputs, and per-call gas. - Calls
get_simulation_eventsto list all events emitted in order. - Calls
get_simulation_state_changesto show every storage slot and balance that changed.
What you get back:
A complete, human-readable reconstruction of the transaction. Useful for auditing unfamiliar protocol interactions, understanding MEV activity, or verifying that a complex multi-contract call did exactly what you expected.
Inspect a smart contract
What to ask:
“What contract is deployed at 0xdAC17F958D2ee523a2206206994597C13D831ec7 on Ethereum?”
What Claude does:
- Calls
get_contract_infowith the address and Ethereum’s network ID.
What you get back:
The contract name (Tether USD), token standards (ERC-20), compiler version, EVM version, source language, creation block, deployer address, creation transaction hash, and the full ABI. Claude can then use the ABI to help you encode calldata for simulations or build transactions.
Send an impersonated transaction on a VNet and trace it
What to ask:
“On my VNet, send a transaction from the Uniswap V2 deployer 0x1a9C8182C09F50C8318d769245beA52c32BE35BC to the USDC contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 calling the
transferfunction to send 1000 USDC to my wallet. Then trace the execution.”
What Claude does:
- Calls
send_vnet_transactionwith the deployer asfrom, USDC asto, and the ABI-encodedtransfercalldata. The sender is impersonated — no private key needed. - Calls
get_vnet_transactionsto get theoperation_idof the executed transaction. - Calls
trace_vnet_transactionto get the decoded execution summary — contract name, function name, decoded input parameters, and output. - Optionally calls
get_vnet_simulation_eventsandget_vnet_simulation_state_changesfor deeper details.
What you get back:
Confirmation that the transaction executed, the decoded trace showing the transfer call succeeded, and the events emitted (Transfer event with your wallet as recipient).
Test a multi-step contract interaction on a VNet
What to ask:
“On my VNet, run the full approval and swap flow: first approve the Uniswap router to spend 1000 USDC from my wallet, then execute the swap. Show me my balances before and after.”
What Claude does:
- Calls
send_vnet_transactionto submit theapprovetransaction, impersonating your wallet — no private key needed. - Calls
send_vnet_transactionagain with the swap calldata. - Calls
get_vnet_simulation_asset_changeson each transaction to show token movements per step. - Calls
get_vnet_simulation_balance_changesafter the final step to show the net balance impact.
What you get back:
Step-by-step confirmation that each transaction succeeded, token transfers per step, and your final net balance change. This is the full pre-deployment testing loop — run any sequence of transactions against a forked mainnet state before touching real funds.
Analyze gas usage for optimization
What to ask:
“Simulate this transaction and show me a gas breakdown so I can find the most expensive function calls: [paste calldata or describe the transaction]“
What Claude does:
- Calls
simulate_transactionwith your transaction parameters. - Calls
get_simulation_gas_breakdownto get per-call gas consumption including intrinsic gas and refunds. - Calls
get_simulation_call_traceto map gas costs to specific function calls in the execution tree.
What you get back:
A ranked list of the most gas-expensive operations, mapped to specific function calls. Use this to identify which parts of your contract logic to optimize.
Use get_simulation_generated_access_list to generate an EIP-2930 access list, which can reduce gas costs by pre-declaring which storage slots and addresses the transaction will access.
Fork a VNet for parallel testing
What to ask:
“Fork my current VNet so I can test a different approach without losing the current state.”
What Claude does:
- Calls
list_vnetsto find your current VNet. - Calls
fork_vnetwith the VNet ID, creating a new VNet with all state preserved — deployed contracts, balances, and transaction history. - Returns the new VNet details with fresh RPC URLs.
What you get back:
Two independent VNets sharing the same starting state. You can test different contract changes or transaction sequences in each without interference — like branching in git, but for blockchain state.