Skip to content

Ekubo Protocol

io.github.EkuboProtocol/ekuboEkuboProtocolstreamable-httpv0.54.0Scanned

Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols.

99 tools: 4 can delete or cancel things, 18 do something that can't be undone, 48 change things and 29 only read.

Tools: 4 delete, 18 irreversible, 48 write, 29 read.
  • Reads private data · 1
  • Reads text others write · 0
  • Can send data out · 10
  • 31 findings

Anlyon alternative

70 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

99 tools

Deletes or cancels 4Claude Code: deny
  • prepare_uniswap_v2_remove_liquidityBurn an exact LP amount through the canonical V2 router; realize accrued fees with principal.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v2_remove_liquidity" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v2_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v2_remove_liquidity" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v3_remove_liquidityDecrease exact uint128 liquidity, collect principal and all accrued fees, and optionally burn a fully emptied NFT.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v3_remove_liquidity" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v3_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v3_remove_liquidity" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v4_remove_liquidityRemove liquidity and take principal plus fees to the sender.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v4_remove_liquidity" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v4_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v4_remove_liquidity" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_clear_voteRemove the active vote from one or more ve-tokens, claiming each stake's current pool fees immediately before its clearVote in one atomic batch.1 finding

    Why it is in this group

    • The description's first verb is "remove": a word for removing or ending something.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_ve33_clear_vote" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true}; The description's first verb is "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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; the stake stops directing emissions and earning that pool's voter fees. Prefer prepare_ve33_reallocation when votes move to other pools. See ekubo://docs/ve33-workflow.

    Annotations the server declares

    • readOnlyHint: true
Can't be undone 18Claude Code: ask
  • prepare_aave_v3_withdrawPrepare a direct Aave V3 Pool withdrawal for a supported fixed reserve.Can send data out1 finding

    Why it is in this group

    • The name "prepare_aave_v3_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_aave_v3_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_aave_v3_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_gauge_withdrawUnstake v2 LP tokens from a gauge.1 finding

    Why it is in this group

    • The name "prepare_aerodrome_gauge_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_aerodrome_gauge_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_gauge_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_liquidity_depositPrepare a v2 addLiquidity through Aerodrome's Router with exact approvals and allowance cleanup.Can send data out1 finding

    Why it is in this group

    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_aerodrome_liquidity_deposit" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_liquidity_withdrawPrepare 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.Can send data out1 finding

    Why it is in this group

    • The name "prepare_aerodrome_liquidity_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_aerodrome_liquidity_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_liquidity_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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 balance short of the requested liquidity usually means the rest is staked in the gauge and needs unstaking first.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lido_withdrawal_claimPrepare claimWithdrawal for one finalized, unclaimed unstETH request ID owned by the sender.1 finding

    Why it is in this group

    • The name "prepare_lido_withdrawal_claim" says "withdrawal": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_lido_withdrawal_claim" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_lido_withdrawal_claim" says "withdrawal": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lido_withdrawal_requestPrepare one or more bounded stETH withdrawal requests with an exact queue approval and cleanup.1 finding

    Why it is in this group

    • The name "prepare_lido_withdrawal_request" says "withdrawal": a word that usually means money moves, which cannot be taken back.
    • The description says "irreversible".
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_lido_withdrawal_request" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_lido_withdrawal_request" says "withdrawal": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lp_position_earnings_claimPrepare collection of all accrued fees from an owned standard position or rewards from an owned Ve33 position, keeping its liquidity and NFT.Can send data out1 finding

    Why it is in this group

    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_lp_position_earnings_claim" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lp_position_transferPrepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation.Can send data out1 finding

    Why it is in this group

    • The name "prepare_lp_position_transfer" says "transfer": a word for a change that another call does not undo.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_lp_position_transfer" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_lp_position_transfer" says "transfer": a word for a change that another call does not undo.

      What this check looks for
    Description, as the server wrote it
    Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earnings move together.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lp_position_withdrawPrepare partial or full withdrawals from one or more owned positions in one plan, collecting fees or Ve33 rewards and keeping the NFTs.1 finding

    Why it is in this group

    • The name "prepare_lp_position_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_lp_position_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_lp_position_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_morpho_vault_depositPrepare an exact-approval Morpho Vault V2 deposit through the official SDK's VaultBundlesV1 route.Can send data out1 finding

    Why it is in this group

    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_morpho_vault_deposit" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_morpho_vault_redeemPrepare a direct Morpho Vault V2 redemption for an exact share amount.Can send data out1 finding

    Why it is in this group

    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_morpho_vault_redeem" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_morpho_vault_withdrawPrepare a direct Morpho Vault V2 withdrawal for an exact underlying-asset amount from a fixed vault.Can send data out1 finding

    Why it is in this group

    • The name "prepare_morpho_vault_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_morpho_vault_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_morpho_vault_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_sky_savings_withdrawPrepare a direct sUSDS ERC-4626 withdrawal for an exact USDS amount.1 finding

    Why it is in this group

    • The name "prepare_sky_savings_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_sky_savings_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_sky_savings_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_transfersPrepare 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.1 finding

    Why it is in this group

    • The name "prepare_transfers" says "transfer": a word for a change that another call does not undo.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_transfers" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_transfers" says "transfer": a word for a change that another call does not undo.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_claim_all_feesDiscover 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 valid…Can send data out1 finding

    Why it is in this group

    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_ve33_claim_all_fees" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_claim_feesGenerate one call, or an atomic batch of decodable VeToken steps, claiming voter fees from one or more ve-tokens.Can send data out1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The input addresses people (input.recipient): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.recipient): what the tool writes goes there.

    Findings

    • Warn

      The server marks "prepare_ve33_claim_fees" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_mergePrepare 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.1 finding

    Why it is in this group

    • The name "prepare_ve33_merge" says "merge": a word for a change that another call does not undo.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_ve33_merge" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_ve33_merge" says "merge": a word for a change that another call does not undo.

      What this check looks for
    Description, as the server wrote it
    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, which is why no source may end later than it.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_withdrawPrepare fee-safe withdrawal of an expired ve-token stake, claiming the active pool first when voted and returning pending owner/stake validation.1 finding

    Why it is in this group

    • The name "prepare_ve33_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_ve33_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_ve33_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
