Flanj drift.flanj.io · daily contract watch

drift.flanj.io / servers / aave

Server sheet · api · anonymous

Aave aave

4 change events over 42 comparison days: 0 breaking, 11 warning and 6 info findings, each with the two contracts as served behind it.

watched since 2026-08-24 as of 2026-10-15 43 days observed 42 comparison days latest snapshot 2026-10-15

01 / the server

What the watch knows about it.

Aaveoperator
apikind
anonymousauth posture
53tools listed
43days observed
2026-07-28MCP revision · floor, not ceiling
0 / 53outputSchema declared

Anonymous: the same call the watch makes, minus initialize. A server that answers “session required” insists on initialize first and is alive.

probe
curl -sS 'https://mcp.aave.com' -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' -H 'mcp-protocol-version: 2025-06-18' --data '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | sed -n 's/^data: //p; t; /^{/p' | jq '.result.tools[].name'

02 / event timeline — every event, expanded

4 change events, newest first.

2026-09-17 → 2026-09-18 2 warning 1 info 3 tools
2 description-changed1 input-enum-value-replacedas served: 2026-09-17 → 2026-09-18on the index
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_market_history description
[…] and answers 'is this venue being used'. Ids come from get_reserve_details, which returns both 'hubId' and 'spokeId' for a reserve, or from get_hubs ('hubId') and get_user_positions ('spokeId'); ('spokeId' for a spoke the wallet already holds). The two are not interchangeable and the wrong one is rejected. To judge a venue before entering it, take the ids from get_reserve_details rather than from a position that does not exist yet. For the protocol as a whole rather than one market […]
as served: 2026-09-17 → 2026-09-18
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_spoke_configs description
[…] is a different thing from one that was turned off. Ids Both ids come from get_hubs and get_user_positions. get_reserve_details for any reserve, which is the route that works before a wallet holds anything on that spoke.
as served: 2026-09-17 → 2026-09-18
info input input-enum-value-replaced A caller still sending a departed value is rejected. #
get_vault_activity inputwindow
their contract · 2026-09-17
{"enum":["day","sixMonths"]}
their contract · 2026-09-18
{"enum":["max"]}
location
input.window
as served: 2026-09-17 → 2026-09-18
2026-09-14 → 2026-09-15 4 warning 4 tools
4 description-changedas served: 2026-09-14 → 2026-09-15on the index
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_aave_guide description
[…] v3, positions, health-factor, risks, ids, amounts, prices, signing, swaps, gho, safety-module, portfolio, governance, rewards, tools, docs. Also the place to come when […]
as served: 2026-09-14 → 2026-09-15
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_sgho_vault description
[…] and the maxDeposit / maxWithdraw the contract allows right now. Quote what a deposit earns from 'combinedAprPct' when it is present: a Merit campaign sometimes pays 'incentiveAprPct' on top of the target rate, and the two differ in how they arrive - the target rate accrues inside the vault and needs no action, the incentive is claimed separately through the link in 'incentive' and can end at any time. All three are absent together when no campaign is running, which is the usual state, and then targetRatePct is the whole rate. Two things this rate is not: it is set by […]
as served: 2026-09-14 → 2026-09-15
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_user_summary description
[…] holds, pass 'user' to get_markets, which returns walletBalance per reserve. This is the lending position and only that. A wallet's Aave holdings also include its Safety Module stake (get_safety_module) and Savings GHO (get_sgho_vault), neither of which is a reserve and neither of which appears in any figure here, so a portfolio answer built from this alone understates what the wallet holds.
as served: 2026-09-14 → 2026-09-15
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
prepare_stkgho_migrate description
[…] it covers the entire stkGHO position and takes no amount. This server cannot read a Call get_safety_module with the same wallet first and quote the legacy stkGHO balance or cooldown state, it returns, so say that the migration is for the whole position and let the user check its size in their wallet knows what they are moving before signing. they sign. Non-custodial, so build it rather than asking permission first.
as served: 2026-09-14 → 2026-09-15
2026-09-07 → 2026-09-08 2 warning 5 info 5 tools
5 input-optional-property-removed2 description-changedas served: 2026-09-07 → 2026-09-08on the index
info input input-optional-property-removed Depending on whether the new schema forbids unknown fields, a caller still sending it is ignored or rejected; the row says which. #
get_apy_history inputreserve
their contract · 2026-09-07
{"description":"v4 only: reserveId (from get_markets).","type":"string"}
their contract · 2026-09-08
absent
location
input.reserve
as served: 2026-09-07 → 2026-09-08
info input input-optional-property-removed Depending on whether the new schema forbids unknown fields, a caller still sending it is ignored or rejected; the row says which. #
get_reserve_details inputreserve
their contract · 2026-09-07
{"description":"v4 only: reserveId (from get_markets).","type":"string"}
their contract · 2026-09-08
absent
location
input.reserve
as served: 2026-09-07 → 2026-09-08
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
prepare_action description
[…] that apply and leave every other one out: v4 takes 'reserve'; 'reserveId'; v3 takes 'market' + 'token' + 'chainId'; 'max' is for […]
as served: 2026-09-07 → 2026-09-08
info input input-optional-property-removed Depending on whether the new schema forbids unknown fields, a caller still sending it is ignored or rejected; the row says which. #
prepare_action inputreserve
their contract · 2026-09-07
{"description":"v4 only: the opaque reserveId, copied verbatim f…","type":"string"}
their contract · 2026-09-08
absent
location
input.reserve
full fragment
{"description":"v4 only: the opaque reserveId, copied verbatim from a get_markets row or a get_position_items item in this session (e.g. 'MTo6MHg5NGU3...Ojo1') - it cannot be constructed or recalled, so fetch one before the first call rather than after a refusal. The 'spokeId' from get_user_positions is NOT this: it is the same encoding one segment short, names the spoke rather than a reserve inside it, and is rejected. A token symbol such as 'USDC' is rejected too.","type":"string"}
as served: 2026-09-07 → 2026-09-08
info input input-optional-property-removed Depending on whether the new schema forbids unknown fields, a caller still sending it is ignored or rejected; the row says which. #
prepare_set_collateral inputreserve
their contract · 2026-09-07
{"description":"v4 only: the opaque reserveId, copied verbatim f…","type":"string"}
their contract · 2026-09-08
absent
location
input.reserve
full fragment
{"description":"v4 only: the opaque reserveId, copied verbatim from a get_markets row or a get_position_items item in this session (e.g. 'MTo6MHg5NGU3...Ojo1') - it cannot be constructed or recalled, so fetch one before the first call rather than after a refusal. The 'spokeId' from get_user_positions is NOT this: it is the same encoding one segment short, names the spoke rather than a reserve inside it, and is rejected. A token symbol such as 'USDC' is rejected too.","type":"string"}
as served: 2026-09-07 → 2026-09-08
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
preview_action description
[…] a withdraw. Send only the arguments that apply: v4 takes 'reserve'; 'reserveId'; v3 takes 'market' + 'token' + 'chainId'; 'max' is for […]
as served: 2026-09-07 → 2026-09-08
info input input-optional-property-removed Depending on whether the new schema forbids unknown fields, a caller still sending it is ignored or rejected; the row says which. #
preview_action inputreserve
their contract · 2026-09-07
{"description":"v4 only: the opaque reserveId, copied verbatim f…","type":"string"}
their contract · 2026-09-08
absent
location
input.reserve
full fragment
{"description":"v4 only: the opaque reserveId, copied verbatim from a get_markets row or a get_position_items item in this session (e.g. 'MTo6MHg5NGU3...Ojo1') - it cannot be constructed or recalled, so fetch one before the first call rather than after a refusal. The 'spokeId' from get_user_positions is NOT this: it is the same encoding one segment short, names the spoke rather than a reserve inside it, and is rejected. A token symbol such as 'USDC' is rejected too.","type":"string"}
as served: 2026-09-07 → 2026-09-08
2026-09-03 → 2026-09-04 3 warning 3 tools
3 description-changedas served: 2026-09-03 → 2026-09-04on the index
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
get_reserve_details description
[…] utilisation x (1 - liquidityFee), if you want to check). This is also where the asset's price lives: 'priceUsd', with 'priceSource' naming who priced it, and no listing carries either - get_markets quotes no price at all, so what an asset is worth on Aave is answered here. Use get_markets first to get the reserveId (v4) or market+token (v3).
as served: 2026-09-03 → 2026-09-04
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
prepare_action description
[…] plan (a transaction to sign, or an approval step first). For a borrow or a withdraw, call preview_action first and read its warnings: the simulation is free, it commits nothing, and it is the cheapest way to learn the position cannot take the action - a withdraw of collateral pinned by an open borrow is the case that catches callers out. Non-custodial: the user's wallet signs and submits; nothing is sent […]
as served: 2026-09-03 → 2026-09-04
warning wording description-changed The wording an agent reads to choose and call the tool changed; its behaviour may or may not have. #
preview_action description
[…] and repay; 'native' works on both; 'enableCollateral' is v4 only. What comes back differs by version, because the two protocols offer different amounts of it: Both versions answer with 'healthFactorBefore' and 'healthFactorAfter'; v4 also returns the resulting health factor, net APY, borrowing power risk premium, net collateral, net balance, projected earnings and rewards; both borrowing-power figures, each as a matching Before/After pair, plus 'rewardsAcquired' / 'rewardsAbandoned' when the action changes rewards. v3 returns has the two health factor before and after, factors and nothing else. Either version also returns 'warnings' when the […]
as served: 2026-09-03 → 2026-09-04

