Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Ekubo Protocol

REMOTE · MCP.EKUBO.ORG

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

Available components

66 Trust /100

Last scanned (1 hour ago)

Scores higher than 52% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Crypto and Web3

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not fully verified: no authorisation is required to call this server, and 14 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 17546 tokens (~151/item across 116 items; 99 tools + 17 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
  • Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 82% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 14 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_value_transfer_status" implies "transfer" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
  • An AI judge read all 101 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 4 Nov 26 66

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://mcp.ekubo.org/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=ekubo.org CN=WE1,O=Google Trust Services,C=US 28 Sept 2026 27 Dec 2026 ECDSA 256 ECDSA-SHA256 136683b61c23a8e3132c8d9c4dfee255
SANs: ekubo.org, mcp.ekubo.org, *.mcp.ekubo.org
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of mcp.ekubo.org. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
org. present 725, 26974 8, 8 Verified
ekubo.org. present 2371 13 Verified
mcp.ekubo.org. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=15552000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options DENY
referrer-policy no-referrer

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.ekubo.org/mcp Verified 200
http (plaintext) http://mcp.ekubo.org/mcp HTTPS enforced 301 https://mcp.ekubo.org/mcp
MCP tools · 99 exposed · ~15,423 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
decode_pool_config ~58

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.

NameTypeReqDescription
configstringyesbytes32 hex
NameTypeReqDescription
configstring––
discriminator_bit_setboolean––
extensionstring––
feestring––
fee_hexstring––
pool_typestring––
stableswap_paramsobject|null––
tick_spacinginteger|null––
type_configstring––

No examples provided.

decode_uniswap_v4_position_info ~56

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.

NameTypeReqDescription
infostringyesdecimal integer
NameTypeReqDescription
has_subscriberboolean––
instructionstring––
pool_id_prefixstring––
tick_lowerinteger––
tick_upperinteger––

No examples provided.

derive_pool_id ~57

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.

NameTypeReqDescription
pool_keyobjectyes–
NameTypeReqDescription
decoded_configobject––
pool_idstring––
pool_id_decimalstring––
pool_keyobject––

No examples provided.

discover_uniswap_pools ~103

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.

NameTypeReqDescription
chain_idstringyes–
firstinteger––
token_addressstring–address
tvl_cursornumber––
versionstringyes–
NameTypeReqDescription
data–––
errorsarray––
fetched_atstring––
indexed_databoolean––
partialboolean––
sourcestring––

No examples provided.

export_tokens ~147

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.

NameTypeReqDescription
chain_idinteger|string–Export only this chain; almost always pass it, since a wallet holds names for the chain it is on. Ethereum alone has about 5,600 tokens
max_tokensinteger–Defaults to 1,000, what a wallet accepts in one import; a larger export is refused whole, not truncated
NameTypeReqDescription
completeboolean––
countinteger––
token_list_referenceobject–artifact_reference; pass unchanged

No examples provided.

get_aave_v3_markets ~167

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.

NameTypeReqDescription
chain_idinteger|string–Optional exact chain filter. Omit to return every fixed Aave V3 core market supported by the preparation tools.
NameTypeReqDescription
agent_market_data_discoveryobject––
limitationsobject––
marketsarray––
network_accessstring––
protocolstring––
sourceobject––

No examples provided.

get_aerodrome_deployment ~107

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.

NameTypeReqDescription
chain_idinteger|string–Optional chain to check against Aerodrome's Base-only deployment
NameTypeReqDescription
agent_market_data_discoveryobject––
deploymentobject––
limitationsobject––
network_accessstring––
protocolstring––
sourceobject––

No examples provided.

get_lido_deployment ~50

Locally return canonical Ethereum stETH, wstETH, and WithdrawalQueueERC721 addresses plus direct wallet-read guidance. This server makes no Lido API, RPC, or indexer request.

Input schema present but exposes no named parameters.

NameTypeReqDescription
agent_market_data_discoveryobject––
deploymentobject––
limitationsobject––
network_accessstring––
protocolstring––
sourceobject––

No examples provided.

get_liquidity_opportunities ~236

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.

NameTypeReqDescription
chain_idinteger|string–Omit for every chain
limitinteger––
min_aprnumber–APR ratio floor; 1.0 = 100%
tokenstring–Token in the pair (EVM or Starknet) (hex)
typesarray–Defaults to all
ve33_emission_stateobject–{current_timestamp, current_emission_rate, total_remaining_emissions}: decimal strings decoded locally from getEmissionState (rate is Q32) via local_read_requirement; omit on the first call
NameTypeReqDescription
local_read_requirementobject|null––

No examples provided.

get_merkl_deployment ~75

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.

NameTypeReqDescription
chain_idinteger|string–Optional chain to check against the verified Merkl Distributor catalog
NameTypeReqDescription
agent_market_data_discoveryobject––
deploymentobject––
limitationsobject––
network_accessstring––
protocolstring––
sourceobject––

No examples provided.

get_morpho_vaults ~109

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.

NameTypeReqDescription
chain_idinteger|string–Optional exact chain filter for the fixed Morpho Vault V2 catalog
NameTypeReqDescription
agent_market_data_discoveryobject––
limitationsobject––
network_accessstring––
protocolstring––
sourceobject––
vaultsarray––

No examples provided.

get_pool ~92

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.

NameTypeReqDescription
chain_idinteger|stringyesEVM chain ID
core_addressstringyesaddress
pool_idstringyesPool ID (decimal or 0x-hex integer)
NameTypeReqDescription
current_state_queryobject––

No examples provided.

get_pool_liquidity ~83

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.

NameTypeReqDescription
chain_idinteger|stringyesEVM chain ID
core_addressstringyesaddress
pool_idstringyesPool ID (decimal or 0x-hex integer)
NameTypeReqDescription
chain_idstring––
core_addressstring––
liquidity_deltasarray––
pool_idstring––
pool_id_decimalstring––

No examples provided.

get_position ~144

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.

NameTypeReqDescription
chain_idinteger|stringyesEVM chain ID
ownerstringyesCurrent owner (address)
positions_addressstringyesEkubo Positions or Ve33Positions manager (address)
token_idstringyesPosition NFT ID (decimal or 0x-hex integer)
NameTypeReqDescription
current_state_queryobject––

No examples provided.

get_position_pool_candidates ~134

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.

NameTypeReqDescription
chain_idinteger|stringyesEVM chain ID
core_addressstring–address
extensionstring–address
min_tvl_usdnumber–TVL floor; default 0 keeps tiny pools visible
pool_typestring––
token_astringyesEither order (address)
token_bstringyesaddress
NameTypeReqDescription
candidate_countinteger––
candidatesarray––
chain_idstring––
pairobject––
tokensarray––

No examples provided.

get_positions_by_owner ~118

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.

NameTypeReqDescription
chain_idinteger|string–EVM chain ID
ownerstringyesaddress
pageinteger––
page_sizeinteger––
statestring––
NameTypeReqDescription
current_state_readsarray––

No examples provided.

get_quotes_with_plans ~740

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.

NameTypeReqDescription
amountstringyesBase units (positive decimal integer)
chain_idinteger|stringyesEVM chain ID
destination_chain_idinteger|string–Destination chain; defaults to chain_id for a same-chain swap
include_raw_quotesboolean–Echo raw provider responses; only to diagnose a provider
max_output_lossstring–Exact-input loss budget from quoted output, output-token base units as a decimal integer string; requires sender, omit slippage_bps. Ekubo: exact subtraction. 0x: two quotes, floor budget to whole pp…
quote_typestringyes–
recipientstring–Defaults to sender (address)
senderstring–Transaction sender; pass with exactly one of slippage_bps or max_output_loss for plans (address)
slippage_bpsinteger–Whole-bps calldata bound: 0.1% = 10. With sender supply this OR max_output_loss. Honor user preference; size near gas value / notional * 10,000. For positive sub-bps budgets use max_output_loss, not…
swap_deadline_minutesinteger–Ekubo router route deadline; default 30
token_instringyesRaw EVM address or CAIP-10 eip155:<chain_id>:<address>; all-zeroes denotes the native token
token_outstringyesRaw EVM address or CAIP-10 eip155:<chain_id>:<address>; all-zeroes denotes the native token
NameTypeReqDescription
jurisdictionobject–jurisdiction metadata (ekubo-token-jurisdictions-v2): coverage, execution_hold, restricted_jurisdictions, per-asset classification
quotesarray––

No examples provided.

get_rewards_claims_by_owner ~49

Fetch canonical reward-claim records and supply the exact per-chain isClaimed/isAvailable eth_call list used by the interface before preparing claim transactions.

NameTypeReqDescription
ownerstringyesaddress
NameTypeReqDescription
onchain_validationobject––

No examples provided.

get_sky_savings_deployment ~52

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
agent_market_data_discoveryobject––
deploymentobject––
limitationsobject––
network_accessstring––
protocolstring––
sourceobject––

No examples provided.

get_stonx_allocation_recommendation ~267

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.

NameTypeReqDescription
max_emission_share_per_fee_sharenumber–Prune above this emission share / retained fee share; default 3
prune_low_efficiencyboolean–Withhold prune candidates and redistribute their weight
ve33_emission_stateobject–{current_timestamp, current_emission_rate, total_remaining_emissions}: decimal strings decoded locally from getEmissionState (rate is Q32) via local_read_requirement; omit on the first call
voterobject–With ve33_emission_state, makes targets voter-optimal
NameTypeReqDescription
chain_idstring––
execution_readyboolean––
recommendation_idstring––
recommendationsarray––
schema_versionstring––
snapshot_atstring––
targetsarray––

No examples provided.

get_token ~48

Fetch canonical token metadata for an exact chain and address.

NameTypeReqDescription
addressstringyesEVM or Starknet token address (hex)
chain_idinteger|stringyesEVM chain ID
NameTypeReqDescription
tokenobject––

No examples provided.

get_tokens ~49

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.

NameTypeReqDescription
tokensarrayyesEntries may span chains
NameTypeReqDescription
tokensarray––

No examples provided.

get_uniswap_charts ~81

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.

NameTypeReqDescription
chain_idstringyes–
durationstring––
poolstringyes–
versionstringyes–
NameTypeReqDescription
data–––
errorsarray––
fetched_atstring––
indexed_databoolean––
partialboolean––
sourcestring––

No examples provided.

get_uniswap_deployments ~48

Canonical V2/V3/V4 contracts on Ethereum, Optimism, Base, Arbitrum, Unichain and Robinhood, including Permit2 and wrapped native addresses.

Input schema present but exposes no named parameters.

NameTypeReqDescription
deploymentsarray––
protocolstring––
sourcestring––

No examples provided.

get_uniswap_pool ~75

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.

NameTypeReqDescription
chain_idstringyes–
poolstringyes–
versionstringyes–
NameTypeReqDescription
data–––
errorsarray––
fetched_atstring––
indexed_databoolean––
partialboolean––
sourcestring––

No examples provided.

get_uniswap_pool_ticks ~96

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.

NameTypeReqDescription
chain_idstringyes–
firstinteger––
poolstringyes–
skipinteger––
versionstringyes–
NameTypeReqDescription
data–––
errorsarray––
fetched_atstring––
indexed_databoolean––
partialboolean––
sourcestring––

No examples provided.

get_value_transfer_status ~207

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.

NameTypeReqDescription
destination_chain_idinteger|string–Destination chain; lifi only
origin_chain_idinteger|string–Origin chain; lifi only, narrows the lookup
quote_idstring–The executed option's provider_quote_id; required for layerzero
sourcestring–The executed quote's source; defaults to layerzero
transaction_hashstring–Origin transaction hash; required for lifi, and pass it for layerzero once known (some routes need it) (bytes32 hex)
NameTypeReqDescription
execution_historyarray––
explorer_urlstring|null––
origin_transaction_hashstring|null––
pollingobject––
quote_idstring|null––
settledboolean––
sourcestring––
source_urlstring––
statusstring––
substatusstring|null––
substatus_messagestring|null––

No examples provided.

get_ve33_allocations ~233

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.

NameTypeReqDescription
chain_idinteger|string–Optional with ve_token; omit both for the production Ekubo STONX deployment
ownerstringyesConnected EVM wallet whose complete Ekubo STONX/VeToken allocation should be shown; the server cannot infer 'my', so ask the user when no wallet address is available
ve_tokenstring–Optional with chain_id; omit both for the canonical STONX VeToken 0x9d7008E169D040B6c0140eb92E7cA82B12643497 (address)
NameTypeReqDescription
onchain_validationobject––

No examples provided.

list_pool_keys ~163

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

NameTypeReqDescription
after_pool_idstring–Previous page's next_after_pool_id (decimal or 0x-hex integer)
chain_idinteger|stringyesEVM chain ID
core_addressstringyesCore deployment (address)
extensionstring–Zero address = extensionless
page_sizeinteger–Pools per page
token_astring–Pools containing this token (address)
token_bstring–With token_a, the exact pair (address)
NameTypeReqDescription
chain_idstring––
core_addressstring––
core_generationstring––
pageobject––
poolsarray––

No examples provided.

list_tokens ~226

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.

NameTypeReqDescription
after_tokenstring–Keep only tokens whose (chain_id, address) pair sorts after this <chain_id>:<address> identifier. Results are ordered by visibility_priority rather than by that pair, so this filters the candidate se…
chain_idinteger|string–Restrict the list to one EVM chain; omit to list tokens across every indexed chain
min_visibility_priorityinteger–Lowest visibility_priority to include; defaults to 0, the interface threshold. Pass a negative value to reach tokens the interface hides
page_sizeinteger–Maximum tokens to return; defaults to 20
searchstring–Case-insensitive token symbol prefix or suffix match; omit to list the whole canonical set. Symbols only, not names or addresses
NameTypeReqDescription
tokensarray––

No examples provided.

prepare_aave_v3_borrow ~172

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.

NameTypeReqDescription
amountstringyesPositive borrow amount in base units (positive decimal integer)
assetstringyesExact underlying ERC-20 address from the selected market's fixed major-reserve list
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
on_behalf_ofstring–Debt owner; defaults to sender. A different owner must already have delegated variable debt to sender. (address)
senderstringyesWallet that will execute the Aave action (address)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aave_v3_collateral ~137

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.

NameTypeReqDescription
assetstringyesExact underlying ERC-20 address from the selected market's fixed major-reserve list
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
senderstringyesWallet that will execute the Aave action (address)
use_as_collateralbooleanyesTrue enables this supplied reserve as collateral; false disables it
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aave_v3_emode ~146

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.

NameTypeReqDescription
category_idintegeryesCurrent onchain Aave eMode category; zero disables eMode. Obtain nonzero category IDs from Aave's public GraphQL API, because this server does not query them.
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
senderstringyesWallet whose eMode selection will change (address)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aave_v3_repay ~195

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.

NameTypeReqDescription
amountstringyesPositive repayment amount in base units; uint256 maximum requests all available variable debt (positive decimal integer)
assetstringyesExact underlying ERC-20 address from the selected market's fixed major-reserve list
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
funding_sourcestring–Use underlying ERC-20 with a temporary exact Pool approval, or burn sender-owned aTokens with repayWithATokens
on_behalf_ofstring–Debt owner; defaults to sender (address)
senderstringyesWallet that will execute the Aave action (address)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aave_v3_supply ~165

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.

NameTypeReqDescription
amountstringyesPositive underlying-token amount in base units (positive decimal integer)
assetstringyesExact underlying ERC-20 address from the selected market's fixed major-reserve list
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
on_behalf_ofstring–aToken recipient; defaults to sender (address)
senderstringyesWallet that will execute the Aave action (address)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aave_v3_withdraw ~170

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.

NameTypeReqDescription
amountstringyesPositive underlying-token amount in base units; uint256 maximum requests all available balance (positive decimal integer)
assetstringyesExact underlying ERC-20 address from the selected market's fixed major-reserve list
chain_idinteger|stringyesChain of a fixed Aave V3 core market returned by get_aave_v3_markets
recipientstring–Underlying-token recipient; defaults to sender (address)
senderstringyesWallet that will execute the Aave action (address)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_gauge_claim ~132

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.

NameTypeReqDescription
accountstring–Account whose emissions are claimed; defaults to sender. getReward credits this address, so a non-sender value pays someone else.
chain_idinteger|stringyesBase (8453) only
gaugestringyesGauge from a Sugar pools read (address)
senderstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_gauge_deposit ~231

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.

NameTypeReqDescription
amountstringyesExact LP token amount to stake in base units (positive decimal integer)
chain_idinteger|stringyesBase (8453) only
gaugestringyesGauge from a Sugar pools read (address)
lp_tokenstring–Gauge stakingToken from this tool's first-phase read; omit to get that read, supply it for the full plan (address)
senderstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_gauge_withdraw ~119

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.

NameTypeReqDescription
amountstringyesExact LP token amount to unstake in base units (positive decimal integer)
chain_idinteger|stringyesBase (8453) only
gaugestringyesGauge from a Sugar pools read (address)
senderstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_incentive_claim ~221

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.

NameTypeReqDescription
bribesarray–Bribe contracts and their tokens, taken from a Sugar venft_rewards read
chain_idinteger|stringyesBase (8453) only
claim_rebaseboolean–Also claim the RewardsDistributor rebase, which compounds into the lock
feesarray–Fee contracts and their tokens, taken from a Sugar venft_rewards read
senderstringyesaddress
venft_idstringyesveNFT token id whose rewards are claimed (positive decimal integer)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_liquidity_deposit ~260

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.

NameTypeReqDescription
amount_a_desiredstringyesMaximum token_a base units (positive decimal integer)
amount_a_minstringyesSlippage bound: minimum token_a base units consumed (positive decimal integer)
amount_b_desiredstringyesMaximum token_b base units (positive decimal integer)
amount_b_minstringyesMinimum token_b base units consumed (positive decimal integer)
chain_idinteger|stringyesBase (8453) only
deadlinestringyesNear-term unix timestamp; a past one makes the plan revert (positive decimal integer)
recipientstring–Defaults to sender (address)
senderstringyesaddress
stablebooleanyesStable (true) or volatile pool; with the pair it identifies the pool
token_astringyesaddress
token_bstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_liquidity_withdraw ~297

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.

NameTypeReqDescription
amount_a_minstringyesMinimum token_a base units to receive (positive decimal integer)
amount_b_minstringyesMinimum token_b base units to receive (positive decimal integer)
chain_idinteger|stringyesBase (8453) only
deadlinestringyesNear-term unix timestamp; a past one makes the plan revert (positive decimal integer)
liquiditystringyesExact LP token amount to burn in base units (positive decimal integer)
lp_tokenstring–Pool address from this tool's first-phase read; omit to get that read, supply it for the full plan
recipientstring–Defaults to sender (address)
senderstringyesaddress
stablebooleanyesStable (true) or volatile pool
token_astringyesaddress
token_bstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_lock ~237

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.

NameTypeReqDescription
actionstringyesWhich veAERO lock action to build
amountstring–AERO amount in base units; required for create and increase_amount (positive decimal integer)
chain_idinteger|stringyesBase (8453) only
lock_durationstring–Lock length in seconds measured from now, required for create and extend. The escrow floors it to a week boundary and caps it at four years. (positive decimal integer)
senderstringyesaddress
venft_idstring–veNFT token id; required for every action but create (positive decimal integer)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_sugar_reads ~199

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.

NameTypeReqDescription
accountstring–Required for positions and venfts_by_account (address)
chain_idinteger|stringyesBase (8453) only
datasetstringyesSugar dataset
limitinteger–Page size; at most 500 pools or 200 positions
offsetinteger––
poolstring–Required for pool_epochs and venft_pool_rewards (address)
venft_idstring–Required for venft_by_id, venft_rewards, and venft_pool_rewards (positive decimal integer)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_aerodrome_vote ~196

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.

NameTypeReqDescription
chain_idinteger|stringyesBase (8453) only
poolsarray–The complete allocation. It replaces any previous vote, so a pool left out is voted zero rather than left alone.
resetboolean–Clear this NFT's votes instead of casting new ones; required before withdrawing a voted NFT
senderstringyesaddress
venft_idstringyesveNFT token id casting the vote (positive decimal integer)
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_approval_revocations ~68

Prepare every approve(spender,0) as an exact ordered multi-transaction execution plan. The wallet must not discover or construct the transaction list.

NameTypeReqDescription
approvalsarrayyes–
chain_idinteger|stringyesEVM chain ID
senderstringyesaddress
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

prepare_auction_complete ~114

Prepare permissionless auction completion and, when necessary, graduation-pool initialization in the same atomic batch.

NameTypeReqDescription
auction_keyobjectyesPoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config
chain_idinteger|stringyesEVM chain ID
graduation_pool_initializedbooleanyes–
launch_pool_tickinteger––
senderstringyesaddress
token_idstringyesdecimal or 0x-hex integer
NameTypeReqDescription
execution_plan_referenceobject–artifact_reference; pass unchanged

No examples provided.

Install

How do I install the Ekubo Protocol MCP server?

Ekubo Protocol is a hosted endpoint at https://mcp.ekubo.org/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.ekubo.org

# add to Claude Code
claude mcp add --transport http ekuboprotocol-ekubo 'https://mcp.ekubo.org/mcp'
Common questions

What is the Ekubo Protocol MCP server?

Ekubo Protocol is an MCP server listed in the public MCP registry as io.github.EkuboProtocol/ekubo. Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols. This page covers its hosted endpoint (https://mcp.ekubo.org/mcp).

Is the Ekubo Protocol MCP server safe to use?

Ekubo Protocol scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Ekubo Protocol MCP server expose?

Ekubo Protocol exposes 99 tools: list_tokens, export_tokens, get_token, get_tokens, get_quotes_with_plans, and 94 more. Their descriptions and schemas cost roughly 15,423 tokens of context every time the server is loaded.

Does the Ekubo Protocol MCP server require authentication?

No. We connected to Ekubo Protocol without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Ekubo Protocol MCP server still maintained?

Ekubo Protocol is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.