Changes things 48Claude Code: ask
  • decode_pool_configDecode the packed bytes32 extension, exact uint64 Q64 fee, concentrated/stableswap discriminator, and tick spacing or stableswap parameters.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • decode_uniswap_v4_position_infoDecode the packed PositionInfo returned by wallet reads into signed tick bounds, subscriber flag and the truncated pool-ID prefix.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • derive_pool_idPack or accept an exact PoolKey config and derive pool_id = keccak256(abi.encode(PoolKey)).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • prepare_aave_v3_borrowPrepare a direct Aave V3 variable-rate borrow from a supported fixed reserve, including optional on-behalf-of credit delegation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aave_v3_collateralPrepare setUserUseReserveAsCollateral for a supported fixed reserve.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aave_v3_emodePrepare setUserEMode with a caller-supplied current uint8 category ID; zero disables eMode.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote 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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aave_v3_repayPrepare variable-debt repayment with underlying tokens or sender-owned aTokens.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aave_v3_supplyPrepare a fixed-market Aave V3 Pool supply with an exact ERC-20 approval, supply calldata, and allowance cleanup as one atomic wallet plan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_gauge_claimClaim accrued AERO from a gauge.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_gauge_depositStake 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 trades fee income for emissions rather than adding to it. A dead gauge accepts the stake and pays nothing, so check gauge_alive. Size amount from the live LP balance, not from an earlier deposit simulation.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_incentive_claimClaim a veNFT's voting rewards — trading fees, bribes, or both — and optionally the RewardsDistributor rebase, as one plan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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, which collects an LP's emissions rather than a voter's rewards.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_lockBuild one veAERO escrow action: create a lock, add AERO to one, extend it, switch permanent locking on or off, or withdraw an expired one.1 finding

    Why it is in this group

    • The name "prepare_aerodrome_lock" says "lock": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_aerodrome_lock" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_lock" says "lock": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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 lock, extending past nothing — is caught before signing.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_voteCast one veNFT's gauge vote, or reset it.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 reset.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_approval_revocationsPrepare every approve(spender,0) as an exact ordered multi-transaction execution plan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_auction_completePrepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_auction_createPack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID.1 finding

    Why it is in this group

    • The name "prepare_auction_create" says "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_auction_create" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_auction_create" says "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_auction_creator_proceedsPrepare collection of creator proceeds for an auction NFT with pending owner validation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare collection of creator proceeds for an auction NFT with pending owner validation.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_fix_pool_priceRun 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 …1 finding

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_fix_pool_price" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The description's first verb is "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lido_stakePrepare the canonical Lido submit call with exact native ETH value and an explicit or zero referral.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lido_unwrapPrepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lido_wrapPrepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_lp_position_depositPrepare a v3 position mint or add_liquidity, initializing a new pool at initial_tick when requested, with every approval, refund and cleanup step.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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_query, then mint once. If the wallet lacks one side, execute that swap separately and size the deposit from the measured balance after its receipt, never a quoted output. See ekubo://docs/lp-position-workflow.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_manual_pool_boostCompute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_merkl_claimPrepare 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/summar…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 incentive drops.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_oracle_capacity_expansionPrepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_pool_initializationPrepare one permissionless maybeInitializePool transaction for a v3 PoolKey and initial tick; prepare_lp_position_deposit with pool_initialized=false does the same atomically with …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_revenue_buybacksPrepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_rewards_claimPrepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_sky_savings_depositPrepare an exact USDS approval, ERC-4626 sUSDS deposit, and allowance cleanup as one atomic wallet plan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_sky_savings_redeemPrepare a direct sUSDS ERC-4626 redemption for an exact share amount.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_twamm_orderPrepare one or more TWAMM order splits with approvals and native value as one atomic batch.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_twamm_order_collectionPrepare 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_twamm_order_stopPrepare the interface's complete stop flow: collect every selected order and decrease every still-active sale rate in one atomic batch of decodable steps.1 finding

    Why it is in this group

    • The name "prepare_twamm_order_stop" says "stop": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_twamm_order_stop" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_twamm_order_stop" says "stop": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_twamm_virtual_ordersPrepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v2_add_liquidityAdd liquidity or create a V2 pair with exact token approvals and cleanup.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v2_add_liquidity" says "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v2_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v2_add_liquidity" says "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v3_add_liquidityMint a ranged NFT or increase token_id with raw desired amounts and minima.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v3_add_liquidity" says "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v3_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v3_add_liquidity" says "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v3_collect_feesCollect all owed fees without removing liquidity, optionally unwrapping WETH.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v4_add_liquidityMint or increase an exact liquidity amount using raw uint128 token maxima.1 finding

    Why it is in this group

    • The name "prepare_uniswap_v4_add_liquidity" says "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_uniswap_v4_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v4_add_liquidity" says "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_v4_collect_feesPoke a V4 position with zero liquidity decrease then take both currencies to the sender.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_extendPrepare 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 leaves the wallet; re-vote afterwards with prepare_ve33_vote. max_duration=true must be the user's explicit choice.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_increase_stakePrepare the exact approval/native value and increaseStakeAmount call while preserving the existing vote and fee accounting.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_reallocationCompile a reviewed current allocation into at most 25 target pool-weight shares as one atomic batch of decodable VeToken steps.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 target; it burns every merged source NFT and lengthens the lock, and explicitly discloses both. Show the get_ve33_allocations result first and pass its exact state_id; hand the wallet the survivor, every burned source, the extension, and the decoded calls. See ekubo://docs/ve33-workflow.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_reinvestBuild 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 VeToke…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 restricted_jurisdictions list, follow its execution_notice before requesting any signature. Phases run in order after each confirms: claim (omit claims to discover every active allocation; keep the pre-claim balance snapshots), swap with only the exact claimed deltas, never a pre-existing balance, then stake_all with the refreshed state_id and the measured STONX output.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_splitSplit 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 sa…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_stakeCreate a new VeToken stake with an exact stake-token approval.1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_ve33_stake" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true}; The description's first verb is "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_ve33_voteCompile one actively voted ve-token into multiple allocations.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 validation.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_wrap_unwrapPrepare a direct wrapped-native deposit or withdrawal on a chain with a verified wrapped native token.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
  • quote_uniswap_liquidityCalculate 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
