{"name":"Ekubo Protocol MCP","description":"Primary non-browser, public, unauthenticated, non-custodial tools for onchain swaps, STONX allocations, and signer-neutral Ekubo, Aave, Morpho, Sky, and Lido transaction preparation workflows","version":"0.43.0","tool_catalog_revision":"2026-09-09.quote-jurisdiction-metadata","tool_count":100,"mcp_endpoint":"https://mcp.ekubo.org/mcp","mcp_transport":"streamable-http","authentication":"none","mcp_endpoints":{"all":{"url":"https://mcp.ekubo.org/mcp","protocols":["ekubo","aave","aerodrome","lido","merkl","morpho","sky","uniswap"],"tool_count":100,"note":"Every protocol on one endpoint. Unchanged, and the endpoint existing clients are configured with."},"by_protocol":[{"protocol":"ekubo","title":"Ekubo Protocol","description":"Ekubo swaps and bridges, pools, LP positions, TWAMM, auctions, incentives, and ve(3,3) STONX voting","url":"https://mcp.ekubo.org/mcp/ekubo","tool_count":51,"tools":["list_tokens","export_tokens","get_token","get_tokens","get_quotes_with_plans","get_value_transfer_status","prepare_ve33_vote","prepare_ve33_extend","prepare_ve33_stake","prepare_ve33_split","prepare_ve33_claim_fees","prepare_ve33_reinvest","prepare_ve33_claim_all_fees","prepare_ve33_clear_vote","get_ve33_allocations","get_stonx_allocation_recommendation","prepare_ve33_reallocation","get_positions_by_owner","get_pool","get_pool_liquidity","list_pool_keys","derive_pool_id","decode_pool_config","get_position","get_position_pool_candidates","prepare_lp_position_deposit","prepare_lp_position_earnings_claim","prepare_lp_position_withdraw","prepare_wrap_unwrap","prepare_transfers","prepare_lp_position_transfer","prepare_fix_pool_price","prepare_twamm_order","prepare_twamm_order_collection","prepare_twamm_order_stop","prepare_twamm_virtual_orders","prepare_auction_create","prepare_auction_complete","prepare_auction_creator_proceeds","prepare_manual_pool_boost","prepare_oracle_capacity_expansion","prepare_approval_revocations","prepare_old_gekubo_unwrap","get_rewards_claims_by_owner","prepare_rewards_claim","prepare_revenue_buybacks","prepare_ve33_increase_stake","prepare_ve33_merge","prepare_ve33_withdraw","get_liquidity_opportunities","prepare_pool_initialization"]},{"protocol":"aave","title":"Aave V3","description":"Aave V3 core market discovery and signer-neutral supply, withdraw, borrow, repay, collateral, and eMode preparation","url":"https://mcp.ekubo.org/mcp/aave","tool_count":7,"tools":["get_aave_v3_markets","prepare_aave_v3_supply","prepare_aave_v3_withdraw","prepare_aave_v3_borrow","prepare_aave_v3_repay","prepare_aave_v3_collateral","prepare_aave_v3_emode"]},{"protocol":"aerodrome","title":"Aerodrome","description":"Aerodrome Sugar lens reads and signer-neutral liquidity, gauge, lock, vote, and incentive-claim preparation on Base","url":"https://mcp.ekubo.org/mcp/aerodrome","tool_count":10,"tools":["get_aerodrome_deployment","prepare_aerodrome_sugar_reads","prepare_aerodrome_liquidity_deposit","prepare_aerodrome_liquidity_withdraw","prepare_aerodrome_gauge_deposit","prepare_aerodrome_gauge_withdraw","prepare_aerodrome_gauge_claim","prepare_aerodrome_lock","prepare_aerodrome_vote","prepare_aerodrome_incentive_claim"],"skill":"ekubo://skills/use-aerodrome"},{"protocol":"lido","title":"Lido","description":"Lido deployment discovery and signer-neutral staking, wrapping, and unstETH withdrawal preparation","url":"https://mcp.ekubo.org/mcp/lido","tool_count":6,"tools":["get_lido_deployment","prepare_lido_stake","prepare_lido_wrap","prepare_lido_unwrap","prepare_lido_withdrawal_request","prepare_lido_withdrawal_claim"],"skill":"ekubo://skills/use-lido"},{"protocol":"merkl","title":"Merkl","description":"Merkl deployment discovery and proof-verified reward claim preparation","url":"https://mcp.ekubo.org/mcp/merkl","tool_count":2,"tools":["get_merkl_deployment","prepare_merkl_claim"],"skill":"ekubo://skills/use-merkl"},{"protocol":"morpho","title":"Morpho","description":"Morpho Vault V2 discovery and signer-neutral deposit, withdraw, and redeem preparation through the guarded Bundler3 route","url":"https://mcp.ekubo.org/mcp/morpho","tool_count":4,"tools":["get_morpho_vaults","prepare_morpho_vault_deposit","prepare_morpho_vault_withdraw","prepare_morpho_vault_redeem"],"skill":"ekubo://skills/use-morpho"},{"protocol":"sky","title":"Sky","description":"Sky savings deployment discovery and signer-neutral sUSDS deposit, withdraw, and redeem preparation","url":"https://mcp.ekubo.org/mcp/sky","tool_count":4,"tools":["get_sky_savings_deployment","prepare_sky_savings_deposit","prepare_sky_savings_withdraw","prepare_sky_savings_redeem"],"skill":"ekubo://skills/use-sky"},{"protocol":"uniswap","title":"Uniswap","description":"Uniswap V2/V3/V4 pools, charts, positions, liquidity and fee claims across six EVM chains","url":"https://mcp.ekubo.org/mcp/uniswap","tool_count":16,"tools":["decode_uniswap_v4_position_info","quote_uniswap_liquidity","get_uniswap_deployments","discover_uniswap_pools","get_uniswap_pool","get_uniswap_pool_ticks","get_uniswap_charts","prepare_uniswap_reads","prepare_uniswap_v2_add_liquidity","prepare_uniswap_v2_remove_liquidity","prepare_uniswap_v3_add_liquidity","prepare_uniswap_v3_remove_liquidity","prepare_uniswap_v3_collect_fees","prepare_uniswap_v4_add_liquidity","prepare_uniswap_v4_remove_liquidity","prepare_uniswap_v4_collect_fees"]}]},"tools_url":"https://mcp.ekubo.org/tools","openapi_url":"https://mcp.ekubo.org/openapi.json","llms_txt_url":"https://mcp.ekubo.org/llms.txt","documentation":{"mcp_server":"https://docs.ekubo.org/products/mcp-server/","protocol_coverage_and_producers":"https://docs.ekubo.org/wallet/protocols/"},"upstream_openapi":{"data_api":"https://prod-api.ekubo.org/openapi.json","zero_x":"https://docs.0x.org","across":"https://docs.across.to/api-reference","layerzero":"https://docs.layerzero.network/","lifi":"https://docs.li.fi/api-reference/introduction"},"external_market_data":{"server_role":"none: agents call these public APIs directly; this MCP does not proxy, cache, authenticate to, or replay them","aave":{"graphql":"https://api.v3.aave.com/graphql","graphql_docs":"https://aave.com/docs/aave-v3/getting-started/graphql","market_data_docs":"https://aave.com/docs/aave-v3/markets/data"},"morpho":{"graphql":"https://api.morpho.org/graphql","docs":"https://docs.morpho.org/developers/api/get-started/"},"sky":{"docs":"https://developers.skyeco.com/protocol/tokens/susds/","live_state":"direct ERC-4626 reads through the user's wallet/RPC"},"lido":{"docs":"https://docs.lido.fi/deployed-contracts/","live_state":"direct contract reads through the user's wallet/RPC"}},"protocol_skills":{"use-morpho":{"mcp_resource":"ekubo://skills/use-morpho","http":"https://mcp.ekubo.org/skills/use-morpho/SKILL.md"},"use-sky":{"mcp_resource":"ekubo://skills/use-sky","http":"https://mcp.ekubo.org/skills/use-sky/SKILL.md"},"use-lido":{"mcp_resource":"ekubo://skills/use-lido","http":"https://mcp.ekubo.org/skills/use-lido/SKILL.md"},"use-merkl":{"mcp_resource":"ekubo://skills/use-merkl","http":"https://mcp.ekubo.org/skills/use-merkl/SKILL.md"},"use-aerodrome":{"mcp_resource":"ekubo://skills/use-aerodrome","http":"https://mcp.ekubo.org/skills/use-aerodrome/SKILL.md"}},"quoter_contract_resource":"ekubo://docs/quoter-api","ve33_workflow_resource":"ekubo://docs/ve33-workflow","execution_plan_resource":"ekubo://docs/execution-plan","lp_position_workflow_resource":"ekubo://docs/lp-position-workflow","contract_directory_resource":"ekubo://contracts/evm","safety":{"signs_transactions":false,"submits_transactions":false,"requires_wallet_validation":true,"agent_confirmation_required":false,"wallet_authorization_on_simulated_result":true,"ownership_and_nft_transfer_actions":"forbidden"},"local_result_decoding":{"trust_boundary":"user_device","raw_return_data_default":"included","raw_return_data_on_decode_failure":"required","decode_kinds":["function_result","multicall3","function_result_bytes_array","semantic_value"],"custom_bytes":{"kind":"semantic_value","input":"raw_return_data","raw_return_data_preserved":true},"semantic_codec_policy":"Platform-neutral codec IDs with explicit implementation assertions; wallets execute only locally installed allowlisted codecs and never fetch code from a plan."},"operational_semantics":{"mcp_tool_result_storage":"wallet_payload_bodies_only: prepared execution plan bodies, read-call bundles (exact wallet_batch_eth_call argument objects), and token lists exported by export_tokens are retained at https://mcp.ekubo.org/artifact/<id> for 3600 seconds so wallets fetch them by reference instead of receiving them through the agent; no other tool results are stored or replayed","artifact_delivery":{"mode":"reference","envelope_kind":"artifact_reference","artifact_types":["execution_plan","read_calls","token_list"],"fetch_url_template":"https://mcp.ekubo.org/artifact/<id>","storage_ttl_seconds":3600,"handling":"Pass the whole artifact_reference object unchanged as the wallet tool's reference argument; the wallet fetches the body itself. A 404 means the reference expired: re-run the tool that produced it.","integrity":"reference.integrity.value is keccak256 of the exact bytes served and reference.bytes their exact length; wallets recompute both over the fetched body and must refuse a mismatch","staleness":"No timestamps travel in the envelope. A plan's validity is expressed by the deadline inside its calldata and enforced by the wallet's simulation against current chain state."},"mcp_http_cache":"no-store; tool calls are not replayed from an MCP cache","rate_limit_contract":{"quota":"No fixed request quota is guaranteed. Limits are enforced per caller, where a caller is one IPv4 address or one IPv6 /64.","scopes":{"burst":"requests over a few seconds, across every route","sustained":"requests over one minute, across every route","tool_units":"weighted tool cost over one minute; a bulk, fan-out, or provider-backed call costs several times an ordinary read, and a purely local one costs nothing","metered_providers":"calls over one minute to the tools that buy quotes or recommendations from a third party"},"response":"HTTP 429 with Retry-After in seconds. A single identified JSON-RPC call is answered with JSON-RPC error code -32029 carrying data.scope and data.retry_after_seconds.","client_obligation":"Honor Retry-After rather than retrying on a fixed interval. Batch identifiers into one call instead of paging the catalog, narrow filters instead of enumerating, and reuse a quote already held instead of re-fetching it.","request_limits":{"max_body_bytes":2097152,"max_jsonrpc_messages_per_request":20,"max_tool_units_per_request":40}},"polling_guidance":{"positions_by_owner":"Upstream uses no-cache; poll only when ownership or liquidity may have changed.","pool_state_seconds":180,"pool_liquidity_depth_seconds":1800,"pool_key_seconds":1800,"liquidity_opportunity_seconds":{"pairs_and_boosted_fees":600,"campaigns":300,"ve33_pools":30},"recommendation_max_age_seconds":86400},"discovery_http_cache_seconds":{"root":300,"tools":0,"openapi":3600,"llms_txt":3600}}}