Model Context Protocol (MCP) server for freee API integration
Ekubo Protocol is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http ekubo-protocol-mcp https://mcp.ekubo.org/mcp
# 2 — ask your agent for something these tools do
# list_tokens, export_tokens, get_token and 96 more
Ekubo Protocol costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http ekubo-protocol-mcp https://mcp.ekubo.org/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
99 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
First step for symbol-based swaps, including tokenized stocks and stablecoins: list canonical Ekubo tokens by descending visibility_priority, so the preferred token wins an ambiguous symbol. Use search for a symbol prefix or suffix and min_visibility_priority to reach tokens the interface hides.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Restrict the list to one EVM chain; omit to list tokens across every indexed chain |
| search | string | no | Case-insensitive token symbol prefix or suffix match; omit to list the whole canonical set. Symbols only, not names or addresses |
| min_visibility_priority | integer | no | Lowest visibility_priority to include; defaults to 0, the interface threshold. Pass a negative value to reach tokens the interface hides |
| page_size | integer | no | Maximum tokens to return; defaults to 20 |
| after_token | string | no | Keep only tokens whose (chain_id, address) pair sorts after this <chain_id>:<address> identifier. Results are ordered by visibility_priority rather than by that pair, so this filters the candidate set |
Return a token_list_reference envelope (chain ID, address, symbol, name, decimals) and its count, with no entries, so a wallet can import token names; pass it unchanged as the wallet tool's reference argument. complete=false means the export is a prefix of the chain's list. Use list_tokens to read entries yourself.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Export only this chain; almost always pass it, since a wallet holds names for the chain it is on. Ethereum alone has about 5,600 tokens |
| max_tokens | integer | no | Defaults to 1,000, what a wallet accepts in one import; a larger export is refused whole, not truncated |
Fetch canonical token metadata for an exact chain and address.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| address | string | yes | EVM or Starknet token address (hex) |
Fetch canonical metadata for up to 1,000 token identifiers in one batch request, preserving input order; identifiers absent from the canonical list are omitted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tokens | array | yes | Entries may span chains |
A quote, execution plan, simulation or wallet approval is not permission to trade. Robinhood Stock Tokens are tokenised debt securities subject to issuer restrictions and applicable law. Before requesting signatures or submitting approvals or trades, establish the user's relevant jurisdiction and eligibility, including location, residence or entity incorporation, US-person status under Regulation
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| destination_chain_id | integer/string | no | Destination chain; defaults to chain_id for a same-chain swap |
| token_in | string | yes | Raw EVM address or CAIP-10 eip155:<chain_id>:<address>; all-zeroes denotes the native token |
| token_out | string | yes | Raw EVM address or CAIP-10 eip155:<chain_id>:<address>; all-zeroes denotes the native token |
| quote_type | string | yes | — |
| amount | string | yes | Base units (positive decimal integer) |
| max_output_loss | string | no | Exact-input loss budget from quoted output, output-token base units as a decimal integer string; requires sender, omit slippage_bps. Ekubo: exact subtraction. 0x: two quotes, floor budget to whole ppm |
| sender | string | no | Transaction sender; pass with exactly one of slippage_bps or max_output_loss for plans (address) |
| recipient | string | no | Defaults to sender (address) |
| slippage_bps | integer | no | Whole-bps calldata bound: 0.1% = 10. With sender supply this OR max_output_loss. Honor user preference; size near gas value / notional * 10,000. For positive sub-bps budgets use max_output_loss, not 0 |
| swap_deadline_minutes | integer | no | Ekubo router route deadline; default 30 |
| include_raw_quotes | boolean | no | Echo raw provider responses; only to diagnose a provider |
Report whether an executed LayerZero or LI.FI transfer has been delivered; its origin receipt alone does not mean the user has the funds. Poll every 15 to 30 seconds while settled is false (it draws on the quote budget). UNKNOWN or NOT_FOUND right after submission usually means not yet indexed. For LI.FI, read substatus: REFUNDED and PARTIAL report as status DONE. Across transfers are not tracked
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source | string | no | The executed quote's source; defaults to layerzero |
| quote_id | string | no | The executed option's provider_quote_id; required for layerzero |
| transaction_hash | string | no | Origin transaction hash; required for lifi, and pass it for layerzero once known (some routes need it) (bytes32 hex) |
| origin_chain_id | integer/string | no | Origin chain; lifi only, narrows the lookup |
| destination_chain_id | integer/string | no | Destination chain; lifi only |
Compile one actively voted ve-token into multiple allocations. Unconditionally claims its current pool first, then splits and changes votes in one atomic batch of decodable VeToken steps. Nothing is burned, withdrawn, or transferred: the source keeps a stake and every additional allocation is a newly minted NFT with the same lock end. Prefer the portfolio reallocation workflow for complete state v
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| source_ve_id | string | yes | decimal integer |
| source_amount | string | yes | Base units (positive decimal integer) |
| current_vote | object | yes | Required active indexed vote; its pool is claimed unconditionally before any split, clear, or replacement vote |
| allocations | array | yes | — |
| unallocated_permille | integer | yes | — |
| salt_nonce | string | yes | User-selected nonce used to derive deterministic, replay-detectable split salts (bytes32 hex) |
Prepare a direct extension for an unvoted VeToken or an atomic claim-and-extend call when current_pool_key identifies an active vote, so pending voter fees are preserved. Extending moves the stake to a later end time and clears its vote — that is why the claim is compounded into the same call. A stake's end time only ever moves later, here and everywhere else in Ve33. No NFT is burned and no stake
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| ve_id | string | yes | decimal integer |
| duration_seconds | integer | no | — |
| max_duration | boolean | no | — |
| current_pool_key | object | no | Active pool key when voted; the MCP claims fees atomically before extension. Omit only for an unvoted VeToken. PoolKey {token0, token1, config} or {token0, token1, fee, tick_spacing, extension, stable |
Create a new VeToken stake with an exact stake-token approval. Max duration is the safe default for new stakes; an explicit shorter duration is optional and no existing NFT, vote, fee balance, or ownership is changed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| stake_token | string | yes | address |
| amount | string | yes | Base units (positive decimal integer) |
| salt | string | yes | User-selected salt for a deterministic, replay-detectable VeToken ID (bytes32 hex) |
| duration_seconds | integer | no | — |
| max_duration | boolean | no | Defaults to true when duration_seconds is omitted; set false only with an explicit duration_seconds |
Split a source ve-token with an explicit salt and return the deterministic child token ID; the source vote is preserved with reduced weight and the child starts unvoted with the same lock end. Non-destructive: no stake leaves the wallet, no NFT is burned, no vote is cleared, and no fees are discarded.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| ve_id | string | yes | decimal integer |
| amount | string | yes | Base units (positive decimal integer) |
| salt | string | yes | bytes32 hex |
Generate one call, or an atomic batch of decodable VeToken steps, claiming voter fees from one or more ve-tokens. Fees only: votes, stake amounts, lock ends, and NFT ownership are all unchanged, so this is always safe to run before any other ve(3,3) action.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| recipient | string | no | address |
| claims | array | yes | — |
Build the safe phased workflow for 'reinvest my fees': automatically claim all active voter fees, prepare one exact-input swap per claimed non-stake token, then increase one VeToken or every existing active allocation without changing ownership or replacing votes. phase=swap returns jurisdiction metadata inline on the result and on every child swap; it is not permission to trade. For a nonempty re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| phase | string | yes | — |
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| claims | array | no | — |
| stake_token | string | no | address |
| fee_balances | array | no | — |
| slippage_bps | integer | no | — |
| swap_deadline_minutes | integer | no | Ekubo router route deadline; default 30 |
| source | string | no | — |
| ve_id | string | no | decimal integer |
| amount | string | no | Stake token base units (decimal integer) |
| current_state_id | string | no | bytes32 hex |
Discover every active vote on VeTokens owned by the sender and generate one atomic batch of decodable VeToken steps claiming all indexed pool fees, with ownerOf and voteState validation calldata. Fees only: votes, stake amounts, lock ends, and NFT ownership are all unchanged.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | Owner whose indexed VeTokens and active votes should be discovered (address) |
| recipient | string | no | Fee recipient; defaults to sender for claimPoolFeesToSelf (address) |
Remove the active vote from one or more ve-tokens, claiming each stake's current pool fees immediately before its clearVote in one atomic batch. Use this instead of raw clearVote calldata: Ve33 discards pending voter fees when a stake's weight goes to zero, and a current_pool_key that is not the stake's active pool reverts the whole batch. Stake amount, lock end and NFT ownership are untouched; th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| recipient | string | no | Fee recipient; defaults to sender for claimPoolFeesToSelf (address) |
| votes | array | yes | — |
Use for requests such as 'show all my Ekubo STONX allocations'. The production Ekubo ve(3,3) deployment is the STONX voting system, so pass only owner to select its production chain and canonical VeToken automatically. Returns every pool, selected swap fee, NFT, applied vote weight, totals, state_id, and an onchain_validation request explicitly marked not_executed until the client runs its eth_cal
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Optional with ve_token; omit both for the production Ekubo STONX deployment |
| ve_token | string | no | Optional with chain_id; omit both for the canonical STONX VeToken 0x9d7008E169D040B6c0140eb92E7cA82B12643497 (address) |
| owner | string | yes | Connected EVM wallet whose complete Ekubo STONX/VeToken allocation should be shown; the server cannot infer 'my', so ask the user when no wallet address is available |
Return a provider-neutral STONX allocation recommendation with an emissions_efficiency KPI per pool and an executable target list (exactly 10,000 bps, at most 25 Ve33 pools). The snapshot refreshes daily; read snapshot_age_seconds. voter with ve33_emission_state makes targets voter-optimal and keeps the neutral plan as provider_targets; without the emission state, execution_ready is false and loca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| voter | object | no | With ve33_emission_state, makes targets voter-optimal |
| ve33_emission_state | object | no | {current_timestamp, current_emission_rate, total_remaining_emissions}: decimal strings decoded locally from getEmissionState (rate is Q32) via local_read_requirement; omit on the first call |
| prune_low_efficiency | boolean | no | Withhold prune candidates and redistribute their weight |
| max_emission_share_per_fee_share | number | no | Prune above this emission share / retained fee share; default 3 |
Compile a reviewed current allocation into at most 25 target pool-weight shares as one atomic batch of decodable VeToken steps. The default path only claims, splits, and votes: nothing is burned, no lock is extended, and nothing is withdrawn. The optional compact_max_lock strategy fee-safely consolidates active NFTs, extends the survivor to four years, then creates exactly one voting NFT per targe
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | VeToken owner that will execute the atomic batch (address) |
| current_state_id | string | yes | Exact state_id returned by get_ve33_allocations; preparation fails if indexed state changed (bytes32 hex) |
| targets | array | yes | At most 25 targets. compact_max_lock creates one final voting VeToken per target; preserve_existing_locks may require multiple NFTs per target to keep expiry-cohort decay proportional. |
| salt_nonce | string | yes | User-selected nonce for deterministic child VeToken IDs created by required splits (bytes32 hex) |
| strategy | string | no | Defaults to preserve_existing_locks. compact_max_lock explicitly claims fees, consolidates active stake into one surviving NFT, extends it to four years, then creates exactly one voting NFT per target |
Enumerate an owner's indexed Ekubo position NFTs with pool keys, bounds, liquidity, indexed pool state and rewards. For fresh onchain state, pass each current_state_reads[].read_calls_reference to wallet_batch_eth_call as a value in the same code block; each position's current_state.state_call_id joins results[].id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| owner | string | yes | address |
| chain_id | integer/string | no | EVM chain ID |
| state | string | no | — |
| page_size | integer | no | — |
| page | integer | no | — |
Resolve a chain/core/pool ID to its verified PoolKey, decoded config and indexed pool state. For fresh sqrtRatio, tick and liquidity, pass current_state_query.read_calls_reference unchanged to wallet_batch_eth_call.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| core_address | string | yes | address |
| pool_id | string | yes | Pool ID (decimal or 0x-hex integer) |
Return tick-level net liquidity deltas for one exact chain/core/pool ID. Accumulate the deltas in ascending tick order to reconstruct active liquidity depth.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| core_address | string | yes | address |
| pool_id | string | yes | Pool ID (decimal or 0x-hex integer) |
Discover initialized pools for one chain and Core deployment, ordered by pool_id with keyset pagination, optionally filtered by token, pair or extension. Each pool_id is re-derived from its PoolKey and each row carries the indexed state (null until indexed).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| core_address | string | yes | Core deployment (address) |
| token_a | string | no | Pools containing this token (address) |
| token_b | string | no | With token_a, the exact pair (address) |
| extension | string | no | Zero address = extensionless |
| page_size | integer | no | Pools per page |
| after_pool_id | string | no | Previous page's next_after_pool_id (decimal or 0x-hex integer) |
Pack or accept an exact PoolKey config and derive pool_id = keccak256(abi.encode(PoolKey)). The uint64 Q64 fee is string-only so JavaScript cannot silently round it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pool_key | object | yes | — |
Decode the packed bytes32 extension, exact uint64 Q64 fee, concentrated/stableswap discriminator, and tick spacing or stableswap parameters. The fee is never returned as a JSON number.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| config | string | yes | bytes32 hex |
Hydrate one owner position: pool key, bounds, liquidity, pool state, NFT metadata, history, rewards, token prices, and a pending read of current principal, fees or Ve33 rewards and owner. Pass current_state_query.read_calls_reference as a value to wallet_batch_eth_call in the same code block; current_state_query.state_call_id joins results[].id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| owner | string | yes | Current owner (address) |
| chain_id | integer/string | yes | EVM chain ID |
| positions_address | string | yes | Ekubo Positions or Ve33Positions manager (address) |
| token_id | string | yes | Position NFT ID (decimal or 0x-hex integer) |
List indexed pools for a token pair with verified PoolKeys and pool IDs, Core generation, pool type, extension, 24-hour TVL/volume/fee stats and the right Positions or Ve33Positions manager.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| token_a | string | yes | Either order (address) |
| token_b | string | yes | address |
| min_tvl_usd | number | no | TVL floor; default 0 keeps tiny pools visible |
| core_address | string | no | address |
| extension | string | no | address |
| pool_type | string | no | — |
Prepare a v3 position mint or add_liquidity, initializing a new pool at initial_tick when requested, with every approval, refund and cleanup step. Ekubo ticks use base 1.000001, so tick = ln(price in base units) x 10^6 and a Uniswap-style 1.0001 calculation is 100x too small. The token ratio follows the range and current price: do every swap first, re-read the tick with the pool's current_state_qu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| core_address | string | yes | v3 Core address |
| pool_id | string | no | Omit when pool_key is supplied (decimal or 0x-hex integer) |
| pool_key | object | no | Required for an uninitialized pool. PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| pool_initialized | boolean | no | false only for a new pool to initialize here |
| mode | string | no | — |
| token_id | string | no | add_liquidity only (decimal or 0x-hex integer) |
| tick_lower | integer | yes | — |
| tick_upper | integer | yes | — |
| initial_tick | integer | no | Uninitialized pool only: initializes at this tick |
| max_amount0 | string | yes | Max token0 base units; 0 for single-sided (decimal integer) |
| max_amount1 | string | yes | Max token1 base units; 0 for single-sided (decimal integer) |
| slippage_bps | integer | yes | User-selected liquidity slippage |
Prepare collection of all accrued fees from an owned standard position or rewards from an owned Ve33 position, keeping its liquidity and NFT. Run its current_state_query first: require every inner call to succeed and the decoded owner to equal expected_owner, and pass the decoded fees or rewards to the wallet with the plan.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | Position owner (address) |
| positions_address | string | yes | Positions or Ve33Positions manager (address) |
| token_id | string | yes | Position NFT ID (decimal or 0x-hex integer) |
| recipient | string | no | Defaults to sender (address) |
Prepare partial or full withdrawals from one or more owned positions in one plan, collecting fees or Ve33 rewards and keeping the NFTs. Read each position's current_state_query first and request no more liquidity than it decodes; require every inner call to succeed and owner to equal expected_owner. Hand the wallet every principal and earnings estimate and recipient.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | Owner of every position (address) |
| withdrawals | array | yes | One entry per position |
Prepare a direct wrapped-native deposit or withdrawal on a chain with a verified wrapped native token. The response names the wrapped token, which is not WETH everywhere (BNB Chain wraps BNB, Polygon POL, Monad MON).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| direction | string | yes | — |
| amount | string | yes | Base units (positive decimal integer) |
Prepare one atomic-capable plan of 1 to 4,096 ordered native, ERC-20, ERC-721 and ERC-1155 transfers on one EVM chain, mixed freely. Returns a compact summary and the execution_plan_reference.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | Nonzero owner of every asset (address) |
| transfers | array | yes | One to 4096 ordered, optionally mixed native, ERC-20, ERC-721, or ERC-1155 transfers |
Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earnings move together.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| positions_address | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| recipient | string | yes | address |
Run the interface-equivalent phased fix-price workflow: provide exact pending pool-price read calldata, then exact router quote calldata, then approvals and target-price execution calldata. The wallet never constructs a route or transaction.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| core_address | string | yes | address |
| pool_id | string | yes | decimal or 0x-hex integer |
| base_token | string | yes | Token; zero address = native |
| target_price | string | yes | — |
| pending_current_sqrt_ratio | string | no | decimal integer |
| quote_result | object | no | — |
| swap_deadline_minutes | integer | no | Ekubo router route deadline; default 30 |
Prepare one or more TWAMM order splits with approvals and native value as one atomic batch. details.token_id is the order's id before anything is sent: keep it, because prepare_twamm_order_collection and prepare_twamm_order_stop are keyed by it and orders are not enumerable by owner. Start and end times must be multiples of 256 seconds near the present, widening in powers of 16 further out.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| sell_token | string | yes | Token; zero address = native |
| buy_token | string | yes | Token; zero address = native |
| orders | array | yes | — |
| pending_timestamp | string | yes | decimal integer |
| deadline_seconds | integer | no | — |
| salt | string | no | Fixes the order's token id; omit to derive it from the request. Supply one only when identical orders need distinct ids (bytes32 hex) |
Prepare collection of every selected order key through the exact current or legacy Orders manager, as one atomic batch of decodable steps, with pending owner validation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| orders_address | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| order_keys | array | yes | — |
Prepare the interface's complete stop flow: collect every selected order and decrease every still-active sale rate in one atomic batch of decodable steps.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| orders_address | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| pending_timestamp | string | yes | decimal integer |
| orders | array | yes | — |
Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| pool_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| sell_token | string | yes | Token; zero address = native |
| buy_token | string | yes | Token; zero address = native |
| sell_amount | string | yes | Base units (positive decimal integer) |
| creator_fee_q32 | string | yes | decimal integer |
| min_boost_duration | integer | yes | — |
| graduation_pool_fee_q64 | string | yes | decimal integer |
| graduation_pool_tick_spacing | integer | yes | — |
| start_time | string | yes | decimal integer |
| auction_duration | integer | yes | — |
| salt | string | yes | bytes32 hex |
Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| auction_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| graduation_pool_initialized | boolean | yes | — |
| launch_pool_tick | integer | no | — |
Prepare collection of creator proceeds for an auction NFT with pending owner validation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| auction_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| pool_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| start_time | string | yes | Unix seconds (decimal integer) |
| end_time | string | yes | Unix seconds, after start_time (decimal integer) |
| amount0 | string | yes | Total token0 base units over the boost (decimal integer) |
| amount1 | string | yes | Total token1 base units over the boost (decimal integer) |
Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| token | string | yes | Token; zero address = native |
| min_capacity | integer | yes | — |
Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| approvals | array | yes | — |
Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transactions.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| owner | string | yes | address |
Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| claims | array | yes | — |
Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | address |
| ended_order_collects | array | yes | — |
| protocol_fee_pairs | array | yes | — |
| roll_tokens | array | yes | — |
Prepare the exact approval/native value and increaseStakeAmount call while preserving the existing vote and fee accounting. Non-destructive: the vote is resized rather than cleared, no fees are discarded, and no NFT is burned. The added stake takes the NFT's existing lock end, so it cannot be withdrawn before that time.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| stake_token | string | yes | address |
| ve_id | string | yes | decimal integer |
| amount | string | yes | Base units (positive decimal integer) |
Prepare fee-safe merging of one or more source NFTs into a destination, including required claims and the selected resulting vote in one atomic batch of decodable steps. Destructive to the sources: each source's stake moves to the destination, its vote is cleared, and the source NFT is burned, so its fees are claimed first and its ID is reported in the plan. The destination keeps its own lock end,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| destination_ve_id | string | yes | decimal integer |
| destination_pool_key | object | no | PoolKey {token0, token1, config} or {token0, token1, fee, tick_spacing, extension, stableswap_params?}, as read from the pool or vote |
| sources | array | yes | — |
| resulting_vote | object/null | no | — |
Prepare fee-safe withdrawal of an expired ve-token stake, claiming the active pool first when voted and returning pending owner/stake validation. Ends the position: the stake leaves Ve33 and returns to the owner and the vote is cleared. Only an expired stake can be withdrawn — Ve33 reverts with StakeNotExpired at any earlier time, and there is no early exit or penalty path.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| ve_token | string | yes | address |
| sender | string | yes | address |
| ve_id | string | yes | decimal integer |
| current_pool_key | object | no | PoolKey {token0, token1, config} or {token0, token1, fee, tick_spacing, extension, stableswap_params?}, as read from the pool or vote |
Return the interface's boosted-fee, incentive and projected ve(3,3)-emission opportunities ranked by APR, with actionable pools or pool-discovery handoffs, freshness and risk context. Call this before asking the user to choose a pair. APR is an annualized snapshot, not guaranteed yield: show its components, denominator, freshness, and range and impermanent-loss risk. If ranking_complete=false, run
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Omit for every chain |
| types | array | no | Defaults to all |
| token | string | no | Token in the pair (EVM or Starknet) (hex) |
| min_apr | number | no | APR ratio floor; 1.0 = 100% |
| limit | integer | no | — |
| ve33_emission_state | object | no | {current_timestamp, current_emission_rate, total_remaining_emissions}: decimal strings decoded locally from getEmissionState (rate is Q32) via local_read_requirement; omit on the first call |
Prepare one permissionless maybeInitializePool transaction for a v3 PoolKey and initial tick; prepare_lp_position_deposit with pool_initialized=false does the same atomically with the mint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | EVM chain ID |
| sender | string | yes | Submitting wallet (address) |
| core_address | string | yes | v3 Core address |
| pool_key | object | yes | Pool to initialize. PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| initial_tick | integer | yes | The first initialization permanently sets the price |
Locally return six major Aave V3 core deployments and a bounded set of popular reserve, aToken, and variable-debt-token addresses from a pinned official Aave address-book snapshot. This tool makes no RPC, indexer, API, or other network request. For live rates, caps, pause state, liquidity, collateral settings, eMode categories, and account data, an agent may call Aave's public GraphQL API at https
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Optional exact chain filter. Omit to return every fixed Aave V3 core market supported by the preparation tools. |
Prepare a fixed-market Aave V3 Pool supply with an exact ERC-20 approval, supply calldata, and allowance cleanup as one atomic wallet plan. No live balance, allowance, reserve, cap, pause, or rate data is queried.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet that will execute the Aave action (address) |
| asset | string | yes | Exact underlying ERC-20 address from the selected market's fixed major-reserve list |
| amount | string | yes | Positive underlying-token amount in base units (positive decimal integer) |
| on_behalf_of | string | no | aToken recipient; defaults to sender (address) |
Prepare a direct Aave V3 Pool withdrawal for a supported fixed reserve. Pass uint256 maximum as amount to request the available aToken balance. The wallet establishes balance, health-factor, collateral, and liquidity validity by exact simulation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet that will execute the Aave action (address) |
| asset | string | yes | Exact underlying ERC-20 address from the selected market's fixed major-reserve list |
| amount | string | yes | Positive underlying-token amount in base units; uint256 maximum requests all available balance (positive decimal integer) |
| recipient | string | no | Underlying-token recipient; defaults to sender (address) |
Prepare a direct Aave V3 variable-rate borrow from a supported fixed reserve, including optional on-behalf-of credit delegation. This server does not query collateral, delegation, health factor, caps, or available liquidity.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet that will execute the Aave action (address) |
| asset | string | yes | Exact underlying ERC-20 address from the selected market's fixed major-reserve list |
| amount | string | yes | Positive borrow amount in base units (positive decimal integer) |
| on_behalf_of | string | no | Debt owner; defaults to sender. A different owner must already have delegated variable debt to sender. (address) |
Prepare variable-debt repayment with underlying tokens or sender-owned aTokens. Underlying repayment carries an exact ERC-20 approval and cleanup in one atomic plan; uint256 maximum requests all available debt.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet that will execute the Aave action (address) |
| asset | string | yes | Exact underlying ERC-20 address from the selected market's fixed major-reserve list |
| amount | string | yes | Positive repayment amount in base units; uint256 maximum requests all available variable debt (positive decimal integer) |
| on_behalf_of | string | no | Debt owner; defaults to sender (address) |
| funding_source | string | no | Use underlying ERC-20 with a temporary exact Pool approval, or burn sender-owned aTokens with repayWithATokens |
Prepare setUserUseReserveAsCollateral for a supported fixed reserve. Disabling collateral can reduce health factor or revert when open debt needs it, so exact wallet simulation is mandatory.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet that will execute the Aave action (address) |
| asset | string | yes | Exact underlying ERC-20 address from the selected market's fixed major-reserve list |
| use_as_collateral | boolean | yes | True enables this supplied reserve as collateral; false disables it |
Prepare setUserEMode with a caller-supplied current uint8 category ID; zero disables eMode. Discover live category configuration through Aave's public GraphQL API directly, because this server makes no data or RPC request.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain of a fixed Aave V3 core market returned by get_aave_v3_markets |
| sender | string | yes | Wallet whose eMode selection will change (address) |
| category_id | integer | yes | Current onchain Aave eMode category; zero disables eMode. Obtain nonzero category IDs from Aave's public GraphQL API, because this server does not query them. |
Locally return a bounded, pinned catalog of listed Morpho Vault V2 deployments plus official direct-discovery guidance. This tool makes no API, RPC, indexer, or other network request. The agent must query Morpho's public GraphQL API and current onchain state directly, then intersect the result with the fixed chain, vault, and asset addresses before preparation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Optional exact chain filter for the fixed Morpho Vault V2 catalog |
Prepare an exact-approval Morpho Vault V2 deposit through the official SDK's VaultBundlesV1 route. The caller supplies a fresh RAY-scaled max share price, which is enforced onchain against ERC-4626 share-price inflation; shares are minted to the sender and the server performs no data fetch.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain returned by get_morpho_vaults |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| amount | string | yes | Positive underlying-asset amount in base units (positive decimal integer) |
| max_share_price_ray | string | yes | Maximum acceptable vault share price in RAY (1e27), derived by the agent from fresh Morpho/onchain vault state plus the user's slippage tolerance (positive decimal integer) |
| recipient | string | no | Vault-share recipient; must equal sender if supplied, because VaultBundlesV1 mints shares only to the transaction sender (address) |
| deadline | string | no | Unix timestamp after which VaultBundlesV1 rejects the deposit; defaults to two hours after preparation. One already past makes the plan a guaranteed revert. (positive decimal integer) |
Prepare a direct Morpho Vault V2 withdrawal for an exact underlying-asset amount from a fixed vault. Current shares, liquidity, permissions, and vault state are established by direct agent discovery and exact wallet simulation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain returned by get_morpho_vaults |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| amount | string | yes | Exact underlying-asset amount to withdraw in base units (positive decimal integer) |
| recipient | string | no | Underlying-asset recipient; defaults to sender (address) |
| owner | string | no | Vault-share owner; defaults to sender (address) |
Prepare a direct Morpho Vault V2 redemption for an exact share amount. Prefer redeem for full exits so the user's complete fresh share balance can be bound without asset/share rounding dust.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Chain returned by get_morpho_vaults |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| shares | string | yes | Exact vault-share amount to redeem in base units (positive decimal integer) |
| recipient | string | no | Underlying-asset recipient; defaults to sender (address) |
| owner | string | no | Vault-share owner; defaults to sender (address) |
Locally return the canonical Ethereum USDS and sUSDS addresses and direct wallet-read guidance. This server does not proxy Sky, an RPC, an indexer, or any third-party API.
No parameter schema on file.
Prepare an exact USDS approval, ERC-4626 sUSDS deposit, and allowance cleanup as one atomic wallet plan. The direct vault interface has no minimum-shares or deadline field, so a fresh preview and exact wallet simulation are mandatory.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| amount | string | yes | Exact USDS deposit amount in base units (positive decimal integer) |
| receiver | string | no | sUSDS recipient; defaults to sender (address) |
Prepare a direct sUSDS ERC-4626 withdrawal for an exact USDS amount. The server does not query current exchange rate, capacity, balance, allowance, or preview state.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| amount | string | yes | Exact USDS amount to withdraw in base units (positive decimal integer) |
| receiver | string | no | USDS recipient; defaults to sender (address) |
| owner | string | no | sUSDS owner; defaults to sender (address) |
Prepare a direct sUSDS ERC-4626 redemption for an exact share amount. Use a fresh wallet/RPC balance and preview, then require exact wallet simulation before authorization.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| shares | string | yes | Exact sUSDS share amount to redeem in base units (positive decimal integer) |
| receiver | string | no | USDS recipient; defaults to sender (address) |
| owner | string | no | sUSDS owner; defaults to sender (address) |
Locally return the Merkl Distributor address, the chains it is verified on, and how Merkl's reward fields behave; preparation is limited to those chains. No Merkl API, RPC, or indexer request.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Optional chain to check against the verified Merkl Distributor catalog |
Prepare one Distributor claim for every Merkl reward token the sender holds on a chain, from amounts and proofs fetched from https://api.merkl.xyz/v4/users/{address}/rewards/summary. The proofs are folded into their Merkle root here, and the read bundle checks it against the root the chain enforces, so Merkl's API need not be trusted. Distinct from prepare_rewards_claim, which claims Ekubo's own i
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | From the Merkl rewards summary |
| sender | string | yes | Claiming wallet; the leaf's user address |
| rewards | array | yes | One entry per reward token on this chain, all in one claim |
Locally return Aerodrome's Base contracts (AERO, veAERO, Voter, Router, v2 factory, RewardsDistributor, Slipstream, Sugar lenses), derived on chain from the Voter, plus the protocol behaviour an agent must respect. No API or RPC request. Aerodrome is Base-only; Velodrome is not prepared here.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | no | Optional chain to check against Aerodrome's Base-only deployment |
Build the eth_call bundle and decode plan for one Sugar dataset (pools, positions, veNFTs, epochs, rewards) for the wallet to run against the user's RPC; Sugar has no API. The pool, gauge, fee and bribe addresses and veNFT ids it returns are the inputs to the other prepare_aerodrome_* tools.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| dataset | string | yes | Sugar dataset |
| account | string | no | Required for positions and venfts_by_account (address) |
| pool | string | no | Required for pool_epochs and venft_pool_rewards (address) |
| venft_id | string | no | Required for venft_by_id, venft_rewards, and venft_pool_rewards (positive decimal integer) |
| limit | integer | no | Page size; at most 500 pools or 200 positions |
| offset | integer | no | — |
Prepare a v2 addLiquidity through Aerodrome's Router with exact approvals and allowance cleanup. The read bundle quotes the actual split and resolves the pool, so a pair with no pool is caught before a deposit sets its price. LP tokens earn no AERO until staked with prepare_aerodrome_gauge_deposit.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| token_a | string | yes | address |
| token_b | string | yes | address |
| stable | boolean | yes | Stable (true) or volatile pool; with the pair it identifies the pool |
| amount_a_desired | string | yes | Maximum token_a base units (positive decimal integer) |
| amount_b_desired | string | yes | Maximum token_b base units (positive decimal integer) |
| amount_a_min | string | yes | Slippage bound: minimum token_a base units consumed (positive decimal integer) |
| amount_b_min | string | yes | Minimum token_b base units consumed (positive decimal integer) |
| deadline | string | yes | Near-term unix timestamp; a past one makes the plan revert (positive decimal integer) |
| recipient | string | no | Defaults to sender (address) |
Prepare a v2 removeLiquidity that burns LP tokens back into the underlying pair, with the LP-token approval the router needs and an allowance cleanup after. Phased, because the token being approved is the pool and this server resolves Aerodrome addresses by reading them: call it without lp_token to get the pool read back, then again with the resolved address for the complete atomic plan. An LP bal
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| token_a | string | yes | address |
| token_b | string | yes | address |
| stable | boolean | yes | Stable (true) or volatile pool |
| liquidity | string | yes | Exact LP token amount to burn in base units (positive decimal integer) |
| amount_a_min | string | yes | Minimum token_a base units to receive (positive decimal integer) |
| amount_b_min | string | yes | Minimum token_b base units to receive (positive decimal integer) |
| deadline | string | yes | Near-term unix timestamp; a past one makes the plan revert (positive decimal integer) |
| recipient | string | no | Defaults to sender (address) |
| lp_token | string | no | Pool address from this tool's first-phase read; omit to get that read, supply it for the full plan |
Stake v2 LP tokens into a pool's gauge to earn AERO emissions, with the LP-token approval the gauge needs and an allowance cleanup after. Phased, because which token the gauge pulls is its own stakingToken: call it without lp_token to get that read back, then again with the resolved address for the complete atomic plan. Staking redirects that position's trading fees to the pool's voters, so it tra
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| gauge | string | yes | Gauge from a Sugar pools read (address) |
| amount | string | yes | Exact LP token amount to stake in base units (positive decimal integer) |
| lp_token | string | no | Gauge stakingToken from this tool's first-phase read; omit to get that read, supply it for the full plan (address) |
Unstake v2 LP tokens from a gauge. This returns the LP token, not the underlying pair, and it does not claim AERO: the read bundle reports what is still earned so it is not silently left behind.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| gauge | string | yes | Gauge from a Sugar pools read (address) |
| amount | string | yes | Exact LP token amount to unstake in base units (positive decimal integer) |
Claim accrued AERO from a gauge. getReward credits its account argument rather than the sender, so a claim can pay a different address than the one paying gas; the plan states which. A claim with nothing earned succeeds and transfers nothing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| gauge | string | yes | Gauge from a Sugar pools read (address) |
| account | string | no | Account whose emissions are claimed; defaults to sender. getReward credits this address, so a non-sender value pays someone else. |
Build one veAERO escrow action: create a lock, add AERO to one, extend it, switch permanent locking on or off, or withdraw an expired one. Durations are measured from now and floored to a week boundary, so anything under a week is refused rather than signed. The read bundle returns ownership and the lock's (amount, end, isPermanent) so an impossible action — withdrawing an unexpired or permanent l
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| action | string | yes | Which veAERO lock action to build |
| amount | string | no | AERO amount in base units; required for create and increase_amount (positive decimal integer) |
| lock_duration | string | no | Lock length in seconds measured from now, required for create and extend. The escrow floors it to a week boundary and caps it at four years. (positive decimal integer) |
| venft_id | string | no | veNFT token id; required for every action but create (positive decimal integer) |
Cast one veNFT's gauge vote, or reset it. Weights are relative shares of voting power, not amounts, and the allocation replaces any previous vote entirely — a pool left out is voted zero. A veNFT may vote once per weekly epoch and reverts on a second attempt, so the read bundle returns lastVoted along with each pool's gauge and liveness. Voting also locks the NFT against withdrawal until it is res
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| venft_id | string | yes | veNFT token id casting the vote (positive decimal integer) |
| pools | array | no | The complete allocation. It replaces any previous vote, so a pool left out is voted zero rather than left alone. |
| reset | boolean | no | Clear this NFT's votes instead of casting new ones; required before withdrawing a voted NFT |
Claim a veNFT's voting rewards — trading fees, bribes, or both — and optionally the RewardsDistributor rebase, as one plan. The fee and bribe contract addresses are required inputs because they are per-pool contracts that only a Sugar rewards read returns; this server cannot derive them, and a wrong address claims nothing rather than failing loudly. Distinct from prepare_aerodrome_gauge_claim, whi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Base (8453) only |
| sender | string | yes | address |
| venft_id | string | yes | veNFT token id whose rewards are claimed (positive decimal integer) |
| fees | array | no | Fee contracts and their tokens, taken from a Sugar venft_rewards read |
| bribes | array | no | Bribe contracts and their tokens, taken from a Sugar venft_rewards read |
| claim_rebase | boolean | no | Also claim the RewardsDistributor rebase, which compounds into the lock |
Decode the packed PositionInfo returned by wallet reads into signed tick bounds, subscriber flag and the truncated pool-ID prefix. This is local integer decoding, not a state query.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| info | string | yes | decimal integer |
Calculate V3/V4 range liquidity, rounded mint/burn amounts and explicit token bounds from a current sqrt-price snapshot and raw token budgets, or an exact liquidity amount. Fees are excluded. Obtain current state using prepare_uniswap_reads.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tick_lower | integer | yes | — |
| tick_upper | integer | yes | — |
| tick_spacing | integer | yes | — |
| sqrt_price_x96 | string | yes | decimal integer |
| amount0 | string | yes | decimal integer |
| amount1 | string | yes | decimal integer |
| liquidity | string | no | decimal integer |
| slippage_bps | integer | no | — |
Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses.
No parameter schema on file.
Fetch indexed V2, V3 or V4 pools ranked by TVL from Uniswap's interface API. Filter by chain and token; paginate using the last pool's TVL as tvl_cursor. Returns token symbols and decimals, liquidity and daily volume.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| version | string | yes | — |
| token_address | string | no | address |
| first | integer | no | — |
| tvl_cursor | number | no | — |
Fetch indexed pool details, currencies, fee, TVL, volume and supplies. V4 takes a bytes32 pool ID; V2/V3 take an address. Use prepare_uniswap_reads for current chain state.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| version | string | yes | — |
| pool | string | yes | — |
Fetch paginated initialized ticks and exact liquidityNet/liquidityGross strings for V3/V4 liquidity depth charts. first/skip bound each request; combine with current pool liquidity and tick from prepare_uniswap_reads. Indexer data can lag.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| version | string | yes | — |
| pool | string | yes | — |
| first | integer | no | — |
| skip | integer | no | — |
Fetch timestamped token0/token1 prices and USD volume history over the requested duration from the same GraphQL fields as the open source Uniswap interface. Empty series means no indexed data, never zero volume.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| version | string | yes | — |
| pool | string | yes | — |
| duration | string | no | — |
Return exact wallet read bundles for pool state, reserves, positions and ownership. V3 supports bounded owner-index enumeration. V4 requires known token IDs. Verify returned tokens, fee, factory/pool key, tick spacing and owner before preparing liquidity operations.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| version | string | yes | — |
| token0 | string | yes | address |
| token1 | string | yes | address |
| fee | integer | no | — |
| tick_spacing | integer | no | — |
| hooks | string | no | address |
| pool_address | string | no | address |
| owner | string | no | address |
| token_ids | array | no | — |
| owner_indices | array | no | — |
Add liquidity or create a V2 pair with exact token approvals and cleanup. Amounts are raw units; sorted token0/token1 and explicit minimum outputs are required. use_native pays ETH for the wrapped-native side. Execute atomically through the wallet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| token0 | string | yes | address |
| token1 | string | yes | address |
| amount0 | string | yes | decimal integer |
| amount1 | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| use_native | boolean | no | — |
Burn an exact LP amount through the canonical V2 router; realize accrued fees with principal. Raw minima protect withdrawal proceeds. LP token address is derived from the factory. Optional native unwrapping. V2 has no separate fee claim. Requires atomic LP approval and cleanup.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| token0 | string | yes | address |
| token1 | string | yes | address |
| liquidity | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| unwrap_native | boolean | no | — |
Mint a ranged NFT or increase token_id with raw desired amounts and minima. First verify factory fee tick spacing and position tokens/range. Optional initialize_sqrt_price_x96 creates the pool; use_native pays ETH and refunds excess. Exact approvals and cleanup require an atomic wallet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| token0 | string | yes | address |
| token1 | string | yes | address |
| amount0 | string | yes | decimal integer |
| amount1 | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| tick_lower | integer | yes | — |
| tick_upper | integer | yes | — |
| tick_spacing | integer | yes | — |
| fee | integer | yes | — |
| token_id | string | no | decimal integer |
| use_native | boolean | no | — |
| initialize_sqrt_price_x96 | string | no | decimal integer |
Decrease exact uint128 liquidity, collect principal and all accrued fees, and optionally burn a fully emptied NFT. Raw minima protect withdrawal proceeds. Optional unwrap_native requires verified position currencies.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| liquidity | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| burn | boolean | no | — |
| unwrap_native | boolean | no | — |
Collect all owed fees without removing liquidity, optionally unwrapping WETH. Verify NFT ownership and currencies first. V3 collect has no onchain deadline; regenerate and simulate before execution.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| unwrap_native | boolean | no | — |
Mint or increase an exact liquidity amount using raw uint128 token maxima. Zero token0 means native ETH. Uses exact ERC20 and Permit2 approvals with cleanup, settles both signs of accrued-fee deltas on increase, and refunds native surplus. Verify NFT pool key/range and hook behavior; hook_data is forwarded unchanged. Optional pool initialization.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| pool_id | string | yes | bytes32 hex |
| token0 | string | yes | address |
| token1 | string | yes | address |
| fee | integer | yes | — |
| tick_spacing | integer | yes | — |
| hooks | string | no | address |
| hook_data | string | no | hex bytes |
| tick_lower | integer | yes | — |
| tick_upper | integer | yes | — |
| liquidity | string | yes | decimal integer |
| amount0_max | string | yes | decimal integer |
| amount1_max | string | yes | decimal integer |
| token_id | string | no | decimal integer |
| initialize_sqrt_price_x96 | string | no | decimal integer |
Remove liquidity and take principal plus fees to the sender. Optional burn:true requires liquidity:0 and withdraws the entire NFT with minima applied to the full position. Requires exact pool currencies and hook data; uint128 minima bound principal outputs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| pool_id | string | yes | bytes32 hex |
| token0 | string | yes | address |
| token1 | string | yes | address |
| fee | integer | yes | — |
| tick_spacing | integer | yes | — |
| hooks | string | no | address |
| hook_data | string | no | hex bytes |
| token_id | string | yes | decimal integer |
| liquidity | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| burn | boolean | no | — |
Poke a V4 position with zero liquidity decrease then take both currencies to the sender. Principal remains invested. Verify ownership, pool key and hook behavior first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | string | yes | — |
| sender | string | yes | address |
| deadline | string | yes | decimal integer |
| pool_id | string | yes | bytes32 hex |
| token0 | string | yes | address |
| token1 | string | yes | address |
| fee | integer | yes | — |
| tick_spacing | integer | yes | — |
| hooks | string | no | address |
| hook_data | string | no | hex bytes |
| token_id | string | yes | decimal integer |
Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or indexer request.
No parameter schema on file.
Prepare the canonical Lido submit call with exact native ETH value and an explicit or zero referral. The agent must read current staking pause and limit state directly; the wallet then simulates the exact transaction.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| amount | string | yes | Exact native ETH stake amount in wei (positive decimal integer) |
| referral | string | no | Optional Lido referral address; defaults to zero address |
Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| amount | string | yes | Exact stETH amount to wrap in base units (positive decimal integer) |
Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| amount | string | yes | Exact wstETH amount to unwrap in base units (positive decimal integer) |
Prepare one or more bounded stETH withdrawal requests with an exact queue approval and cleanup. This irreversible asynchronous action mints unstETH NFTs, stops rewards while queued, and can settle below 1:1 after extraordinary losses; wallet simulation and clear user review are required.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| amounts | array | yes | One to 64 stETH request amounts, each from 100 wei through 1000 stETH |
| owner | string | no | Recipient/owner of the unstETH request NFTs; defaults to sender (address) |
Prepare claimWithdrawal for one finalized, unclaimed unstETH request ID owned by the sender. The agent must verify ownership and finalization directly through the user's wallet/RPC before preparation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain_id | integer/string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| request_id | string | yes | Finalized, unclaimed unstETH NFT request ID owned by sender (positive decimal integer) |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Ekubo Protocol or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_tokens | no tags | |
| export_tokens | no tags | |
| get_token | untrusted-inputsensitive-source | untrusted-input: keyword "fetch"; sensitive-source: keyword "get_token" |
| get_tokens | untrusted-inputsensitive-source | untrusted-input: keyword "fetch"; sensitive-source: keyword "get_token" |
| get_quotes_with_plans | no tags | |
| get_value_transfer_status | no tags | |
| prepare_ve33_vote | no tags | |
| prepare_ve33_extend | no tags | |
| prepare_ve33_stake | no tags | |
| prepare_ve33_split | no tags | |
| prepare_ve33_claim_fees | external-sink | external-sink: parameter "recipient" |
| prepare_ve33_reinvest | no tags | |
| prepare_ve33_claim_all_fees | external-sink | external-sink: parameter "recipient" |
| prepare_ve33_clear_vote | external-sink | external-sink: parameter "recipient" |
| get_ve33_allocations | no tags | |
| get_stonx_allocation_recommendation | no tags | |
| prepare_ve33_reallocation | no tags | |
| get_positions_by_owner | no tags | |
| get_pool | no tags | |
| get_pool_liquidity | no tags | |
| list_pool_keys | no tags | |
| derive_pool_id | no tags | |
| decode_pool_config | no tags | |
| get_position | no tags | |
| get_position_pool_candidates | no tags | |
| prepare_lp_position_deposit | no tags | |
| prepare_lp_position_earnings_claim | external-sink | external-sink: parameter "recipient" |
| prepare_lp_position_withdraw | no tags | |
| prepare_wrap_unwrap | no tags | |
| prepare_transfers | no tags | |
| prepare_lp_position_transfer | external-sink | external-sink: parameter "recipient" |
| prepare_fix_pool_price | no tags | |
| prepare_twamm_order | no tags | |
| prepare_twamm_order_collection | no tags | |
| prepare_twamm_order_stop | no tags | |
| prepare_twamm_virtual_orders | no tags | |
| prepare_auction_create | no tags | |
| prepare_auction_complete | no tags | |
| prepare_auction_creator_proceeds | no tags | |
| prepare_manual_pool_boost | no tags | |
| prepare_oracle_capacity_expansion | no tags | |
| prepare_approval_revocations | no tags | |
| get_rewards_claims_by_owner | untrusted-input | untrusted-input: keyword "fetch" |
| prepare_rewards_claim | no tags | |
| prepare_revenue_buybacks | no tags | |
| prepare_ve33_increase_stake | no tags | |
| prepare_ve33_merge | no tags | |
| prepare_ve33_withdraw | no tags | |
| get_liquidity_opportunities | no tags | |
| prepare_pool_initialization | no tags | |
| get_aave_v3_markets | no tags | |
| prepare_aave_v3_supply | no tags | |
| prepare_aave_v3_withdraw | external-sink | external-sink: parameter "recipient" |
| prepare_aave_v3_borrow | no tags | |
| prepare_aave_v3_repay | no tags | |
| prepare_aave_v3_collateral | no tags | |
| prepare_aave_v3_emode | no tags | |
| get_morpho_vaults | no tags | |
| prepare_morpho_vault_deposit | untrusted-inputexternal-sink | untrusted-input: keyword "fetch"; external-sink: parameter "recipient" |
| prepare_morpho_vault_withdraw | external-sink | external-sink: parameter "recipient" |
| prepare_morpho_vault_redeem | external-sink | external-sink: parameter "recipient" |
| get_sky_savings_deployment | no tags | |
| prepare_sky_savings_deposit | no tags | |
| prepare_sky_savings_withdraw | no tags | |
| prepare_sky_savings_redeem | no tags | |
| get_merkl_deployment | no tags | |
| prepare_merkl_claim | no tags | |
| get_aerodrome_deployment | no tags | |
| prepare_aerodrome_sugar_reads | no tags | |
| prepare_aerodrome_liquidity_deposit | external-sink | external-sink: parameter "recipient" |
| prepare_aerodrome_liquidity_withdraw | external-sink | external-sink: parameter "recipient" |
| prepare_aerodrome_gauge_deposit | no tags | |
| prepare_aerodrome_gauge_withdraw | no tags | |
| prepare_aerodrome_gauge_claim | no tags | |
| prepare_aerodrome_lock | no tags | |
| prepare_aerodrome_vote | no tags | |
| prepare_aerodrome_incentive_claim | no tags | |
| decode_uniswap_v4_position_info | no tags | |
| quote_uniswap_liquidity | no tags | |
| get_uniswap_deployments | no tags | |
| discover_uniswap_pools | untrusted-input | untrusted-input: keyword "fetch" |
| get_uniswap_pool | untrusted-input | untrusted-input: keyword "fetch" |
| get_uniswap_pool_ticks | untrusted-input | untrusted-input: keyword "fetch" |
| get_uniswap_charts | untrusted-input | untrusted-input: keyword "fetch" |
| prepare_uniswap_reads | no tags | |
| prepare_uniswap_v2_add_liquidity | no tags | |
| prepare_uniswap_v2_remove_liquidity | no tags | |
| prepare_uniswap_v3_add_liquidity | no tags | |
| prepare_uniswap_v3_remove_liquidity | no tags | |
| prepare_uniswap_v3_collect_fees | no tags | |
| prepare_uniswap_v4_add_liquidity | no tags | |
| prepare_uniswap_v4_remove_liquidity | no tags | |
| prepare_uniswap_v4_collect_fees | no tags | |
| get_lido_deployment | no tags | |
| prepare_lido_stake | no tags | |
| prepare_lido_wrap | no tags | |
| prepare_lido_unwrap | no tags | |
| prepare_lido_withdrawal_request | no tags | |
| prepare_lido_withdrawal_claim | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.54.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Ekubo Protocol can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.