Only reads 29Show 29 read-only tools
  • discover_uniswap_poolsFetch indexed V2, V3 or V4 pools ranked by TVL from Uniswap's interface API.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • export_tokensReturn 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 wall…No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_aave_v3_marketsLocally 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.No findings

    Why it is in this group

    • The name "get_aave_v3_markets" says "get": a word for reading.
    Description, as the server wrote it
    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://api.v3.aave.com/graphql directly; this server is not in that data path. Intersect the API result with this fixed list before calling a preparation tool.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_aerodrome_deploymentLocally return Aerodrome's Base contracts (AERO, veAERO, Voter, Router, v2 factory, RewardsDistributor, Slipstream, Sugar lenses), derived on chain from the Voter, plus the protoco…No findings

    Why it is in this group

    • The name "get_aerodrome_deployment" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_lido_deploymentLocally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance.No findings

    Why it is in this group

    • The name "get_lido_deployment" says "get": a word for reading.
    Description, as the server wrote it
    Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or indexer request.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_liquidity_opportunitiesReturn 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 conte…No findings

    Why it is in this group

    • The name "get_liquidity_opportunities" says "get": a word for reading.
    Description, as the server wrote it
    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 local_read_requirement through the wallet, decode it locally, and call again with ve33_emission_state.

    Annotations the server declares

    • readOnlyHint: true
  • get_merkl_deploymentLocally 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 findings

    Why it is in this group

    • The name "get_merkl_deployment" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_morpho_vaultsLocally return a bounded, pinned catalog of listed Morpho Vault V2 deployments plus official direct-discovery guidance.Reads private dataNo findings

    Why it is in this group

    • The name "get_morpho_vaults" says "get": a word for reading.

    What it can reach

    • private-dataThe name "get_morpho_vaults" says "get" and "vault": it reads secrets.
    • private-dataThe description's first sentence says "vault": it reads secrets.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_poolResolve a chain/core/pool ID to its verified PoolKey, decoded config and indexed pool state.No findings

    Why it is in this group

    • The name "get_pool" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_pool_liquidityReturn tick-level net liquidity deltas for one exact chain/core/pool ID.No findings

    Why it is in this group

    • The name "get_pool_liquidity" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_positionHydrate 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…No findings

    Why it is in this group

    • The name "get_position" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_position_pool_candidatesList 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 Ve33Position…No findings

    Why it is in this group

    • The name "get_position_pool_candidates" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_positions_by_ownerEnumerate an owner's indexed Ekubo position NFTs with pool keys, bounds, liquidity, indexed pool state and rewards.No findings

    Why it is in this group

    • The name "get_positions_by_owner" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_quotes_with_plansA quote, execution plan, simulation or wallet approval is not permission to trade.No findings

    Why it is in this group

    • The name "get_quotes_with_plans" says "get": a word for reading.
    Description, as the server wrote it
    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 S, any person for whose account or benefit the transaction is made, and issuer Prohibited Investor restrictions. Never infer these facts from an agent or server IP. If required facts or asset-policy coverage are unknown, do not proceed. Only the user or an authorized representative of the actual investor may provide an explicit factual attestation; an agent must not attest on their behalf. A known prohibited fact cannot be overridden by attestation. An attestation is not a license, legal exemption or substitute for required screening. Keep the attestation client-side; do not send it to the quote API or MCP server. No blanket disposal exemption applies. Quote EVM swaps: Ekubo/0x same-chain; Across/LayerZero/LI.FI cross-chain. For plans, supply sender and exactly one protection: whole slippage_bps or exact-input max_output_loss in output base units. Omit all three for indicative quotes. Pass the chosen execution.execution_plan_reference unchanged to wallet simulation; show that result and send the same simulation for owner authorization. Re-quote only after revert, expiry or changed request; never retry reverted bytes or widen protection. For all/max swaps use the wallet's exact balance. Compare amount_out and native_fee (LayerZero charges it separately). Track LayerZero/LI.FI delivery with get_value_transfer_status. unavailable_sources reports provider failures; execution_unavailable reports plan failures.

    Annotations the server declares

    • readOnlyHint: true
  • get_rewards_claims_by_ownerFetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transactions.No findings

    Why it is in this group

    • The name "get_rewards_claims_by_owner" says "get": a word for reading.
    Description, as the server wrote it
    Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transactions.

    Annotations the server declares

    • readOnlyHint: true
  • get_sky_savings_deploymentLocally return the canonical Ethereum USDS and sUSDS addresses and direct wallet-read guidance.No findings

    Why it is in this group

    • The name "get_sky_savings_deployment" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_stonx_allocation_recommendationReturn 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).No findings

    Why it is in this group

    • The name "get_stonx_allocation_recommendation" says "get": a word for reading.
    Description, as the server wrote it
    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 local_read_requirement says what to read. The tool constructs no transaction. To apply it, require execution_ready=true, then pass its targets, the state_id from get_ve33_allocations for the connected wallet, and strategy=compact_max_lock to prepare_ve33_reallocation.

    Annotations the server declares

    • readOnlyHint: true
  • get_tokenFetch canonical token metadata for an exact chain and address.No findings

    Why it is in this group

    • The name "get_token" says "get": a word for reading.
    Description, as the server wrote it
    Fetch canonical token metadata for an exact chain and address.

    Annotations the server declares

    • readOnlyHint: true
  • get_tokensFetch canonical metadata for up to 1,000 token identifiers in one batch request, preserving input order; identifiers absent from the canonical list are omitted.No findings

    Why it is in this group

    • The name "get_tokens" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_uniswap_chartsFetch timestamped token0/token1 prices and USD volume history over the requested duration from the same GraphQL fields as the open source Uniswap interface.No findings

    Why it is in this group

    • The name "get_uniswap_charts" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_uniswap_deploymentsCanonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses.No findings

    Why it is in this group

    • The name "get_uniswap_deployments" says "get": a word for reading.
    Description, as the server wrote it
    Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_uniswap_poolFetch indexed pool details, currencies, fee, TVL, volume and supplies.No findings

    Why it is in this group

    • The name "get_uniswap_pool" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_uniswap_pool_ticksFetch paginated initialized ticks and exact liquidityNet/liquidityGross strings for V3/V4 liquidity depth charts.No findings

    Why it is in this group

    • The name "get_uniswap_pool_ticks" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • get_value_transfer_statusReport whether an executed LayerZero or LI.FI transfer has been delivered; its origin receipt alone does not mean the user has the funds.No findings

    Why it is in this group

    • The name "get_value_transfer_status" says "get": a word for reading.
    Description, as the server wrote it
    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 here.

    Annotations the server declares

    • readOnlyHint: true
  • get_ve33_allocationsUse for requests such as 'show all my Ekubo STONX allocations'.1 finding

    Why it is in this group

    • The name "get_ve33_allocations" says "get": a word for reading.

    Findings

    • Warn

      The input schema at properties.ve_token.description contains a 42-character base64 string.

      Matched text

      inputSchema.properties.ve_token.description: "...nical STONX VeToken 0x9d7008E169D040B6c0140eb92E7cA82B12643497 (address)"

      What this check looks for
    Description, as the server wrote it
    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_call. Pass chain_id and ve_token together only for another deployment.

    Annotations the server declares

    • readOnlyHint: true
  • list_pool_keysDiscover initialized pools for one chain and Core deployment, ordered by pool_id with keyset pagination, optionally filtered by token, pair or extension.No findings

    Why it is in this group

    • The name "list_pool_keys" says "list": a word for reading.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
  • list_tokensFirst step for symbol-based swaps, including tokenized stocks and stablecoins: list canonical Ekubo tokens by descending visibility_priority, so the preferred token wins an ambiguo…No findings

    Why it is in this group

    • The name "list_tokens" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_aerodrome_sugar_readsBuild 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.No findings

    Why it is in this group

    • The name "prepare_aerodrome_sugar_reads" says "read": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
  • prepare_uniswap_readsReturn exact wallet read bundles for pool state, reserves, positions and ownership.No findings

    Why it is in this group

    • The name "prepare_uniswap_reads" says "read": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged untrusted-input.

