Ekubo Protocol
REMOTE · MCP.EKUBO.ORG
Token and pool data, swap quotes, and unsigned transaction plans for Ekubo and other DeFi protocols.
Available components
Last scanned (4 hours ago)
Scores higher than 52% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Crypto and Web3
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
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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.
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 |
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 →
prepare_auction_create Prepare auction creation ~171
Pack the exact interface auction config and prepare mint plus sellAmountByAuction, including approval or native value and deterministic token ID.
| Name | Type | Req | Description |
|---|---|---|---|
| auction_duration | integer | yes | – |
| buy_token | string | yes | Token; zero address = native |
| chain_id | integer|string | yes | EVM chain ID |
| creator_fee_q32 | string | yes | decimal integer |
| graduation_pool_fee_q64 | string | yes | decimal integer |
| graduation_pool_tick_spacing | integer | yes | – |
| min_boost_duration | integer | yes | – |
| salt | string | yes | bytes32 hex |
| sell_amount | string | yes | Base units (positive decimal integer) |
| sell_token | string | yes | Token; zero address = native |
| sender | string | yes | address |
| start_time | string | yes | decimal integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_auction_creator_proceeds Prepare auction creator proceeds collection ~92
Prepare collection of creator proceeds for an auction NFT with pending owner validation.
| Name | Type | Req | Description |
|---|---|---|---|
| auction_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| chain_id | integer|string | yes | EVM chain ID |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_fix_pool_price Prepare a pool price correction ~159
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.
| Name | Type | Req | Description |
|---|---|---|---|
| base_token | string | yes | Token; zero address = native |
| chain_id | integer|string | yes | EVM chain ID |
| core_address | string | yes | address |
| pending_current_sqrt_ratio | string | – | decimal integer |
| pool_id | string | yes | decimal or 0x-hex integer |
| quote_result | object | – | – |
| sender | string | yes | address |
| swap_deadline_minutes | integer | – | Ekubo router route deadline; default 30 |
| target_price | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lido_stake Prepare Lido ETH staking ~109
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact native ETH stake amount in wei (positive decimal integer) |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| referral | string | – | Optional Lido referral address; defaults to zero address |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lido_unwrap Prepare wstETH unwrapping ~78
Prepare a direct wstETH unwrap call for an exact share amount, returning rebasing stETH to the sender.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact wstETH amount to unwrap in base units (positive decimal integer) |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lido_withdrawal_claim Prepare a Lido withdrawal claim ~97
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| request_id | string | yes | Finalized, unclaimed unstETH NFT request ID owned by sender (positive decimal integer) |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lido_withdrawal_request Prepare a Lido withdrawal request ~138
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amounts | array | yes | One to 64 stETH request amounts, each from 100 wei through 1000 stETH |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| owner | string | – | Recipient/owner of the unstETH request NFTs; defaults to sender (address) |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lido_wrap Prepare stETH wrapping ~75
Prepare an exact stETH approval, wstETH wrap call, and allowance cleanup in one atomic wallet plan.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact stETH amount to wrap in base units (positive decimal integer) |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lp_position_deposit Prepare an LP position deposit ~388
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| core_address | string | yes | v3 Core address |
| initial_tick | integer | – | Uninitialized pool only: initializes at this tick |
| max_amount0 | string | yes | Max token0 base units; 0 for single-sided (decimal integer) |
| max_amount1 | string | yes | Max token1 base units; 0 for single-sided (decimal integer) |
| mode | string | – | – |
| pool_id | string | – | Omit when pool_key is supplied (decimal or 0x-hex integer) |
| pool_initialized | boolean | – | false only for a new pool to initialize here |
| pool_key | object | – | Required for an uninitialized pool. PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| sender | string | yes | address |
| slippage_bps | integer | yes | User-selected liquidity slippage |
| tick_lower | integer | yes | – |
| tick_upper | integer | yes | – |
| token_id | string | – | add_liquidity only (decimal or 0x-hex integer) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lp_position_earnings_claim Prepare an LP fee or reward claim ~147
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| positions_address | string | yes | Positions or Ve33Positions manager (address) |
| recipient | string | – | Defaults to sender (address) |
| sender | string | yes | Position owner (address) |
| token_id | string | yes | Position NFT ID (decimal or 0x-hex integer) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lp_position_transfer Prepare an LP position transfer ~94
Prepare the exact safeTransferFrom transaction for an owned LP position and include pending ownership validation. The position, liquidity, and unclaimed earnings move together.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| positions_address | string | yes | address |
| recipient | string | yes | address |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_lp_position_withdraw Prepare one or more LP position withdrawals ~116
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| sender | string | yes | Owner of every position (address) |
| withdrawals | array | yes | One entry per position |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_manual_pool_boost Prepare a manual pool boost ~153
Compute the exact Q32 boost rates and prepare all token approvals, native value, and boost calldata used by the interface.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0 | string | yes | Total token0 base units over the boost (decimal integer) |
| amount1 | string | yes | Total token1 base units over the boost (decimal integer) |
| chain_id | integer|string | yes | EVM chain ID |
| end_time | string | yes | Unix seconds, after start_time (decimal integer) |
| pool_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| sender | string | yes | address |
| start_time | string | yes | Unix seconds (decimal integer) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_merkl_claim Prepare a Merkl reward claim ~153
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | From the Merkl rewards summary |
| rewards | array | yes | One entry per reward token on this chain, all in one claim |
| sender | string | yes | Claiming wallet; the leaf's user address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_morpho_vault_deposit Prepare a guarded Morpho vault deposit ~272
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Positive underlying-asset amount in base units (positive decimal integer) |
| chain_id | integer|string | yes | Chain returned by get_morpho_vaults |
| deadline | string | – | Unix timestamp after which VaultBundlesV1 rejects the deposit; defaults to two hours after preparation. One already past makes the plan a guaranteed revert. (positive decimal integer) |
| max_share_price_ray | string | yes | Maximum acceptable vault share price in RAY (1e27), derived by the agent from fresh Morpho/onchain vault state plus the user's slippage tolerance (positive decimal integer) |
| recipient | string | – | Vault-share recipient; must equal sender if supplied, because VaultBundlesV1 mints shares only to the transaction sender (address) |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_morpho_vault_redeem Prepare a Morpho vault redemption ~164
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | Chain returned by get_morpho_vaults |
| owner | string | – | Vault-share owner; defaults to sender (address) |
| recipient | string | – | Underlying-asset recipient; defaults to sender (address) |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| shares | string | yes | Exact vault-share amount to redeem in base units (positive decimal integer) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_morpho_vault_withdraw Prepare a Morpho vault withdrawal ~170
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact underlying-asset amount to withdraw in base units (positive decimal integer) |
| chain_id | integer|string | yes | Chain returned by get_morpho_vaults |
| owner | string | – | Vault-share owner; defaults to sender (address) |
| recipient | string | – | Underlying-asset recipient; defaults to sender (address) |
| sender | string | yes | Wallet that will execute the Morpho action (address) |
| vault | string | yes | Exact Morpho Vault V2 address returned by get_morpho_vaults |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_oracle_capacity_expansion Prepare oracle capacity expansion ~71
Prepare the interface's permissionless Oracle expandCapacity call for one ERC-20 token.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| min_capacity | integer | yes | – |
| sender | string | yes | address |
| token | string | yes | Token; zero address = native |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_pool_initialization Prepare standalone pool initialization ~131
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| core_address | string | yes | v3 Core address |
| initial_tick | integer | yes | The first initialization permanently sets the price |
| pool_key | object | yes | Pool to initialize. PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| sender | string | yes | Submitting wallet (address) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_revenue_buybacks Prepare revenue buyback maintenance ~87
Prepare the exact selected ended-order collections, protocol-fee withdrawals, and token rolls in interface order within one atomic batch of decodable steps.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| ended_order_collects | array | yes | – |
| protocol_fee_pairs | array | yes | – |
| roll_tokens | array | yes | – |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_rewards_claim Prepare incentive reward claims ~58
Prepare one Incentives claim or the interface's allow-failure Multicall3 aggregate for multiple claims.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| claims | array | yes | – |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_sky_savings_deposit Prepare a Sky savings deposit ~130
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact USDS deposit amount in base units (positive decimal integer) |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| receiver | string | – | sUSDS recipient; defaults to sender (address) |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_sky_savings_redeem Prepare a Sky savings redemption ~136
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| owner | string | – | sUSDS owner; defaults to sender (address) |
| receiver | string | – | USDS recipient; defaults to sender (address) |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| shares | string | yes | Exact sUSDS share amount to redeem in base units (positive decimal integer) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_sky_savings_withdraw Prepare a Sky savings withdrawal ~135
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Exact USDS amount to withdraw in base units (positive decimal integer) |
| chain_id | integer|string | yes | Must be Ethereum chain 1 |
| owner | string | – | sUSDS owner; defaults to sender (address) |
| receiver | string | – | USDS recipient; defaults to sender (address) |
| sender | string | yes | Wallet that will execute the Sky savings action (address) |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_transfers Prepare a batch of token transfers ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| sender | string | yes | Nonzero owner of every asset (address) |
| transfers | array | yes | One to 4096 ordered, optionally mixed native, ERC-20, ERC-721, or ERC-1155 transfers |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_twamm_order Prepare a TWAMM or DCA order ~203
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.
| Name | Type | Req | Description |
|---|---|---|---|
| buy_token | string | yes | Token; zero address = native |
| chain_id | integer|string | yes | EVM chain ID |
| deadline_seconds | integer | – | – |
| orders | array | yes | – |
| pending_timestamp | string | yes | decimal integer |
| salt | string | – | Fixes the order's token id; omit to derive it from the request. Supply one only when identical orders need distinct ids (bytes32 hex) |
| sell_token | string | yes | Token; zero address = native |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_twamm_order_collection Prepare TWAMM proceeds collection ~95
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| order_keys | array | yes | – |
| orders_address | string | yes | address |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_twamm_order_stop Prepare stopping a TWAMM order ~102
Prepare the interface's complete stop flow: collect every selected order and decrease every still-active sale rate in one atomic batch of decodable steps.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| orders | array | yes | – |
| orders_address | string | yes | address |
| pending_timestamp | string | yes | decimal integer |
| sender | string | yes | address |
| token_id | string | yes | decimal or 0x-hex integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_twamm_virtual_orders Prepare TWAMM virtual-order execution ~82
Prepare the permissionless lockAndExecuteVirtualOrders maintenance call for a current or legacy TWAMM pool.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | EVM chain ID |
| pool_key | object | yes | PoolKey {token0, token1, config}: token addresses (zero = native), bytes32 config |
| sender | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_reads Prepare Uniswap pool and position reads ~149
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | string | yes | – |
| fee | integer | – | – |
| hooks | string | – | address |
| owner | string | – | address |
| owner_indices | array | – | – |
| pool_address | string | – | address |
| tick_spacing | integer | – | – |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_ids | array | – | – |
| version | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| read_calls_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v2_add_liquidity Prepare Uniswap V2 liquidity deposit ~158
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0 | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1 | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| sender | string | yes | address |
| token0 | string | yes | address |
| token1 | string | yes | address |
| use_native | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v2_remove_liquidity Prepare Uniswap V2 liquidity withdrawal ~151
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| liquidity | string | yes | decimal integer |
| sender | string | yes | address |
| token0 | string | yes | address |
| token1 | string | yes | address |
| unwrap_native | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v3_add_liquidity Prepare Uniswap V3 liquidity deposit ~218
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0 | string | yes | decimal integer |
| amount0_min | string | yes | decimal integer |
| amount1 | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| fee | integer | yes | – |
| initialize_sqrt_price_x96 | string | – | decimal integer |
| sender | string | yes | address |
| tick_lower | integer | yes | – |
| tick_spacing | integer | yes | – |
| tick_upper | integer | yes | – |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | – | decimal integer |
| use_native | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v3_collect_fees Prepare Uniswap V3 fee collection ~112
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| sender | string | yes | address |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| unwrap_native | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v3_remove_liquidity Prepare Uniswap V3 liquidity withdrawal ~150
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| burn | boolean | – | – |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| liquidity | string | yes | decimal integer |
| sender | string | yes | address |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| unwrap_native | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v4_add_liquidity Prepare Uniswap V4 liquidity deposit ~242
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0_max | string | yes | decimal integer |
| amount1_max | string | yes | decimal integer |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| fee | integer | yes | – |
| hook_data | string | – | hex bytes |
| hooks | string | – | address |
| initialize_sqrt_price_x96 | string | – | decimal integer |
| liquidity | string | yes | decimal integer |
| pool_id | string | yes | bytes32 hex |
| sender | string | yes | address |
| tick_lower | integer | yes | – |
| tick_spacing | integer | yes | – |
| tick_upper | integer | yes | – |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | – | decimal integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v4_collect_fees Prepare Uniswap V4 fee collection ~143
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| fee | integer | yes | – |
| hook_data | string | – | hex bytes |
| hooks | string | – | address |
| pool_id | string | yes | bytes32 hex |
| sender | string | yes | address |
| tick_spacing | integer | yes | – |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_uniswap_v4_remove_liquidity Prepare Uniswap V4 liquidity withdrawal ~197
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount0_min | string | yes | decimal integer |
| amount1_min | string | yes | decimal integer |
| burn | boolean | – | – |
| chain_id | string | yes | – |
| deadline | string | yes | decimal integer |
| fee | integer | yes | – |
| hook_data | string | – | hex bytes |
| hooks | string | – | address |
| liquidity | string | yes | decimal integer |
| pool_id | string | yes | bytes32 hex |
| sender | string | yes | address |
| tick_spacing | integer | yes | – |
| token0 | string | yes | address |
| token1 | string | yes | address |
| token_id | string | yes | decimal integer |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_claim_all_fees Prepare all ve-token fee claims ~152
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| recipient | string | – | Fee recipient; defaults to sender for claimPoolFeesToSelf (address) |
| sender | string | yes | Owner whose indexed VeTokens and active votes should be discovered (address) |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_claim_fees Prepare ve-token fee claims ~140
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| claims | array | yes | – |
| recipient | string | – | address |
| sender | string | yes | address |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_clear_vote Prepare ve-token vote clearing ~212
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| recipient | string | – | Fee recipient; defaults to sender for claimPoolFeesToSelf (address) |
| sender | string | yes | address |
| ve_token | string | yes | address |
| votes | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_extend Prepare a ve-token extension ~273
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| current_pool_key | object | – | Active pool key when voted; the MCP claims fees atomically before extension. Omit only for an unvoted VeToken. PoolKey {token0, token1, config} or {token0, token1, fee, tick_spacing, extension, stabl… |
| duration_seconds | integer | – | – |
| max_duration | boolean | – | – |
| sender | string | yes | address |
| ve_id | string | yes | decimal integer |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_increase_stake Prepare increasing a ve-token stake ~159
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | yes | Base units (positive decimal integer) |
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| sender | string | yes | address |
| stake_token | string | yes | address |
| ve_id | string | yes | decimal integer |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_merge Prepare merging ve-token stakes ~229
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| destination_pool_key | object | – | PoolKey {token0, token1, config} or {token0, token1, fee, tick_spacing, extension, stableswap_params?}, as read from the pool or vote |
| destination_ve_id | string | yes | decimal integer |
| resulting_vote | object|null | – | – |
| sender | string | yes | address |
| sources | array | yes | – |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_reallocation Prepare atomic ve(3,3) reallocation ~367
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.
| Name | Type | Req | Description |
|---|---|---|---|
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| current_state_id | string | yes | Exact state_id returned by get_ve33_allocations; preparation fails if indexed state changed (bytes32 hex) |
| salt_nonce | string | yes | User-selected nonce for deterministic child VeToken IDs created by required splits (bytes32 hex) |
| sender | string | yes | VeToken owner that will execute the atomic batch (address) |
| strategy | string | – | Defaults to preserve_existing_locks. compact_max_lock explicitly claims fees, consolidates active stake into one surviving NFT, extends it to four years, then creates exactly one voting NFT per targe… |
| targets | array | yes | At most 25 targets. compact_max_lock creates one final voting VeToken per target; preserve_existing_locks may require multiple NFTs per target to keep expiry-cohort decay proportional. |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| execution_plan_reference | object | – | artifact_reference; pass unchanged |
No examples provided.
prepare_ve33_reinvest Prepare ve-token fee reinvestment ~315
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | – | Stake token base units (decimal integer) |
| chain_id | integer|string | yes | With ve_token, from get_ve33_allocations (STONX: 4663), not the wallet's chain |
| claims | array | – | – |
| current_state_id | string | – | bytes32 hex |
| fee_balances | array | – | – |
| phase | string | yes | – |
| sender | string | yes | address |
| slippage_bps | integer | – | – |
| source | string | – | – |
| stake_token | string | – | address |
| swap_deadline_minutes | integer | – | Ekubo router route deadline; default 30 |
| ve_id | string | – | decimal integer |
| ve_token | string | yes | address |
| Name | Type | Req | Description |
|---|---|---|---|
| exact_input_full_balance_swaps | array | – | – |
| jurisdiction | object | – | jurisdiction metadata (ekubo-token-jurisdictions-v2): coverage, execution_hold, restricted_jurisdictions, per-asset classification |
| phase | string | – | – |
No examples provided.
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
claude mcp add --transport http ekuboprotocol-ekubo 'https://mcp.ekubo.org/mcp'
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.