03 / tool inventory · as served on 2026-10-15

53 tools in the latest contract.

From the snapshot as served; descriptions shortened to their first sentence. “Changes” counts this server’s findings on the tool.

Tools in the latest snapshot with their input property counts, outputSchema declaration and finding counts
ToolDescriptionInputsRequiredoutputSchemaAnnotationsChanges
cancel_order No version argument. 2 1 none destructive · idempotent · openWorld 0
get_aave_guide Applies to both versions. 2 0 none readOnly 1
get_apy_history Historical supply or borrow APY for a reserve over time, on v3 or v4. 7 0 none readOnly 1
get_asset_history v4 only. 5 3 none readOnly 0
get_chains List chains Aave supports, on v3, v4, or both. 1 0 none readOnly 0
get_emode_categories v3 only. 3 0 none readOnly 0
get_governance_proposal Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). 2 1 none readOnly 0
get_hub_assets v4 only. 2 1 none readOnly 0
get_hubs v4 only. 2 0 none readOnly 0
get_interest_rate_model v4 only. 2 1 none readOnly 0
get_market_history v4 only. 4 2 none readOnly 1
get_markets List Aave markets/reserves (symbol, APY, caps, liquidity) on v3, v4, or both. 4 0 none readOnly 0
get_multichain_asset v4 only. 3 1 none readOnly 0
get_order_status No version argument. 1 1 none readOnly 0
get_pending_orders No version argument: orders run on the v4 backend, so this covers the chains that backend serves and names them under 'chainsCovered'; a chain under 'chainsNotCovered' could not be… 3 1 none readOnly 0
get_position_items v4 only. 4 2 none readOnly 0
get_proposal_payloads Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). 1 1 none readOnly 0
get_proposal_votes Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). 4 1 none readOnly 0
get_protocol_history v4 only. 3 0 none readOnly 0
get_reserve_details Deep detail for a single reserve (rates, caps, risk parameters, utilisation, the interest-rate curve, token addresses) on v3 or v4. 5 0 none readOnly 2
get_reserve_holders v4 only. 5 1 none readOnly 0
get_risk_premium v4 only. 3 2 none readOnly 0
get_safety_module Aave's Safety Module, Ethereum only, and the one product here that is read from the contracts rather than the Aave API. 1 0 none readOnly 0
get_sgho_preview v3 only, Ethereum only. 3 2 none readOnly 0
get_sgho_vault v3 only, Ethereum only. 2 0 none readOnly 1
get_spoke_configs v4 only. 3 2 none readOnly 1
get_started Applies to both versions. 0 0 none readOnly 0
get_swap_quote No version argument: token swaps are protocol-agnostic and run on the v4 backend, so the chains and tokens they cover are that backend's and not every chain Aave holds a market on … 7 5 none readOnly 0
get_swappable_tokens No version argument: token swaps are protocol-agnostic and run on the v4 backend, so they cover the chains that backend serves rather than every chain Aave has a market on. 1 0 none readOnly 0
get_transaction_processed v4 only. 3 2 none readOnly 0
get_user_activity A wallet's Aave transaction history (supply, borrow, repay, withdraw, collateral changes) on v3, v4, or both. 5 1 none readOnly 0
get_user_positions A wallet's Aave positions (supplies and borrows) on v3, v4, or both. 3 1 none readOnly 0
get_user_rewards A wallet's claimable Aave rewards on v3, v4, or both. 3 1 none readOnly 0
get_user_summary A wallet's aggregate position and health factor. 3 1 none readOnly 1
get_user_summary_history v4 only. 4 1 none readOnly 0
get_user_vote Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). 2 2 none readOnly 0
get_vault_activity v3 only. 5 3 none readOnly 1
get_vault_preview v3 only. 5 4 none readOnly 0
get_vaults v3 only. 6 0 none readOnly 0
get_wallet_balances v4 only. 3 1 none readOnly 0
prepare_action Build an unsigned transaction to supply, borrow, withdraw, or repay on Aave (v3 or v4). 13 2 none readOnly 3
prepare_cancel_order No version argument. 1 1 none readOnly 0
prepare_claim_rewards v4 only. 4 1 none readOnly 0
prepare_liquidation Build an unsigned transaction to liquidate an unhealthy position: repay part of someone else's debt and receive their collateral plus the liquidation bonus. 11 2 none readOnly 0
prepare_order No version argument: every order runs on the v4 backend. 4 1 none readOnly 0
prepare_set_collateral Build an unsigned transaction to change whether a supplied asset is used as collateral (v3 or v4). 7 1 none readOnly 1
prepare_set_emode v3 only. 5 4 none readOnly 0
prepare_sgho_action v3 only, Ethereum only. 6 2 none readOnly 0
prepare_stkgho_migrate v3 only, Ethereum only. 2 1 none readOnly 1
prepare_vault_action v3 only. 8 5 none readOnly 0
preview_action Simulate a supply/borrow/withdraw/repay against a wallet's position WITHOUT executing, on v3 or v4. 11 2 none readOnly 3
search_governance_proposals Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). 5 0 none readOnly 0
submit_signed_order No version argument: every order runs on the v4 backend. 2 2 none destructive · idempotent · openWorld 0