Reads private data1
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write0
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

31 warn
  • The server marks "prepare_ve33_stake" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The description's first verb is "create": a word for a change.

    What this check looks for
  • The server marks "prepare_ve33_claim_fees" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "prepare_ve33_claim_all_fees" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

    What this check looks for
  • The server marks "prepare_ve33_clear_vote" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true}; The description's first verb is "remove": a word for removing or ending something.

    What this check looks for
  • The input schema at properties.ve_token.description contains a 42-character base64 string.

    Matched text

    inputSchema.properties.ve_token.description: "...nical STONX VeToken 0x9d7008E169D040B6c0140eb92E7cA82B12643497 (address)"

    What this check looks for
  • The server marks "prepare_lp_position_earnings_claim" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

    What this check looks for
Show 25 more findings
  • The server marks "prepare_lp_position_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_lp_position_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_transfers" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_transfers" says "transfer": a word for a change that another call does not undo.

    What this check looks for
  • The server marks "prepare_lp_position_transfer" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_lp_position_transfer" says "transfer": a word for a change that another call does not undo.

    What this check looks for
  • The server marks "prepare_fix_pool_price" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The description's first verb is "run": a word for a change.

    What this check looks for
  • The server marks "prepare_twamm_order_stop" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_twamm_order_stop" says "stop": a word for a change.

    What this check looks for
  • The server marks "prepare_auction_create" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_auction_create" says "create": a word for a change.

    What this check looks for
  • The server marks "prepare_ve33_merge" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_ve33_merge" says "merge": a word for a change that another call does not undo.

    What this check looks for
  • The server marks "prepare_ve33_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_ve33_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_aave_v3_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_aave_v3_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_morpho_vault_deposit" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

    What this check looks for
  • The server marks "prepare_morpho_vault_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_morpho_vault_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_morpho_vault_redeem" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

    What this check looks for
  • The server marks "prepare_sky_savings_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_sky_savings_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_aerodrome_liquidity_deposit" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The input addresses people (input.recipient): what it sends cannot be taken back.

    What this check looks for
  • The server marks "prepare_aerodrome_liquidity_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_liquidity_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_aerodrome_gauge_withdraw" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_gauge_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_aerodrome_lock" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_aerodrome_lock" says "lock": a word for a change.

    What this check looks for
  • The server marks "prepare_uniswap_v2_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v2_add_liquidity" says "add": a word for a change.

    What this check looks for
  • The server marks "prepare_uniswap_v2_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v2_remove_liquidity" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "prepare_uniswap_v3_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v3_add_liquidity" says "add": a word for a change.

    What this check looks for
  • The server marks "prepare_uniswap_v3_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v3_remove_liquidity" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "prepare_uniswap_v4_add_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v4_add_liquidity" says "add": a word for a change.

    What this check looks for
  • The server marks "prepare_uniswap_v4_remove_liquidity" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_uniswap_v4_remove_liquidity" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "prepare_lido_withdrawal_request" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_lido_withdrawal_request" says "withdrawal": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "prepare_lido_withdrawal_claim" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true}; The name "prepare_lido_withdrawal_claim" says "withdrawal": a word that usually means money moves, which cannot be taken back.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.54.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http ekubo https://mcp.ekubo.org/mcp
