{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_22egy2ee4sd2","handle":"ekubo-protocol","url":"https://wellknown.network/agents/ekubo-protocol","links":{"self":"https://wellknown.network/agents/ekubo-protocol/record.json","html":"https://wellknown.network/agents/ekubo-protocol","markdown":"https://wellknown.network/agents/ekubo-protocol/record.md","api":"https://wellknown.network/api/v1/agents/ekubo-protocol","status":"https://wellknown.network/api/v1/agents/ekubo-protocol/status","claim":"https://wellknown.network/agents/ekubo-protocol/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/ekubo-protocol/claim.json","badge":"https://wellknown.network/agents/ekubo-protocol/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/ekubo-protocol/history","tools":"https://wellknown.network/api/v1/agents/ekubo-protocol/tools"},"ard":{"identifier":"urn:air:mcp.ekubo.org:server:ekubo-protocol","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Ekubo Protocol","summary":"Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols.","description":"Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols.","publisher":{"name":"EkuboProtocol","url":null},"homepage":"https://docs.ekubo.org/products/mcp-server/","repository":"https://github.com/EkuboProtocol/ekubo-mcp-server","version":"0.54.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.ekubo.org/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-11-04T16:38:12.078573Z","publishedAt":"2026-11-04T16:38:12.078573Z","registryName":"io.github.EkuboProtocol/ekubo"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":1,"provenance":"derived"},{"slug":"finance.markets","name":"Markets & Trading","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":0.977,"provenance":"derived"},{"slug":"commerce.pricing","name":"Pricing & Quotes","confidence":0.859,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.569,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":0.554,"provenance":"derived"},{"slug":"productivity.hr","name":"HR & Recruiting","confidence":0.554,"provenance":"derived"},{"slug":"finance.accounting","name":"Accounting","confidence":0.554,"provenance":"derived"}],"categories":["analytics","commerce","dev","finance","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 8h ago.","lastOkAt":"2026-11-06T06:27:58.189Z","lastProbedAt":"2026-11-06T06:27:58.189Z","statusComputedAt":"2026-11-06T06:31:12.229Z","reliability30d":{"probes":2,"successRate":1,"p50Ms":67,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":2,"ok":2,"authBoundaryOk":0,"serviceOk":2,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-06T06:27:58.189Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":80,"error":null,"detail":{"tools":[{"name":"list_tokens","description":"First step for symbol-based swaps, including tokenized stocks and stablecoins: list canonical Ekubo tokens by descending visibility_priority, so the preferred t"},{"name":"export_tokens","description":"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 u"},{"name":"get_token","description":"Fetch canonical token metadata for an exact chain and address."},{"name":"get_tokens","description":"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."},{"name":"get_quotes_with_plans","description":"A quote, execution plan, simulation or wallet approval is not permission to trade. Robinhood Stock Tokens are tokenised debt securities subject to issuer restri"},{"name":"get_value_transfer_status","description":"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 se"},{"name":"prepare_ve33_vote","description":"Compile one actively voted ve-token into multiple allocations. Unconditionally claims its current pool first, then splits and changes votes in one atomic batch "},{"name":"prepare_ve33_extend","description":"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 "},{"name":"prepare_ve33_stake","description":"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 "},{"name":"prepare_ve33_split","description":"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"},{"name":"prepare_ve33_claim_fees","description":"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, an"},{"name":"prepare_ve33_reinvest","description":"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"},{"name":"prepare_ve33_claim_all_fees","description":"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"},{"name":"prepare_ve33_clear_vote","description":"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 instea"},{"name":"get_ve33_allocations","description":"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"},{"name":"get_stonx_allocation_recommendation","description":"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 2"},{"name":"prepare_ve33_reallocation","description":"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, sp"},{"name":"get_positions_by_owner","description":"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_s"},{"name":"get_pool","description":"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.r"},{"name":"get_pool_liquidity","description":"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."},{"name":"list_pool_keys","description":"Discover initialized pools for one chain and Core deployment, ordered by pool_id with keyset pagination, optionally filtered by token, pair or extension. Each p"},{"name":"derive_pool_id","description":"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 roun"},{"name":"decode_pool_config","description":"Decode the packed bytes32 extension, exact uint64 Q64 fee, concentrated/stableswap discriminator, and tick spacing or stableswap parameters. The fee is never re"},{"name":"get_position","description":"Hydrate one owner position: pool key, bounds, liquidity, pool state, NFT metadata, history, rewards, token prices, and a pending read of current principal, fees"},{"name":"get_position_pool_candidates","description":"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 Posit"},{"name":"prepare_lp_position_deposit","description":"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 u"},{"name":"prepare_lp_position_earnings_claim","description":"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_st"},{"name":"prepare_lp_position_withdraw","description":"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 cur"},{"name":"prepare_wrap_unwrap","description":"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 e"},{"name":"prepare_transfers","description":"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 a"},{"name":"prepare_lp_position_transfer","description":"Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earning"},{"name":"prepare_fix_pool_price","description":"Run the interface-equivalent phased fix-price workflow: provide exact pending pool-price read calldata, then exact router quote calldata, then approvals and tar"},{"name":"prepare_twamm_order","description":"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,"},{"name":"prepare_twamm_order_collection","description":"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 va"},{"name":"prepare_twamm_order_stop","description":"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."},{"name":"prepare_twamm_virtual_orders","description":"Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool."},{"name":"prepare_auction_create","description":"Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID."},{"name":"prepare_auction_complete","description":"Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch."},{"name":"prepare_auction_creator_proceeds","description":"Prepare collection of creator proceeds for an auction NFT with pending owner validation."},{"name":"prepare_manual_pool_boost","description":"Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface."},{"name":"prepare_oracle_capacity_expansion","description":"Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token."},{"name":"prepare_approval_revocations","description":"Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list."},{"name":"get_rewards_claims_by_owner","description":"Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transaction"},{"name":"prepare_rewards_claim","description":"Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims."},{"name":"prepare_revenue_buybacks","description":"Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps."},{"name":"prepare_ve33_increase_stake","description":"Prepare the exact approval/native value and increaseStakeAmount call while preserving the existing vote and fee accounting. Non-destructive: the vote is resized"},{"name":"prepare_ve33_merge","description":"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 decodab"},{"name":"prepare_ve33_withdraw","description":"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 posit"},{"name":"get_liquidity_opportunities","description":"Return the interface's boosted-fee, incentive and projected ve(3,3)-emission opportunities ranked by APR, with actionable pools or pool-discovery handoffs, fres"},{"name":"prepare_pool_initialization","description":"Prepare one permissionless maybeInitializePool transaction for a v3 PoolKey and initial tick; prepare_lp_position_deposit with pool_initialized=false does the s"},{"name":"get_aave_v3_markets","description":"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 ad"},{"name":"prepare_aave_v3_supply","description":"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, all"},{"name":"prepare_aave_v3_withdraw","description":"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 estab"},{"name":"prepare_aave_v3_borrow","description":"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 coll"},{"name":"prepare_aave_v3_repay","description":"Prepare variable-debt repayment with underlying tokens or sender-owned aTokens. Underlying repayment carries an exact ERC-20 approval and cleanup in one atomic "},{"name":"prepare_aave_v3_collateral","description":"Prepare setUserUseReserveAsCollateral for a supported fixed reserve. Disabling collateral can reduce health factor or revert when open debt needs it, so exact w"},{"name":"prepare_aave_v3_emode","description":"Prepare setUserEMode with a caller-supplied current uint8 category ID; zero disables eMode. Discover live category configuration through Aave's public GraphQL A"},{"name":"get_morpho_vaults","description":"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"},{"name":"prepare_morpho_vault_deposit","description":"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"},{"name":"prepare_morpho_vault_withdraw","description":"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"},{"name":"prepare_morpho_vault_redeem","description":"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 with"},{"name":"get_sky_savings_deployment","description":"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"},{"name":"prepare_sky_savings_deposit","description":"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 dea"},{"name":"prepare_sky_savings_withdraw","description":"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 s"},{"name":"prepare_sky_savings_redeem","description":"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 au"},{"name":"get_merkl_deployment","description":"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 Mer"},{"name":"prepare_merkl_claim","description":"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/{add"},{"name":"get_aerodrome_deployment","description":"Locally return Aerodrome's Base contracts (AERO, veAERO, Voter, Router, v2 factory, RewardsDistributor, Slipstream, Sugar lenses), derived on chain from the Vot"},{"name":"prepare_aerodrome_sugar_reads","description":"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 "},{"name":"prepare_aerodrome_liquidity_deposit","description":"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, "},{"name":"prepare_aerodrome_liquidity_withdraw","description":"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. Pha"},{"name":"prepare_aerodrome_gauge_deposit","description":"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 "},{"name":"prepare_aerodrome_gauge_withdraw","description":"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 "},{"name":"prepare_aerodrome_gauge_claim","description":"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; "},{"name":"prepare_aerodrome_lock","description":"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 measure"},{"name":"prepare_aerodrome_vote","description":"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 p"},{"name":"prepare_aerodrome_incentive_claim","description":"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"},{"name":"decode_uniswap_v4_position_info","description":"Decode the packed PositionInfo returned by wallet reads into signed tick bounds, subscriber flag and the truncated pool-ID prefix. This is local integer decodin"},{"name":"quote_uniswap_liquidity","description":"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 liqui"},{"name":"get_uniswap_deployments","description":"Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses."},{"name":"discover_uniswap_pools","description":"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. Return"},{"name":"get_uniswap_pool","description":"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 "},{"name":"get_uniswap_pool_ticks","description":"Fetch paginated initialized ticks and exact liquidityNet/liquidityGross strings for V3/V4 liquidity depth charts. first/skip bound each request; combine with cu"},{"name":"get_uniswap_charts","description":"Fetch timestamped token0/token1 prices and USD volume history over the requested duration from the same GraphQL fields as the open source Uniswap interface. Emp"},{"name":"prepare_uniswap_reads","description":"Return exact wallet read bundles for pool state, reserves, positions and ownership. V3 supports bounded owner-index enumeration. V4 requires known token IDs. Ve"},{"name":"prepare_uniswap_v2_add_liquidity","description":"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."},{"name":"prepare_uniswap_v2_remove_liquidity","description":"Burn an exact LP amount through the canonical V2 router; realize accrued fees with principal. Raw minima protect withdrawal proceeds. LP token address is derive"},{"name":"prepare_uniswap_v3_add_liquidity","description":"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"},{"name":"prepare_uniswap_v3_remove_liquidity","description":"Decrease exact uint128 liquidity, collect principal and all accrued fees, and optionally burn a fully emptied NFT. Raw minima protect withdrawal proceeds. Optio"},{"name":"prepare_uniswap_v3_collect_fees","description":"Collect all owed fees without removing liquidity, optionally unwrapping WETH. Verify NFT ownership and currencies first. V3 collect has no onchain deadline; reg"},{"name":"prepare_uniswap_v4_add_liquidity","description":"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, se"},{"name":"prepare_uniswap_v4_remove_liquidity","description":"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 ful"},{"name":"prepare_uniswap_v4_collect_fees","description":"Poke a V4 position with zero liquidity decrease then take both currencies to the sender. Principal remains invested. Verify ownership, pool key and hook behavio"},{"name":"get_lido_deployment","description":"Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or in"},{"name":"prepare_lido_stake","description":"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 d"},{"name":"prepare_lido_wrap","description":"Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan."},{"name":"prepare_lido_unwrap","description":"Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender."},{"name":"prepare_lido_withdrawal_request","description":"Prepare one or more bounded stETH withdrawal requests with an exact queue approval and cleanup. This irreversible asynchronous action mints unstETH NFTs, stops "},{"name":"prepare_lido_withdrawal_claim","description":"Prepare claimWithdrawal for one finalized, unclaimed unstETH request ID owned by the sender. The agent must verify ownership and finalization directly through t"}],"toolCount":99,"toolsHash":"09e31b7cc1d24d33b2470f07778b1583d2f9e350d0f4ab3e7f688f977507a8c5","serverName":"ekubo","capabilities":["tools","resources","completions"],"serverVersion":"0.54.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T21:29:56.389Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":54,"error":null,"detail":{"tools":[{"name":"list_tokens","description":"First step for symbol-based swaps, including tokenized stocks and stablecoins: list canonical Ekubo tokens by descending visibility_priority, so the preferred t"},{"name":"export_tokens","description":"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 u"},{"name":"get_token","description":"Fetch canonical token metadata for an exact chain and address."},{"name":"get_tokens","description":"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."},{"name":"get_quotes_with_plans","description":"A quote, execution plan, simulation or wallet approval is not permission to trade. Robinhood Stock Tokens are tokenised debt securities subject to issuer restri"},{"name":"get_value_transfer_status","description":"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 se"},{"name":"prepare_ve33_vote","description":"Compile one actively voted ve-token into multiple allocations. Unconditionally claims its current pool first, then splits and changes votes in one atomic batch "},{"name":"prepare_ve33_extend","description":"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 "},{"name":"prepare_ve33_stake","description":"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 "},{"name":"prepare_ve33_split","description":"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"},{"name":"prepare_ve33_claim_fees","description":"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, an"},{"name":"prepare_ve33_reinvest","description":"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"},{"name":"prepare_ve33_claim_all_fees","description":"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"},{"name":"prepare_ve33_clear_vote","description":"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 instea"},{"name":"get_ve33_allocations","description":"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"},{"name":"get_stonx_allocation_recommendation","description":"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 2"},{"name":"prepare_ve33_reallocation","description":"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, sp"},{"name":"get_positions_by_owner","description":"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_s"},{"name":"get_pool","description":"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.r"},{"name":"get_pool_liquidity","description":"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."},{"name":"list_pool_keys","description":"Discover initialized pools for one chain and Core deployment, ordered by pool_id with keyset pagination, optionally filtered by token, pair or extension. Each p"},{"name":"derive_pool_id","description":"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 roun"},{"name":"decode_pool_config","description":"Decode the packed bytes32 extension, exact uint64 Q64 fee, concentrated/stableswap discriminator, and tick spacing or stableswap parameters. The fee is never re"},{"name":"get_position","description":"Hydrate one owner position: pool key, bounds, liquidity, pool state, NFT metadata, history, rewards, token prices, and a pending read of current principal, fees"},{"name":"get_position_pool_candidates","description":"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 Posit"},{"name":"prepare_lp_position_deposit","description":"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 u"},{"name":"prepare_lp_position_earnings_claim","description":"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_st"},{"name":"prepare_lp_position_withdraw","description":"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 cur"},{"name":"prepare_wrap_unwrap","description":"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 e"},{"name":"prepare_transfers","description":"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 a"},{"name":"prepare_lp_position_transfer","description":"Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earning"},{"name":"prepare_fix_pool_price","description":"Run the interface-equivalent phased fix-price workflow: provide exact pending pool-price read calldata, then exact router quote calldata, then approvals and tar"},{"name":"prepare_twamm_order","description":"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,"},{"name":"prepare_twamm_order_collection","description":"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 va"},{"name":"prepare_twamm_order_stop","description":"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."},{"name":"prepare_twamm_virtual_orders","description":"Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool."},{"name":"prepare_auction_create","description":"Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID."},{"name":"prepare_auction_complete","description":"Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch."},{"name":"prepare_auction_creator_proceeds","description":"Prepare collection of creator proceeds for an auction NFT with pending owner validation."},{"name":"prepare_manual_pool_boost","description":"Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface."},{"name":"prepare_oracle_capacity_expansion","description":"Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token."},{"name":"prepare_approval_revocations","description":"Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list."},{"name":"get_rewards_claims_by_owner","description":"Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transaction"},{"name":"prepare_rewards_claim","description":"Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims."},{"name":"prepare_revenue_buybacks","description":"Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps."},{"name":"prepare_ve33_increase_stake","description":"Prepare the exact approval/native value and increaseStakeAmount call while preserving the existing vote and fee accounting. Non-destructive: the vote is resized"},{"name":"prepare_ve33_merge","description":"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 decodab"},{"name":"prepare_ve33_withdraw","description":"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 posit"},{"name":"get_liquidity_opportunities","description":"Return the interface's boosted-fee, incentive and projected ve(3,3)-emission opportunities ranked by APR, with actionable pools or pool-discovery handoffs, fres"},{"name":"prepare_pool_initialization","description":"Prepare one permissionless maybeInitializePool transaction for a v3 PoolKey and initial tick; prepare_lp_position_deposit with pool_initialized=false does the s"},{"name":"get_aave_v3_markets","description":"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 ad"},{"name":"prepare_aave_v3_supply","description":"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, all"},{"name":"prepare_aave_v3_withdraw","description":"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 estab"},{"name":"prepare_aave_v3_borrow","description":"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 coll"},{"name":"prepare_aave_v3_repay","description":"Prepare variable-debt repayment with underlying tokens or sender-owned aTokens. Underlying repayment carries an exact ERC-20 approval and cleanup in one atomic "},{"name":"prepare_aave_v3_collateral","description":"Prepare setUserUseReserveAsCollateral for a supported fixed reserve. Disabling collateral can reduce health factor or revert when open debt needs it, so exact w"},{"name":"prepare_aave_v3_emode","description":"Prepare setUserEMode with a caller-supplied current uint8 category ID; zero disables eMode. Discover live category configuration through Aave's public GraphQL A"},{"name":"get_morpho_vaults","description":"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"},{"name":"prepare_morpho_vault_deposit","description":"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"},{"name":"prepare_morpho_vault_withdraw","description":"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"},{"name":"prepare_morpho_vault_redeem","description":"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 with"},{"name":"get_sky_savings_deployment","description":"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"},{"name":"prepare_sky_savings_deposit","description":"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 dea"},{"name":"prepare_sky_savings_withdraw","description":"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 s"},{"name":"prepare_sky_savings_redeem","description":"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 au"},{"name":"get_merkl_deployment","description":"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 Mer"},{"name":"prepare_merkl_claim","description":"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/{add"},{"name":"get_aerodrome_deployment","description":"Locally return Aerodrome's Base contracts (AERO, veAERO, Voter, Router, v2 factory, RewardsDistributor, Slipstream, Sugar lenses), derived on chain from the Vot"},{"name":"prepare_aerodrome_sugar_reads","description":"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 "},{"name":"prepare_aerodrome_liquidity_deposit","description":"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, "},{"name":"prepare_aerodrome_liquidity_withdraw","description":"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. Pha"},{"name":"prepare_aerodrome_gauge_deposit","description":"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 "},{"name":"prepare_aerodrome_gauge_withdraw","description":"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 "},{"name":"prepare_aerodrome_gauge_claim","description":"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; "},{"name":"prepare_aerodrome_lock","description":"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 measure"},{"name":"prepare_aerodrome_vote","description":"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 p"},{"name":"prepare_aerodrome_incentive_claim","description":"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"},{"name":"decode_uniswap_v4_position_info","description":"Decode the packed PositionInfo returned by wallet reads into signed tick bounds, subscriber flag and the truncated pool-ID prefix. This is local integer decodin"},{"name":"quote_uniswap_liquidity","description":"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 liqui"},{"name":"get_uniswap_deployments","description":"Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses."},{"name":"discover_uniswap_pools","description":"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. Return"},{"name":"get_uniswap_pool","description":"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 "},{"name":"get_uniswap_pool_ticks","description":"Fetch paginated initialized ticks and exact liquidityNet/liquidityGross strings for V3/V4 liquidity depth charts. first/skip bound each request; combine with cu"},{"name":"get_uniswap_charts","description":"Fetch timestamped token0/token1 prices and USD volume history over the requested duration from the same GraphQL fields as the open source Uniswap interface. Emp"},{"name":"prepare_uniswap_reads","description":"Return exact wallet read bundles for pool state, reserves, positions and ownership. V3 supports bounded owner-index enumeration. V4 requires known token IDs. Ve"},{"name":"prepare_uniswap_v2_add_liquidity","description":"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."},{"name":"prepare_uniswap_v2_remove_liquidity","description":"Burn an exact LP amount through the canonical V2 router; realize accrued fees with principal. Raw minima protect withdrawal proceeds. LP token address is derive"},{"name":"prepare_uniswap_v3_add_liquidity","description":"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"},{"name":"prepare_uniswap_v3_remove_liquidity","description":"Decrease exact uint128 liquidity, collect principal and all accrued fees, and optionally burn a fully emptied NFT. Raw minima protect withdrawal proceeds. Optio"},{"name":"prepare_uniswap_v3_collect_fees","description":"Collect all owed fees without removing liquidity, optionally unwrapping WETH. Verify NFT ownership and currencies first. V3 collect has no onchain deadline; reg"},{"name":"prepare_uniswap_v4_add_liquidity","description":"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, se"},{"name":"prepare_uniswap_v4_remove_liquidity","description":"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 ful"},{"name":"prepare_uniswap_v4_collect_fees","description":"Poke a V4 position with zero liquidity decrease then take both currencies to the sender. Principal remains invested. Verify ownership, pool key and hook behavio"},{"name":"get_lido_deployment","description":"Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or in"},{"name":"prepare_lido_stake","description":"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 d"},{"name":"prepare_lido_wrap","description":"Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan."},{"name":"prepare_lido_unwrap","description":"Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender."},{"name":"prepare_lido_withdrawal_request","description":"Prepare one or more bounded stETH withdrawal requests with an exact queue approval and cleanup. This irreversible asynchronous action mints unstETH NFTs, stops "},{"name":"prepare_lido_withdrawal_claim","description":"Prepare claimWithdrawal for one finalized, unclaimed unstETH request ID owned by the sender. The agent must verify ownership and finalization directly through t"}],"toolCount":99,"toolsHash":"09e31b7cc1d24d33b2470f07778b1583d2f9e350d0f4ab3e7f688f977507a8c5","serverName":"ekubo","capabilities":["tools","resources","completions"],"serverVersion":"0.54.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_tokens","description":"First step for symbol-based swaps, including tokenized stocks and stablecoins: list canonical Ekubo tokens by descending visibility_priority, so the preferred t"},{"name":"export_tokens","description":"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 u"},{"name":"get_token","description":"Fetch canonical token metadata for an exact chain and address."},{"name":"get_tokens","description":"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."},{"name":"get_quotes_with_plans","description":"A quote, execution plan, simulation or wallet approval is not permission to trade. Robinhood Stock Tokens are tokenised debt securities subject to issuer restri"},{"name":"get_value_transfer_status","description":"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 se"},{"name":"prepare_ve33_vote","description":"Compile one actively voted ve-token into multiple allocations. Unconditionally claims its current pool first, then splits and changes votes in one atomic batch "},{"name":"prepare_ve33_extend","description":"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 "},{"name":"prepare_ve33_stake","description":"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 "},{"name":"prepare_ve33_split","description":"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"},{"name":"prepare_ve33_claim_fees","description":"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, an"},{"name":"prepare_ve33_reinvest","description":"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"},{"name":"prepare_ve33_claim_all_fees","description":"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"},{"name":"prepare_ve33_clear_vote","description":"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 instea"},{"name":"get_ve33_allocations","description":"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"},{"name":"get_stonx_allocation_recommendation","description":"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 2"},{"name":"prepare_ve33_reallocation","description":"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, sp"},{"name":"get_positions_by_owner","description":"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_s"},{"name":"get_pool","description":"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.r"},{"name":"get_pool_liquidity","description":"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."},{"name":"list_pool_keys","description":"Discover initialized pools for one chain and Core deployment, ordered by pool_id with keyset pagination, optionally filtered by token, pair or extension. Each p"},{"name":"derive_pool_id","description":"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 roun"},{"name":"decode_pool_config","description":"Decode the packed bytes32 extension, exact uint64 Q64 fee, concentrated/stableswap discriminator, and tick spacing or stableswap parameters. The fee is never re"},{"name":"get_position","description":"Hydrate one owner position: pool key, bounds, liquidity, pool state, NFT metadata, history, rewards, token prices, and a pending read of current principal, fees"},{"name":"get_position_pool_candidates","description":"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 Posit"},{"name":"prepare_lp_position_deposit","description":"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 u"},{"name":"prepare_lp_position_earnings_claim","description":"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_st"},{"name":"prepare_lp_position_withdraw","description":"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 cur"},{"name":"prepare_wrap_unwrap","description":"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 e"},{"name":"prepare_transfers","description":"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 a"},{"name":"prepare_lp_position_transfer","description":"Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earning"},{"name":"prepare_fix_pool_price","description":"Run the interface-equivalent phased fix-price workflow: provide exact pending pool-price read calldata, then exact router quote calldata, then approvals and tar"},{"name":"prepare_twamm_order","description":"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,"},{"name":"prepare_twamm_order_collection","description":"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 va"},{"name":"prepare_twamm_order_stop","description":"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."},{"name":"prepare_twamm_virtual_orders","description":"Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool."},{"name":"prepare_auction_create","description":"Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID."},{"name":"prepare_auction_complete","description":"Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch."},{"name":"prepare_auction_creator_proceeds","description":"Prepare collection of creator proceeds for an auction NFT with pending owner validation."},{"name":"prepare_manual_pool_boost","description":"Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface."},{"name":"prepare_oracle_capacity_expansion","description":"Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token."},{"name":"prepare_approval_revocations","description":"Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list."},{"name":"get_rewards_claims_by_owner","description":"Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transaction"},{"name":"prepare_rewards_claim","description":"Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims."},{"name":"prepare_revenue_buybacks","description":"Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps."},{"name":"prepare_ve33_increase_stake","description":"Prepare the exact approval/native value and increaseStakeAmount call while preserving the existing vote and fee accounting. Non-destructive: the vote is resized"},{"name":"prepare_ve33_merge","description":"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 decodab"},{"name":"prepare_ve33_withdraw","description":"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 posit"},{"name":"get_liquidity_opportunities","description":"Return the interface's boosted-fee, incentive and projected ve(3,3)-emission opportunities ranked by APR, with actionable pools or pool-discovery handoffs, fres"},{"name":"prepare_pool_initialization","description":"Prepare one permissionless maybeInitializePool transaction for a v3 PoolKey and initial tick; prepare_lp_position_deposit with pool_initialized=false does the s"},{"name":"get_aave_v3_markets","description":"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 ad"},{"name":"prepare_aave_v3_supply","description":"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, all"},{"name":"prepare_aave_v3_withdraw","description":"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 estab"},{"name":"prepare_aave_v3_borrow","description":"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 coll"},{"name":"prepare_aave_v3_repay","description":"Prepare variable-debt repayment with underlying tokens or sender-owned aTokens. Underlying repayment carries an exact ERC-20 approval and cleanup in one atomic "},{"name":"prepare_aave_v3_collateral","description":"Prepare setUserUseReserveAsCollateral for a supported fixed reserve. Disabling collateral can reduce health factor or revert when open debt needs it, so exact w"},{"name":"prepare_aave_v3_emode","description":"Prepare setUserEMode with a caller-supplied current uint8 category ID; zero disables eMode. Discover live category configuration through Aave's public GraphQL A"},{"name":"get_morpho_vaults","description":"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"},{"name":"prepare_morpho_vault_deposit","description":"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"},{"name":"prepare_morpho_vault_withdraw","description":"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"},{"name":"prepare_morpho_vault_redeem","description":"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 with"},{"name":"get_sky_savings_deployment","description":"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"},{"name":"prepare_sky_savings_deposit","description":"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 dea"},{"name":"prepare_sky_savings_withdraw","description":"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 s"},{"name":"prepare_sky_savings_redeem","description":"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 au"},{"name":"get_merkl_deployment","description":"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 Mer"},{"name":"prepare_merkl_claim","description":"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/{add"},{"name":"get_aerodrome_deployment","description":"Locally return Aerodrome's Base contracts (AERO, veAERO, Voter, Router, v2 factory, RewardsDistributor, Slipstream, Sugar lenses), derived on chain from the Vot"},{"name":"prepare_aerodrome_sugar_reads","description":"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 "},{"name":"prepare_aerodrome_liquidity_deposit","description":"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, "},{"name":"prepare_aerodrome_liquidity_withdraw","description":"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. Pha"},{"name":"prepare_aerodrome_gauge_deposit","description":"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 "},{"name":"prepare_aerodrome_gauge_withdraw","description":"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 "},{"name":"prepare_aerodrome_gauge_claim","description":"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; "},{"name":"prepare_aerodrome_lock","description":"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 measure"},{"name":"prepare_aerodrome_vote","description":"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 p"},{"name":"prepare_aerodrome_incentive_claim","description":"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"},{"name":"decode_uniswap_v4_position_info","description":"Decode the packed PositionInfo returned by wallet reads into signed tick bounds, subscriber flag and the truncated pool-ID prefix. This is local integer decodin"},{"name":"quote_uniswap_liquidity","description":"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 liqui"},{"name":"get_uniswap_deployments","description":"Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses."},{"name":"discover_uniswap_pools","description":"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. Return"},{"name":"get_uniswap_pool","description":"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 "},{"name":"get_uniswap_pool_ticks","description":"Fetch paginated initialized ticks and exact liquidityNet/liquidityGross strings for V3/V4 liquidity depth charts. first/skip bound each request; combine with cu"},{"name":"get_uniswap_charts","description":"Fetch timestamped token0/token1 prices and USD volume history over the requested duration from the same GraphQL fields as the open source Uniswap interface. Emp"},{"name":"prepare_uniswap_reads","description":"Return exact wallet read bundles for pool state, reserves, positions and ownership. V3 supports bounded owner-index enumeration. V4 requires known token IDs. Ve"},{"name":"prepare_uniswap_v2_add_liquidity","description":"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."},{"name":"prepare_uniswap_v2_remove_liquidity","description":"Burn an exact LP amount through the canonical V2 router; realize accrued fees with principal. Raw minima protect withdrawal proceeds. LP token address is derive"},{"name":"prepare_uniswap_v3_add_liquidity","description":"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"},{"name":"prepare_uniswap_v3_remove_liquidity","description":"Decrease exact uint128 liquidity, collect principal and all accrued fees, and optionally burn a fully emptied NFT. Raw minima protect withdrawal proceeds. Optio"},{"name":"prepare_uniswap_v3_collect_fees","description":"Collect all owed fees without removing liquidity, optionally unwrapping WETH. Verify NFT ownership and currencies first. V3 collect has no onchain deadline; reg"},{"name":"prepare_uniswap_v4_add_liquidity","description":"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, se"},{"name":"prepare_uniswap_v4_remove_liquidity","description":"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 ful"},{"name":"prepare_uniswap_v4_collect_fees","description":"Poke a V4 position with zero liquidity decrease then take both currencies to the sender. Principal remains invested. Verify ownership, pool key and hook behavio"},{"name":"get_lido_deployment","description":"Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or in"},{"name":"prepare_lido_stake","description":"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 d"},{"name":"prepare_lido_wrap","description":"Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan."},{"name":"prepare_lido_unwrap","description":"Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender."},{"name":"prepare_lido_withdrawal_request","description":"Prepare one or more bounded stETH withdrawal requests with an exact queue approval and cleanup. This irreversible asynchronous action mints unstETH NFTs, stops "},{"name":"prepare_lido_withdrawal_claim","description":"Prepare claimWithdrawal for one finalized, unclaimed unstETH request ID owned by the sender. The agent must verify ownership and finalization directly through t"}],"package":null,"toolSurface":{"id":"ts_hje683rwurrm","endpointId":"ep_pdbwxxk2jaq5","hash":"09e31b7cc1d24d33b2470f07778b1583d2f9e350d0f4ab3e7f688f977507a8c5","toolCount":99,"serverName":"ekubo","serverVersion":"0.54.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-05T21:29:56.386Z","lastSeenAt":"2026-11-06T06:27:58.198Z","observations":2,"hiddenText":{"level":"none","total":0,"tools":0,"kinds":[],"findings":[]},"toolNames":["list_tokens","export_tokens","get_token","get_tokens","get_quotes_with_plans","get_value_transfer_status","prepare_ve33_vote","prepare_ve33_extend","prepare_ve33_stake","prepare_ve33_split","prepare_ve33_claim_fees","prepare_ve33_reinvest","prepare_ve33_claim_all_fees","prepare_ve33_clear_vote","get_ve33_allocations","get_stonx_allocation_recommendation","prepare_ve33_reallocation","get_positions_by_owner","get_pool","get_pool_liquidity","list_pool_keys","derive_pool_id","decode_pool_config","get_position","get_position_pool_candidates","prepare_lp_position_deposit","prepare_lp_position_earnings_claim","prepare_lp_position_withdraw","prepare_wrap_unwrap","prepare_transfers","prepare_lp_position_transfer","prepare_fix_pool_price","prepare_twamm_order","prepare_twamm_order_collection","prepare_twamm_order_stop","prepare_twamm_virtual_orders","prepare_auction_create","prepare_auction_complete","prepare_auction_creator_proceeds","prepare_manual_pool_boost","prepare_oracle_capacity_expansion","prepare_approval_revocations","get_rewards_claims_by_owner","prepare_rewards_claim","prepare_revenue_buybacks","prepare_ve33_increase_stake","prepare_ve33_merge","prepare_ve33_withdraw","get_liquidity_opportunities","prepare_pool_initialization","get_aave_v3_markets","prepare_aave_v3_supply","prepare_aave_v3_withdraw","prepare_aave_v3_borrow","prepare_aave_v3_repay","prepare_aave_v3_collateral","prepare_aave_v3_emode","get_morpho_vaults","prepare_morpho_vault_deposit","prepare_morpho_vault_withdraw","prepare_morpho_vault_redeem","get_sky_savings_deployment","prepare_sky_savings_deposit","prepare_sky_savings_withdraw","prepare_sky_savings_redeem","get_merkl_deployment","prepare_merkl_claim","get_aerodrome_deployment","prepare_aerodrome_sugar_reads","prepare_aerodrome_liquidity_deposit","prepare_aerodrome_liquidity_withdraw","prepare_aerodrome_gauge_deposit","prepare_aerodrome_gauge_withdraw","prepare_aerodrome_gauge_claim","prepare_aerodrome_lock","prepare_aerodrome_vote","prepare_aerodrome_incentive_claim","decode_uniswap_v4_position_info","quote_uniswap_liquidity","get_uniswap_deployments","discover_uniswap_pools","get_uniswap_pool","get_uniswap_pool_ticks","get_uniswap_charts","prepare_uniswap_reads","prepare_uniswap_v2_add_liquidity","prepare_uniswap_v2_remove_liquidity","prepare_uniswap_v3_add_liquidity","prepare_uniswap_v3_remove_liquidity","prepare_uniswap_v3_collect_fees","prepare_uniswap_v4_add_liquidity","prepare_uniswap_v4_remove_liquidity","prepare_uniswap_v4_collect_fees","get_lido_deployment","prepare_lido_stake","prepare_lido_wrap","prepare_lido_unwrap","prepare_lido_withdrawal_request","prepare_lido_withdrawal_claim"],"distinctSurfaces":1,"surfacesWithHiddenText":0},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.EkuboProtocol/ekubo","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.EkuboProtocol%2Fekubo","firstSeenAt":"2026-11-05T18:21:58.641Z","fetchedAt":"2026-11-05T18:21:58.641Z","normalizedAt":"2026-11-05T18:21:58.641Z"}]},"firstSeenAt":"2026-11-05T18:21:58.641Z","updatedAt":"2026-11-06T06:32:33.637Z"}