claude mcp add --transport http ekubo https://mcp.ekubo.org/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__ekubo__list_tokens",
      "mcp__ekubo__export_tokens",
      "mcp__ekubo__get_token",
      "mcp__ekubo__get_tokens",
      "mcp__ekubo__get_quotes_with_plans",
      "mcp__ekubo__get_value_transfer_status",
      "mcp__ekubo__get_ve33_allocations",
      "mcp__ekubo__get_stonx_allocation_recommendation",
      "mcp__ekubo__get_positions_by_owner",
      "mcp__ekubo__get_pool",
      "mcp__ekubo__get_pool_liquidity",
      "mcp__ekubo__list_pool_keys",
      "mcp__ekubo__get_position",
      "mcp__ekubo__get_position_pool_candidates",
      "mcp__ekubo__get_rewards_claims_by_owner",
      "mcp__ekubo__get_liquidity_opportunities",
      "mcp__ekubo__get_aave_v3_markets",
      "mcp__ekubo__get_morpho_vaults",
      "mcp__ekubo__get_sky_savings_deployment",
      "mcp__ekubo__get_merkl_deployment",
      "mcp__ekubo__get_aerodrome_deployment",
      "mcp__ekubo__prepare_aerodrome_sugar_reads",
      "mcp__ekubo__get_uniswap_deployments",
      "mcp__ekubo__discover_uniswap_pools",
      "mcp__ekubo__get_uniswap_pool",
      "mcp__ekubo__get_uniswap_pool_ticks",
      "mcp__ekubo__get_uniswap_charts",
      "mcp__ekubo__prepare_uniswap_reads",
      "mcp__ekubo__get_lido_deployment"
    ],
    "ask": [
      "mcp__ekubo__prepare_ve33_vote",
      "mcp__ekubo__prepare_ve33_extend",
      "mcp__ekubo__prepare_ve33_stake",
      "mcp__ekubo__prepare_ve33_split",
      "mcp__ekubo__prepare_ve33_claim_fees",
      "mcp__ekubo__prepare_ve33_reinvest",
      "mcp__ekubo__prepare_ve33_claim_all_fees",
      "mcp__ekubo__prepare_ve33_reallocation",
      "mcp__ekubo__derive_pool_id",
      "mcp__ekubo__decode_pool_config",
      "mcp__ekubo__prepare_lp_position_deposit",
      "mcp__ekubo__prepare_lp_position_earnings_claim",
      "mcp__ekubo__prepare_lp_position_withdraw",
      "mcp__ekubo__prepare_wrap_unwrap",
      "mcp__ekubo__prepare_transfers",
      "mcp__ekubo__prepare_lp_position_transfer",
      "mcp__ekubo__prepare_fix_pool_price",
      "mcp__ekubo__prepare_twamm_order",
      "mcp__ekubo__prepare_twamm_order_collection",
      "mcp__ekubo__prepare_twamm_order_stop",
      "mcp__ekubo__prepare_twamm_virtual_orders",
      "mcp__ekubo__prepare_auction_create",
      "mcp__ekubo__prepare_auction_complete",
      "mcp__ekubo__prepare_auction_creator_proceeds",
      "mcp__ekubo__prepare_manual_pool_boost",
      "mcp__ekubo__prepare_oracle_capacity_expansion",
      "mcp__ekubo__prepare_approval_revocations",
      "mcp__ekubo__prepare_rewards_claim",
      "mcp__ekubo__prepare_revenue_buybacks",
      "mcp__ekubo__prepare_ve33_increase_stake",
      "mcp__ekubo__prepare_ve33_merge",
      "mcp__ekubo__prepare_ve33_withdraw",
      "mcp__ekubo__prepare_pool_initialization",
      "mcp__ekubo__prepare_aave_v3_supply",
      "mcp__ekubo__prepare_aave_v3_withdraw",
      "mcp__ekubo__prepare_aave_v3_borrow",
      "mcp__ekubo__prepare_aave_v3_repay",
      "mcp__ekubo__prepare_aave_v3_collateral",
      "mcp__ekubo__prepare_aave_v3_emode",
      "mcp__ekubo__prepare_morpho_vault_deposit",
      "mcp__ekubo__prepare_morpho_vault_withdraw",
      "mcp__ekubo__prepare_morpho_vault_redeem",
      "mcp__ekubo__prepare_sky_savings_deposit",
      "mcp__ekubo__prepare_sky_savings_withdraw",
      "mcp__ekubo__prepare_sky_savings_redeem",
      "mcp__ekubo__prepare_merkl_claim",
      "mcp__ekubo__prepare_aerodrome_liquidity_deposit",
      "mcp__ekubo__prepare_aerodrome_liquidity_withdraw",
      "mcp__ekubo__prepare_aerodrome_gauge_deposit",
      "mcp__ekubo__prepare_aerodrome_gauge_withdraw",
      "mcp__ekubo__prepare_aerodrome_gauge_claim",
      "mcp__ekubo__prepare_aerodrome_lock",
      "mcp__ekubo__prepare_aerodrome_vote",
      "mcp__ekubo__prepare_aerodrome_incentive_claim",
      "mcp__ekubo__decode_uniswap_v4_position_info",
      "mcp__ekubo__quote_uniswap_liquidity",
      "mcp__ekubo__prepare_uniswap_v2_add_liquidity",
      "mcp__ekubo__prepare_uniswap_v3_add_liquidity",
      "mcp__ekubo__prepare_uniswap_v3_collect_fees",
      "mcp__ekubo__prepare_uniswap_v4_add_liquidity",
      "mcp__ekubo__prepare_uniswap_v4_collect_fees",
      "mcp__ekubo__prepare_lido_stake",
      "mcp__ekubo__prepare_lido_wrap",
      "mcp__ekubo__prepare_lido_unwrap",
      "mcp__ekubo__prepare_lido_withdrawal_request",
      "mcp__ekubo__prepare_lido_withdrawal_claim"
    ],
    "deny": [
      "mcp__ekubo__prepare_ve33_clear_vote",
      "mcp__ekubo__prepare_uniswap_v2_remove_liquidity",
      "mcp__ekubo__prepare_uniswap_v3_remove_liquidity",
      "mcp__ekubo__prepare_uniswap_v4_remove_liquidity"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as ekubo. Review it before you use it.

Capability tags behind 11 rules
  • mcp__ekubo__prepare_ve33_claim_fees outbound
  • mcp__ekubo__prepare_ve33_claim_all_fees outbound
  • mcp__ekubo__prepare_lp_position_earnings_claim outbound
  • mcp__ekubo__prepare_lp_position_transfer outbound
  • mcp__ekubo__prepare_aave_v3_withdraw outbound
  • mcp__ekubo__get_morpho_vaults private-data
  • mcp__ekubo__prepare_morpho_vault_deposit outbound
  • mcp__ekubo__prepare_morpho_vault_withdraw outbound
  • mcp__ekubo__prepare_morpho_vault_redeem outbound
  • mcp__ekubo__prepare_aerodrome_liquidity_deposit outbound
  • mcp__ekubo__prepare_aerodrome_liquidity_withdraw outbound

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.github.EkuboProtocol/ekubo/verify?hash=168315ac2c097de3bdfa0a19a4e8e0663de593d7d9f730cbf810b33deb832b8f" | jq -e '.changed == false'

Pinned hash 168315ac2c09, from Nov 4, 2026, 17:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.EkuboProtocol/ekubo/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.EkuboProtocol/ekubo
[![anlyon.dev](https://anlyon.dev/badge/io.github.EkuboProtocol/ekubo.svg)](https://anlyon.dev/servers/io.github.EkuboProtocol/ekubo)

Source: MCP Registry · repository. Synced Nov 4, 2026, 17:17 UTC.