Aave
Server Details
Aave's official MCP
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
40 toolscancel_orderCancel an orderADestructiveIdempotentInspect
No version argument. Cancel an open order. Two routes: pass 'signature' (signed over what prepare_cancel_order returned) to relay a gasless cancellation - state-changing, and the route an intent order takes; omit 'signature' entirely for the on-chain route, which returns the cancel transaction for the user to sign and send, the route an order that went on chain (a native-token sell) takes. The server never signs.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | The order id (from submit_signed_order's receipt, get_order_status or get_pending_orders). | |
| signature | No | The user's cancellation signature (0x...) over prepare_cancel_order's typed data. Omit the argument entirely to get the on-chain cancel transaction instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-readOnly behavior, but the description adds significant context: it is state-changing, the on-chain route returns a transaction for the user to sign, gasless cancellation is relayed, and 'the server never signs.' This clarifies exactly what side effects and signing responsibilities exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded with the core action. It packs the two-route decision, signing behavior, and server constraint into three sentences. The wording is slightly dense with repeated route clauses, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, state-changing tool with no output schema, the description covers route selection, prerequisites, and signing behavior well. The only notable gap is that the return value for the gasless route is not described; only the on-chain route's return transaction is explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying that 'signature' must be signed over prepare_cancel_order's typed data and that omitting it entirely switches to the on-chain route. This connects the parameter semantics to concrete tool flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Cancel an open order' — a specific verb and resource — and then distinguishes two execution routes. It also references prepare_cancel_order, making clear this tool is the cancellation action and not the preparation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to pass 'signature' versus omit it: the gasless route for intent orders and the on-chain route for native-token sells. It clearly maps parameters to routes, though it does not mention alternative cancellation-related tools beyond the prerequisite prepare_cancel_order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aave_guideAave protocol & usage guideARead-onlyInspect
Applies to both versions. Protocol and usage guidance for building Aave flows correctly. Read the relevant topic before constructing an action. Topics: overview, v4, v3, positions, health-factor, risks, ids, amounts, prices, signing, swaps, gho, governance, rewards, tools, docs. Also the place to come when no tool seems to fit what you were asked for: send 'lookingFor' and this answers with the full capability list rather than leaving you to guess from tool names. For deep protocol docs, point the user to https://docs.aave.com.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Guide topic (default overview). Read 'v3' or 'v4' before building an action on that version. | |
| lookingFor | No | Send this when you looked for a tool to do something and did not find one, or when a flow dead-ended: describe what you were trying to do, in a few words. It returns the full capability list so you can check whether it exists under a name you did not guess, and records the gap when it does not. Omit the argument entirely when you already know which topic you want. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive; the description adds meaningful behavior beyond that: it applies to both v3 and v4, returns the full capability list for lookingFor, records gaps when a capability is missing, and points users to external docs for deep protocol details. This is useful context for an agent deciding how to use the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences in a logical order: scope, guidance, topics, fallback, and external docs. It could be tighter because the topic list duplicates the schema enum, but every sentence serves a functional purpose and the most important guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only guide with two optional parameters and no output schema, the description gives enough to select and invoke it: when to read, what topics exist, how lookingFor behaves, and where to send users for deeper docs. A minor gap is not explicitly stating the return format, but 'answers' and 'returns the full capability list' imply textual guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description does not need to carry parameter documentation. It reinforces topic usage and adds a small behavioral detail for lookingFor ('records the gap'), but it largely repeats the schema's enum and descriptions. Value added is modest but real.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific role: a protocol and usage guide for building Aave flows correctly, with a fallback for capability discovery when no tool fits. The verbs 'read' and 'guide' plus the resource 'Aave protocol' are explicit, and the 'no tool seems to fit' behavior distinguishes it from the many data/action siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete when-to-use triggers: read a topic before constructing an action, and send 'lookingFor' when no tool seems to fit or a flow dead-ends. It also directs deep-documentation cases to docs.aave.com. It does not explicitly contrast with get_started or state when not to use this tool, but the guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apy_historyGet APY historyARead-onlyInspect
Historical supply or borrow APY for a reserve over time, on v3 or v4. Returns a time-series of {date, apyPct}, where apyPct is a percent ('3.32' means 3.32%). Each point is an average over its sampling interval, and the interval widens with the window (hourly for 'day', coarser above that), so a series is not directly comparable to the instantaneous rate from get_reserve_details. Use get_markets first for the reserveId (v4) or market+token (v3). When comparing v3 against v4 for the same asset (a migration decision), read the history on both sides: a spot-rate gap can be one side's momentary spike.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Which rate (default supply). | |
| token | No | v3 only: underlying token address. | |
| market | No | v3 only: market pool address (from get_markets). | |
| window | No | Time window (default week). | |
| chainId | No | v3 only: chain id (positive integer). | |
| reserve | No | v4 only: reserveId (from get_markets). | |
| version | Yes | Protocol version (v3 or v4; required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses return shape ({date, apyPct}), value semantics (percent, e.g. '3.32'), averaging behavior, window-dependent sampling intervals, and the comparability caveat with get_reserve_details. This significantly enriches what the agent knows before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, front-loading the core purpose and progressively adding return format, averaging semantics, and usage caveats. Each sentence adds distinct value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fulfills the burden by explaining the return time-series and percent format. It also covers prerequisites, version-specific parameter requirements, and a nuanced migration comparison scenario, making it highly complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter basics are already documented. The description adds valuable semantic context by explaining that market/token/chainId belong to v3, reserve belongs to v4, identifiers come from get_markets, and window affects aggregation granularity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific operation: retrieving historical supply or borrow APY for a reserve over time, and explicitly scopes it to v3 or v4. It also distinguishes itself from get_reserve_details by noting the historical series is not comparable to an instantaneous rate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states to call get_markets first for the required identifiers and gives a concrete migration scenario where both v3 and v4 histories should be read. It does not enumerate all alternatives, but the key routing guidance is present and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chainsGet supported chainsARead-onlyInspect
List chains Aave supports, on v3, v4, or both. A chain carrying 'notServed': true is one this API holds no market on: every market, position and rewards read comes back empty for it, and that emptiness says nothing about the chain itself. Its gateway addresses read 0x0 for the same reason, so do not send a transaction to one. Every chain without the flag has markets to read.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description reveals important behavior: notServed chains produce empty market/position/rewards reads, gateway addresses read 0x0, and sending transactions to such chains is unsafe. This is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the core purpose front-loaded and the notServed caveat following in a logical order. Every sentence adds value, and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers the key decisions: which version to query, what notServed means, and why gateway transactions should be avoided. It does not spell out the full response shape beyond the notServed and gateway fields, but the low complexity keeps this gap small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the only parameter fully with an enum and a default value. The description's 'on v3, v4, or both' mirrors the schema rather than adding new semantic detail, so it stays at the baseline for 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'List chains Aave supports', then scopes it by protocol version (v3, v4, or both). This gives the agent an unambiguous purpose and naturally separates it from sibling tools like get_markets or get_hubs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical guidance: chains with 'notServed': true return empty data and have 0x0 gateway addresses, so transactions should not be sent to them. It does not explicitly compare with alternatives, but the tool's narrow read-only scope makes this omission minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emode_categoriesGet v3 eMode categoriesARead-onlyInspect
v3 only. eMode groups correlated assets (ETH-correlated, stablecoins) so they borrow against each other at a higher LTV, raising borrowing power at the cost of restricting which assets the position may hold. Returns each market's categories with the 'categoryId' that prepare_set_emode takes, its LTV and liquidation thresholds, and which symbols are in it. Narrow with 'symbols' (e.g. ['USDC']) to get just the categories that asset is in - unfiltered this is every category on every chain. Markets with no matching category are left out entirely. v4 has no eMode: it replaces it with risk premium and dynamic config.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| symbols | No | Optional token symbols to return, e.g. ['USDC','GHO']. Case-insensitive. Strongly preferred when you know the asset: a chain has ~70 reserves and listing them all is a large response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds valuable behavioral details beyond that: markets without matching categories are omitted from results, unfiltered calls return every category on every chain, and the returned categoryId is specifically what prepare_set_emode consumes. This gives the agent accurate expectations about response scope and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: version restriction, conceptual context, return contents, filtering guidance, omission behavior, and v4 contrast. The description is dense but well organized, front-loading the critical v3-only constraint before operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explains the key return fields (categoryId, LTV, liquidation thresholds, symbols), scoping behavior, and filtering semantics. For a read-only lookup tool with optional parameters, this is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description enriches both parameters: it explains that omitting chainId covers all chains and that filtering by symbols returns only the categories containing that asset, with a strong preference hint due to response size. This goes beyond the schema's basic descriptions without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and clearly identifies the resource: eMode categories per market, including categoryId, LTV, liquidation thresholds, and symbols. It also distinguishes itself by noting v3-only applicability and contrasting with v4's replacement of eMode, making it unambiguous versus sibling tools like prepare_set_emode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: only for v3 chains, with v4 explicitly called out as not having eMode. It also provides practical guidance on using the 'symbols' filter and notes the large unfiltered response, though it does not explicitly name alternative tools or say when not to use this one beyond the v4 exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_governance_proposalGet an Aave DAO proposalARead-onlyInspect
Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). Full detail for one Aave DAO governance proposal: state, author, vote tallies, quorum, timings and the transaction hash of each lifecycle step. 'quorumMet' and 'differentialMet' are the two conditions a proposal must meet to pass. Vote tallies and quorum are both in AAVE, so they compare directly. The long IPFS write-up is omitted unless includeDescription is true.
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | Proposal id as a decimal string, e.g. '508'. From search_governance_proposals. | |
| includeDescription | No | Include the full proposal markdown from IPFS (default false). It runs to many KB; the short description is always returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description adds substantial behavioral detail: the relationship of quorumMet/differentialMet to passing, the directly comparable AAVE units, and the fact that the long IPFS description is omitted unless includeDescription is true. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but free of fluff. Every sentence earns its place: scope clarification, field listing, pass-condition semantics, and parameter behavior are all functional rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return content and does so thoroughly: state, author, tallies, quorum, timings, lifecycle hashes, pass conditions, and optional IPFS content. The input schema and annotations cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds value by clarifying the source of proposalId ('from search_governance_proposals') and the behavior of includeDescription, including that the short description is always returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Full detail for one Aave DAO governance proposal' with a concrete list of included fields. It distinguishes itself from market-scoped tools by explicitly saying Governance V3 is unrelated to Aave v3/v4 markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and an exclusion: it takes no 'version' argument and is not per-market, so agents won't misuse it for market-specific queries. It does not explicitly name sibling alternatives like get_proposal_votes or get_proposal_payloads for narrower lookups, but the core usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hub_assetsGet the assets a v4 hub carriesARead-onlyInspect
v4 only. The assets held by one Aave v4 hub, with hub-wide supplied and borrowed totals, rates and utilisation. Get hubId from get_hubs (or the hubAddress on get_reserve_details). This is hub-level accounting; for what a user can actually supply or borrow, use get_markets, which is per spoke.
| Name | Required | Description | Default |
|---|---|---|---|
| hubId | Yes | hubId from get_hubs. | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: this is hub-level accounting, v4-only, and returns aggregate totals, rates, and utilisation. It does not contradict annotations and adds useful scope clarification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the critical 'v4 only' constraint, and every sentence earns its place: purpose, contained metrics, parameter sourcing, and routing to the alternative tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool, the description fully covers what an agent needs: version, input sourcing, output contents, and when to choose a different tool. No output schema exists, but the description provides sufficient return-value orientation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds extra value by telling the agent where hubId comes from and reiterating the version constraint, which helps ensure correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get') and resource ('assets held by one Aave v4 hub'), and further specifies the contents: supplied and borrowed totals, rates, and utilisation. It explicitly distinguishes itself from get_markets, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: 'v4 only', explains how to obtain hubId from get_hubs or get_reserve_details, and explicitly directs to get_markets for per-spoke user supply/borrow data. This is a model example of routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hubsGet v4 hubsARead-onlyInspect
v4 only. Aave v4 hubs: a hub holds the liquidity and global accounting that user-facing spokes draw from. Returns each hub's hubId, address, chain and totals. Pass a hubId to get_hub_assets for the assets it carries. Omit chainId to cover every supported v4 chain.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive. The description adds useful behavior beyond the annotations: the v4-only constraint, the hub/spoke relationship, and the explicit output fields. It does not discuss pagination or error behavior, but for a simple read-only list tool with safe annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences with every sentence contributing: scope, concept, return fields, sibling routing, and chainId behavior. It is front-loaded with 'v4 only' and contains no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only hub-listing tool with no required parameters and no output schema, the description is complete: it identifies what a hub is, what fields are returned, which chains are covered, and where to go for asset details. The annotations cover the safety profile, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with chainId and version already well documented. The description restates the 'omit chainId' behavior but adds no new parameter semantics beyond what the schema provides. The baseline of 3 applies because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and a concrete resource ('Aave v4 hubs'), and states exactly what is returned: hubId, address, chain, and totals. It also clarifies the hub concept and explicitly distinguishes this tool from get_hub_assets by pointing to that sibling for asset-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it is v4-only, it lists hubs, and omitting chainId covers all supported v4 chains. It also routes the agent to get_hub_assets when assets are needed. It does not enumerate exclusions against the many other sibling list tools, but the guidance covers the main alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketsGet markets / reservesARead-onlyInspect
List Aave markets/reserves (symbol, APY, caps, liquidity) on v3, v4, or both. Chain coverage: omit chainId and every response states the chains it read as 'chainsCovered', plus 'chainsNotCovered' when it read fewer than all of them. 'chainsNotServed', when present, lists chains this API holds no market on: Aave supports the chain, there is nothing here to read, so an empty result for one of them is not an answer about that chain, and asking again returns the same nothing. v4 always covers every chain it serves; v3 covers every chain when you pass 'symbols' and Ethereum alone when you do not, because an unfiltered 21-chain listing is hundreds of kilobytes. So to compare one asset across chains, pass symbols and no chainId. Every rate is a percent ('3.32' means 3.32%), named with a Pct suffix. Do not rank on APY alone: 'suppliable'/'borrowable' (v4), 'availableLiquidity' and 'totalSuppliedUsd' (v3) say whether a rate can actually be entered, and isFrozen / isPaused / supplyCapReached / borrowCapReached appear only when set, so a reserve with none of them is not flagged. Both versions return one row per reserve under 'reserves', carrying supplyApyPct and borrowApyPct together plus canSupply / canBorrow for the sides that are actually open, so the two versions read the same way. On v4 one asset appears once per spoke, so rows are labelled with 'spoke' and 'hub'; spokes sharing a hub share its rate, so identical APYs across rows are expected rather than duplicates. 'canSwapFrom' (v4) says whether that token can be the sell side of a token swap, which is the per-reserve form of what get_swappable_tokens answers per chain.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Optional wallet address (0x, 40 hex). Adds walletBalance, youCanSupply and youCanBorrow to every row, for this wallet, in the same call. Pass it whenever the question is about what someone can actually do rather than what the rates are. | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| symbols | No | Optional token symbols to return, e.g. ['USDC','GHO']. Case-insensitive. Strongly preferred when you know the asset: a chain has ~70 reserves and listing them all is a large response. | |
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far beyond the readOnly/destructive annotations: 'chainsCovered' vs 'chainsNotCovered', v3 reading only Ethereum without symbols, 'an empty result for one of them is not an answer about that chain', and 'asking again returns the same nothing'. It also explains that isFrozen/isPaused/cap flags appear only when set and that v4 spokes sharing a hub share rates. These are exactly the behavioral traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though long, every sentence carries non-obvious operational knowledge: chain coverage, version differences, rate units, flag semantics, row labeling, and swap direction. It is front-loaded with the core list purpose and then layers essential caveats without fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and four parameters, the description fully compensates by explaining response shape ('one row per reserve under reserves', 'supplyApyPct and borrowApyPct together'), edge cases, repeated-query behavior, and version-specific behavior. An agent can correctly invoke the tool and interpret results without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already covers all four parameters at 100%, so the baseline is 3. The description adds value beyond the schema by explaining how to combine parameters ('pass symbols and no chainId', omit chainId for full coverage) and by connecting symbols to response size. This goes beyond repetition of schema text, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List Aave markets/reserves (symbol, APY, caps, liquidity) on v3, v4, or both.' It names the exact output scope and distinguishes itself from sibling tools by noting that get_swappable_tokens answers the per-chain form of canSwapFrom. This is unambiguous and differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is pervasive: 'to compare one asset across chains, pass symbols and no chainId', 'omit chainId and every response states the chains it read', and 'Strongly preferred when you know the asset'. It names get_swappable_tokens as an alternative and explains the v3-only behavior when symbols is omitted. No important usage context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_statusGet order statusARead-onlyInspect
No version argument. Status of an order by id: open, pending signature, fulfilled, cancelled or expired, with the operation it performs and an explorer link. 'order' comes back null when the API cannot see that id, which a wrong id and a just-submitted order both produce - poll again briefly before concluding.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | The order id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description reveals what the response contains (status, operation, explorer link) and the ambiguous null behavior for unknown or just-submitted orders, including the advice to poll again briefly. This materially helps an agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, leading with the core purpose and status list, then covering the important null edge case in the final sentence. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with no output schema, the description covers the returned statuses, included information, and the key failure/races condition. This is sufficient for an agent to invoke the tool and interpret its result without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says orderId is 'The order id.' The description adds that the lookup is by id, notes there is no version argument, and explains how a valid but not-yet-visible id behaves. This adds meaningful semantics beyond the schema, though the schema coverage is already complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Status of an order by id', and enumerates the exact statuses returned. It clearly distinguishes this single-order lookup from sibling tools like get_pending_orders or cancel_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is for checking the status of a specific order by its id and even explains the null result is expected for recently submitted orders. It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_ordersList a wallet's ordersARead-onlyInspect
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 read and is worth asking about again. A wallet's orders, newest first. Despite the name it returns every status unless 'statuses' narrows it - pass ['open','pending_signature'] for what is still actionable. Each chain returns its newest 50 orders; 'more: true' on a chain means older history exists beyond what was returned. Use this to recover an orderId you no longer have.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| chainIds | No | Optional: chain ids to read. Omit the argument entirely to sweep every chain the backend serves. | |
| statuses | No | Optional: statuses to keep. Omit the argument entirely for all of them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by disclosing that the v4 backend determines chain coverage, that a chain in 'chainsNotCovered' could not be read, that each chain returns only its newest 50 orders, and that 'more: true' signals older history exists. These are critical behavioral details not captured in the schema or annotations. The description does not contradict the readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs substantial detail into four sentences, with the most decision-relevant facts front-loaded: backend version, chain coverage, and ordering. It is dense but every sentence carries useful behavioral or usage information. The only minor issue is that 'more: true' is somewhat jargon-heavy, but it is explained immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers input semantics, chain coverage, status filtering, result limits, pagination signals, and a concrete use case (recovering an orderId). It even addresses a likely failure mode (chainsNotCovered). There is no meaningful gap for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the three parameters, so the baseline is 3. The description adds semantic value by explaining the consequence of omitting chainIds ('sweep every chain') and the recommended statuses value for actionable orders, which goes beyond the raw schema descriptions. It doesn't restate the enum values, which is appropriate since they are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists a wallet's orders, sorted newest first, across chains served by the v4 backend. It distinguishes itself from get_order_status by explaining it can recover an orderId. However, the name already implies 'pending orders' while the description clarifies it returns every status unless narrowed, which adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: use it to recover an orderId you no longer have, pass ['open','pending_signature'] for actionable orders, and omit chainIds to sweep every chain. It also tells the agent that chains under 'chainsNotCovered' should be asked about again, which is practical routing advice beyond what the schema provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_position_itemsGet individual position items (v4)ARead-onlyInspect
v4 only. The individual supplies or borrows inside one v4 spoke: principal, accrued interest and what is withdrawable right now, per item, which the per-spoke aggregate from get_user_positions cannot show. Get 'spokeId' from get_user_positions.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Which side to list (default supply). | |
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| spokeId | Yes | spokeId from get_user_positions (not the spoke address). | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it is restricted to v4 and exposes per-item breakdowns rather than aggregates. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it begins with the critical 'v4 only' constraint, states the output content, and names the alternative it complements. Every sentence adds distinct value with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, low-complexity tool with fully documented parameters, the description is complete. Even without an output schema, it tells the agent what data to expect (principal, accrued interest, withdrawable amount) and how to obtain the required spokeId.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters, defaults, and constraints. The description's only parameter-related addition is the pointer that spokeId comes from get_user_positions, which the schema already states. It does not meaningfully compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('get') and a specific resource ('individual position items'), and clearly defines the content: principal, accrued interest, and withdrawable amount per item. It also explicitly contrasts itself with the per-spoke aggregate from get_user_positions, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that the tool is v4 only, explains that it fills a gap left by get_user_positions ('which the per-spoke aggregate ... cannot show'), and instructs the agent to obtain 'spokeId' from get_user_positions. This gives clear when-to-use and how-to-prepare guidance with reference to the relevant sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proposal_payloadsGet a proposal's payloadsARead-onlyInspect
Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). What an Aave DAO proposal actually executes: one payload per target chain, each with its execution state, timelock delay, grace period and the contract calls it makes. Use this to tell whether a passed proposal has landed on every chain yet: a proposal can be 'executed' on mainnet while a payload is still 'queued' elsewhere.
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | Proposal id as a decimal string, e.g. '508'. From search_governance_proposals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds meaningful context beyond that: the tool takes no 'version' argument and why, the per-chain structure of payloads, and the meaning of execution state across chains. This provides useful behavioral detail without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. Each sentence earns its place: the first corrects a likely misuse, the second explains what the tool returns, and the third gives a concrete decision-oriented use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with no output schema, the description is nearly complete: it explains the payload concept, its components, and how to use the results to assess cross-chain execution. It could be more explicit about the output format, but the provided context is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the only parameter, proposalId, with an example ('508') and its source (search_governance_proposals), so schema coverage is 100%. The description does not add new parameter-level detail beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve the payloads of an Aave DAO proposal. It goes beyond the title by detailing what a payload is (per-chain execution state, timelock delay, grace period, contract calls), making it clearly distinct from governance proposal or vote tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use case: 'Use this to tell whether a passed proposal has landed on every chain yet', with a concrete example of mainnet executed while another chain is still queued. It does not name alternatives directly, but the context makes the tool's role clear relative to sibling governance tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proposal_votesGet votes on a proposalARead-onlyInspect
Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). Who voted on an Aave DAO proposal and with how much power, largest voter first. Pass support=true or false to list only one side. 'totals' covers every vote on the proposal, not just the page returned. Voting power is in AAVE.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (1-100, default 20). | |
| offset | No | Rows to skip, for paging (default 0). | |
| support | No | Filter to one side: true for votes in favour, false for against. Omit for both. | |
| proposalId | Yes | Proposal id as a decimal string, e.g. '508'. From search_governance_proposals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses important non-obvious behaviors: results are sorted largest voter first, 'totals' covers every vote including those beyond the returned page, support filters by voting side, and voting power is expressed in AAVE. These are exactly the behavioral details an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence carries useful information and there is no filler. However, the description opens with a caveat about the nonexistent 'version' argument rather than the main purpose, which slightly hurts front-loading. It is compact and well structured overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with four parameters and no output schema, the description is sufficient: it explains result content, ordering, units, totals behavior, and filtering. Required parameters and pagination semantics are covered by the schema. No critical calling behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description restates support filtering and pagination-related behavior in prose, but it does not add parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action: listing who voted on an Aave DAO proposal and with how much power, ordered largest voter first. It clearly distinguishes this from governance proposal metadata tools by focusing on vote-level detail, and the 'no version argument' note disambiguates it from market-related governance confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is DAO governance, not market-specific, and warns against passing a 'version' argument. It also explains when to pass support=true or false. However, it does not explicitly name sibling alternatives like get_governance_proposal or get_user_vote, so routing is mostly inferred rather than fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocol_historyProtocol totals over time (v4)ARead-onlyInspect
v4 only. Aave v4 protocol-wide history: market size, total borrows and available liquidity per sample over a window. Omit chainId to cover every supported v4 chain. Use this for 'is the protocol growing', not for one wallet (get_user_summary_history) or one reserve (get_apy_history).
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Time window (default week). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds valuable non-obvious behavior: the tool is v4-only, can aggregate across all chains when chainId is omitted, and returns sampled data per window. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. It front-loads the version constraint and core purpose, then provides routing guidance. Every sentence carries necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with zero required parameters and a well-covered schema, the description supplies the essential decision context: use case, exclusion criteria, and chain scope behavior. It even summarizes the return data (market size, borrows, liquidity per sample), which compensates for the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameter descriptions, so the baseline is 3. The description adds a useful clarification about omitting chainId for multi-chain coverage, but most parameter meaning (window options, chainId semantics, version restriction) is already in the schema. No significant added value beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get protocol-wide Aave v4 history, with concrete metrics (market size, total borrows, available liquidity) and sampling over a window. It explicitly distinguishes itself from wallet-level and reserve-level history tools, so an agent can identify it among many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this for is the protocol growing' and names the alternatives it is not (get_user_summary_history, get_apy_history). It also gives a concrete call-time guideline: omit chainId to cover all supported v4 chains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reserve_detailsGet reserve detailsARead-onlyInspect
Deep detail for a single reserve (rates, caps, risk parameters, utilisation, the interest-rate curve, token addresses) on v3 or v4. Every rate and percentage is a percent ('3.32' means 3.32%), named with a Pct suffix. On v4, utilisation and the rate curve are hub-wide, shared by every spoke drawing on the asset. Two v4 fields whose meaning the numbers do not give away: 'collateralFactorPct' is the liquidation boundary itself, because v4 has no separate liquidation threshold - do not look for one - so a position drawn to its full borrow limit sits at health factor 1.0; and 'liquidityFeePct' is the protocol's share of borrower interest, already netted out of supplyApyPct, so treating it as a user cost double-counts it (supplyApy = borrowApy x 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).
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | v3 only: underlying token address. | |
| market | No | v3 only: market pool address (from get_markets). | |
| chainId | No | v3 only: chain id (positive integer). | |
| reserve | No | v4 only: reserveId (from get_markets). | |
| version | Yes | Protocol version (v3 or v4; required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive, and the description adds substantial semantic context: percentages are percent values with Pct suffix, v4 utilisation is hub-wide, collateralFactorPct is the liquidation boundary (health factor 1.0), and liquidityFeePct is already netted out of supplyApyPct with a formula. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, every portion earns its place: scope sentence, unit caveat, v4 field semantics, price ownership, and call sequencing. It is front-loaded with the core purpose before diving into edge-case explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the burden of describing what the agent will receive; it names the important fields (priceUsd, priceSource, collateralFactorPct, liquidityFeePct) and explains their interpretation. The supplyApy formula closes a significant double-counting trap, and the get_markets-first guidance fills the parameter prerequisite gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds real value by explaining how to populate the v3 vs v4 identifiers (reserveId from get_markets, market+token for v3) and by clarifying unit conventions for output values. It doesn't need to re-explain chainId because the schema already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Deep detail for a single reserve' - a specific verb and resource - and lists concrete content areas (rates, caps, risk parameters, utilisation, curve, token addresses). It also distinguishes the tool from get_markets by pointing out that get_markets quotes no price and that the reserve IDs come from there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences the workflow: 'Use get_markets first to get the reserveId (v4) or market+token (v3).' It also tells the agent that price data lives here and not in get_markets ('what an asset is worth on Aave is answered here'), creating a clear selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sgho_previewPreview an sGHO deposit or withdrawalARead-onlyInspect
v3 only, Ethereum only. Convert between GHO and sGHO shares at the vault's current index, without building anything. Which unit 'amount' is in depends on the action: 'deposit' takes GHO and returns the shares it would mint; 'withdraw' takes sGHO SHARES and returns the GHO they would return. Call this with action 'withdraw' before prepare_sgho_action, because that withdrawal is denominated in shares and not in GHO - passing a GHO figure there withdraws the wrong amount. When quoting what a user-named amount converts to, use this preview rather than multiplying by the rate: the index moves.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | 'deposit' converts GHO to shares; 'withdraw' converts shares to GHO. | |
| amount | Yes | Amount in main units (e.g. '10.5'): GHO when action is 'deposit', sGHO shares when it is 'withdraw'. | |
| version | No | Optional, and only 'v3': this tool exists on v3 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: the conversion uses the vault's live index, the tool does not build or submit anything, and the result is a quote rather than a transaction. It also explains the reason the index matters for correctness. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, with every sentence contributing a necessary constraint or behavioral fact: version and chain scope, conversion semantics, unit asymmetry, usage ordering, and the reason to avoid manual rate multiplication. The critical caveats are front-loaded and clearly worded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only preview tool with no output schema, the description provides enough context for correct invocation: what inputs mean, what each action returns, which version is supported, and how this tool relates to prepare_sgho_action. An agent has all the information needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic value by tying the amount's unit to the action: 'deposit' takes GHO and returns shares, while 'withdraw' takes sGHO shares and returns GHO. It further reinforces the critical distinction that passing a GHO figure to the withdrawal path would be wrong. This goes beyond the schema's per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: previewing an sGHO deposit or withdrawal. It clearly states it converts between GHO and sGHO shares at the vault's current index and says it does so 'without building anything,' which distinguishes it from prepare_sgho_action. The unit asymmetry between deposit and withdraw is explicitly explained, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to call this tool before prepare_sgho_action, warns that withdraw is denominated in shares rather than GHO, and cautions against using simple rate multiplication because 'the index moves.' It also scopes the tool to v3 and Ethereum only. This gives clear when-to-use guidance and names the relevant alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sgho_vaultGet the sGHO savings vaultARead-onlyInspect
v3 only, Ethereum only. Savings GHO (sGHO) is an ERC-4626 vault that pays a target rate on deposited GHO. Returns the vault's targetRatePct, totalAssets, supplyCap and paused flag; pass 'user' to add that wallet's shares, their GHO value, its GHO wallet balance, and the maxDeposit / maxWithdraw the contract allows right now. Two things this rate is not: it is set by governance rather than by utilisation, so it does not move with borrowing demand, and it is not a lending position - sGHO earns yield but is not Aave collateral and cannot be borrowed against. Deposits and withdrawals are instant, with no cooldown.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Optional wallet address (0x, 40 hex) to include its position. Omit the argument entirely for vault state only. | |
| version | No | Optional, and only 'v3': this tool exists on v3 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, and the description goes well beyond them: it spells out scope (v3/Ethereum), the specific returned values, optional per-wallet enrichment, and the rate's governance-set nature. It also states deposits/withdrawals are instant with no cooldown, adding behavioral nuance an agent could not infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with chain/version scope, and each sentence earns its place: return fields, optional user behavior, and rate caveats. It is longer than average but packed with decision-relevant detail rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with no output schema, this description covers the essential invocation context and return semantics. It names all return fields, handles the optional parameter, and adds limitations/caveats an agent would need to interpret the data correctly. Very little is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to re-document parameters, but it adds real value by explaining the effect of passing 'user' and the alternative of omitting it. The version parameter is correctly constrained to v3 in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource ('sGHO savings vault'), a specific verb ('Returns'), and enumerates the exact data fields returned. It also clarifies what sGHO is not (a lending position/collateral), which prevents confusion with Aave lending tools. This is enough to distinguish it from siblings such as get_sgho_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with scoping constraints ('v3 only, Ethereum only') and explains the optional user parameter flow ('pass user to add... omit... for vault state only'). It gives clear context for invocation, though it does not explicitly name alternative sibling tools or state when to prefer this over get_sgho_preview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_startedWhat this connector can doARead-onlyInspect
Applies to both versions. What this Aave server can do: the tool families, the ready-made prompts, and the guide topics. Call this when an Aave conversation opens with no specific request and answer from it, rather than guessing from tool names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is read-only and non-destructive. The description adds useful behavioral context: it applies to both versions, it returns an overview of tool families, prompts, and guide topics, and it is meant to be the source for an initial response. No contradiction exists between the description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the key orientation purpose stated in the first sentence. Every sentence adds value: scope, content, and the exact trigger condition for use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter informational tool, the description is complete: it names the content covered, the versions it applies to, when to call it, and how to use the returned information. The absence of an output schema is acceptable because the tool's output is described at a high level as an answer source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage, so there is no parameter ambiguity. With no parameters, the description does not need to explain parameter meaning; the baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool is an orientation resource for the Aave connector, covering tool families, ready-made prompts, and guide topics. It distinguishes itself from the many specific get_/prepare_/preview_ siblings by positioning itself as the entry point when no specific request exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to call this tool when an Aave conversation opens with no specific request and to answer from its content. It also warns against guessing from tool names, which is a clear routing rule against using the alternative specific tools prematurely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swappable_tokensGet swappable chains and tokensARead-onlyInspect
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. Call this before get_swap_quote to see where a swap can be quoted: with no arguments it sweeps the chains v4 serves and returns each one with how many tokens are swappable there, which is the cheap answer; pass 'chainIds' to get the actual token list, and to ask about a chain the sweep does not reach. A chain under 'chainsNotCovered' could not be read and is worth asking about again; a chain present with 0 swappable tokens answered, and the answer is that nothing can be swapped there. Per reserve, get_markets also returns 'canSwapFrom'.
| Name | Required | Description | Default |
|---|---|---|---|
| chainIds | No | Optional: chain ids to list tokens for. Omit the argument entirely to get every chain with a count instead of a token list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, but the description adds meaningful behavioral detail: the v4 backend scope, the distinction between a chain not covered and a chain with zero swappable tokens, and the cheap count-sweep behavior. These edge cases are not visible in the input schema and materially affect how results should be interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and packed with useful operational distinctions; no sentence is wasted. Some phrasing is slightly awkward, such as the opening 'No version argument' clause and the semicolon-heavy 'chainsNotCovered' explanation, but the overall structure front-loads the most important usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional parameter, no output schema, and safety-related annotations, the description is remarkably complete. It covers invocation modes, result interpretation, failure semantics, and relevant sibling tools, so an agent has enough information to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents chainIds as an optional array, but the description enriches this by explaining that omitting the argument produces a chain-count sweep while providing chainIds yields token lists. It also clarifies that passing chainIds can query chains outside the default sweep, adding meaning well beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns swappable chains and tokens, either as a count sweep when called with no arguments or as an actual token list when chainIds is passed. It also differentiates the tool from related siblings like get_swap_quote and get_markets, so an agent can understand its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this before get_swap_quote, explains when to omit chainIds versus passing them, and describes how to handle chains that appear under 'chainsNotCovered'. It also points to get_markets as an alternative source of per-reserve 'canSwapFrom' data, giving clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swap_quoteGet a token swap quoteARead-onlyInspect
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 - a chain it does not serve is rejected outright rather than quoted badly. Call get_swappable_tokens first if you do not already know the chain is covered, or read 'canSwapFrom' on the reserve from get_markets. Quote a token swap: returns the quote with a quoteId to prepare and sign through prepare_order.
| Name | Required | Description | Default |
|---|---|---|---|
| buy | Yes | Token to buy: 'native' for the chain's gas token, or an ERC-20 address (0x...). | |
| kind | No | sell = spend an exact sell amount; buy = receive an exact buy amount. Default sell. | |
| sell | Yes | Token to sell: 'native' for the chain's gas token, or an ERC-20 address (0x...). | |
| user | Yes | Wallet address (0x, 40 hex) of the wallet that will sign the swap - the one the user named in this session. If no wallet has been named, ask for it; never substitute a placeholder, which is rejected. | |
| amount | Yes | Amount in main units (of the sell token for kind=sell, the buy token for kind=buy). | |
| chainId | Yes | Chain id (positive integer). | |
| slippagePct | No | Optional max slippage as a percent string, e.g. '0.5' for 0.5%. Omit to accept the backend's suggestion, which moves with market conditions - set this to cap it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses non-obvious behavior: the v4 backend scoping means coverage is not every Aave market, unsupported chains are hard-rejected instead of mis-quoted, there is no version argument, and the returned quoteId is the handoff to prepare_order. This is exactly the behavioral context an agent needs and could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries substance and there is little waste, but the structure is poorly ordered: it opens with the confusing 'No version argument:' reference, then backend scoping, then prerequisite routing, and only finally states what the tool does. The core purpose should be front-loaded; as written, an agent must parse a dense caveat-heavy paragraph before learning the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, prerequisites, and no output schema, the description covers the essential ground: backend scope, rejection behavior, prerequisite alternatives, the quoteId return value, and the next step in the flow (prepare_order). Minor gaps remain, such as quote validity/expiry and what other fields the quote contains, but nothing that would prevent a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 per the rubric. The description does not add parameter-level detail; the schema already thoroughly documents user (e.g., never substitute a placeholder), amount, kind, and slippagePct. The chain-coverage caveat tangentially informs chainId but does not add meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description ends with 'Quote a token swap: returns the quote with a quoteId to prepare and sign through prepare_order,' which states a specific verb, resource, and the key output, and implicitly distinguishes the tool from the downstream prepare_order flow. However, the purpose statement is placed last, after the backend-scoping caveat, so the core function is not immediately legible on first read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent: 'Call get_swappable_tokens first if you do not already know the chain is covered, or read canSwapFrom on the reserve from get_markets.' It also sets expectations for the unsupported-chain case ('rejected outright rather than quoted badly'), so an agent knows both when to use this tool directly and when to consult an alternative first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_processedHas Aave seen my transaction yet?ARead-onlyInspect
v4 only. After sending a transaction, ask whether the Aave API has processed it. Use this instead of sleeping or polling an RPC: the API lags the chain, and prepare_action will not issue a dependent follow-up (the supply after an approval, the withdraw after a repay) until it has caught up. Pass the txHash you sent plus the 'operations' array that came back on that transaction. Poll until processed is true, then continue.
| Name | Required | Description | Default |
|---|---|---|---|
| txHash | Yes | Transaction hash you broadcast (0x...). | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. | |
| operations | Yes | The 'operations' from the transaction the server built, e.g. ['SPOKE_SUPPLY']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, and the description adds useful behavioral context: the API lags the chain, prepare_action will block follow-ups until processing catches up, and the tool should be polled until processed becomes true. This effectively communicates the return semantics without an output schema. It stops short of describing error or timeout behavior, but that is not a major gap for this polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The v4-only constraint is front-loaded, followed by the purpose, usage rationale, and concrete invocation guidance. Every sentence earns its place and the description is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only polling tool with full schema coverage and no output schema, this description is complete. It explains when to use it, why it is needed, what inputs to pass, and how to interpret the result ('poll until processed is true'). The annotations cover the safety profile, so no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented. The description adds meaningful operational context beyond the schema by specifying that txHash should be the hash you sent and operations should be the array that came back on that transaction. It also clarifies that the expected usage is polling, which gives the parameters a clear role in the workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: ask whether the Aave API has processed a transaction. It clearly differentiates this from generic RPC polling and related tools by naming prepare_action's dependency on this check. The title reinforces the purpose as a clarifying question.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: after sending a transaction, before issuing a dependent follow-up. It also names the alternatives it replaces (sleeping or polling an RPC) and explains why, giving the agent a clear decision rule. The instruction to pass the txHash and operations array and poll until processed is true is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_activityGet user activity / transaction historyARead-onlyInspect
A wallet's Aave transaction history (supply, borrow, repay, withdraw, collateral changes) on v3, v4, or both. Most recent first. v4 covers every chain; v3 reads one market on one chain at a time, because upstream paginates per market, so it states its scope as 'chainsCovered' and 'market' and you pass chainId to read another. Use get_user_positions, not this, to find out where a wallet holds anything.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| cursor | No | Pagination cursor (pageInfo.next from a previous call). Requires an explicit version ('v3' or 'v4'): a cursor belongs to one version's feed. | |
| market | No | v3 only, optional: market pool address (defaults to the chain's main market). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, and the description adds useful behavioral context: results are newest-first, v4 covers all chains, v3 is market-scoped due to upstream pagination, and cursors are tied to a version. It could go further by describing the return item shape, but it goes well beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: purpose and ordering are front-loaded, v3/v4 scope is explained efficiently, and the alternative tool is pointed to last. The complexity justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of an output schema, the description covers event types, ordering, chain/version scope, pagination behavior, and when to use a sibling tool. The main omission is an explicit statement of the return structure, but an agent has enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a meaningful description, so the baseline is 3. The description adds extra semantic value by explaining the v3/v4 scope model and why chainId/market/version interact, which helps an agent choose the right combination of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a wallet's Aave transaction history, enumerates the event types, and names the supported protocol versions. It also distinguishes itself from get_user_positions, so an agent can tell which tool answers which question.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when not to use this tool ('Use get_user_positions, not this') and gives detailed scope behavior for v3 vs v4, including how chainId and market interact. This is actionable routing guidance, not just a restatement of purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_positionsGet user positionsARead-onlyInspect
A wallet's Aave positions (supplies and borrows) on v3, v4, or both. Omit chainId and both versions cover every chain they serve, stating which under 'chainsCovered'; there is no need to loop over chains yourself. 'chainsNotServed', when present, lists chains this API holds no market on: Aave supports the chain, there is nothing here to read, so an empty result for one of them is not an answer about that chain, and asking again returns the same nothing. v4 returns 'positions', each with its own health factor; v3 returns 'supplies' and 'borrows'. These are Aave-side positions only: a wallet's own token balances are not here, and an empty result means nothing is supplied or borrowed rather than that the wallet is empty. For what it holds, pass 'user' to get_markets, which returns walletBalance per reserve.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as read-only and non-destructive, and the description adds substantial behavioral context beyond that: chainsCovered/chainsNotServed semantics, v3 vs v4 response shape differences, the meaning of an empty result, and the fact that asking again for a non-served chain returns the same nothing. This meaningfully helps an agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the core purpose is front-loaded, and the rest addresses common misunderstandings about chain coverage, empty results, and version-specific outputs. Despite being dense, it contains no filler and reads as a compact set of essential behavioral rules.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values and does so thoroughly: v4 returns positions with health factors, v3 returns supplies and borrows, and chainsCovered/chainsNotServed are described. It also resolves ambiguity about empty results and directs users to get_markets for token balances, making it complete for an agent to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already covers 100% of parameters, the description goes further by explaining the practical behavior of omitting chainId, the default version behavior, and how version affects the returned structure. It also clarifies the meaning of chainsNotServed in relation to the chainId parameter, which is valuable beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource relationship: it returns a wallet's Aave positions (supplies and borrows) on v3, v4, or both. It also clearly differentiates the scope from related tools by noting these are Aave-side positions only and explicitly points to get_markets for wallet token balances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct usage guidance: omit chainId to cover all served chains, don't loop over chains yourself, and interpret chainsNotServed as 'no market to read' rather than an empty-result answer. It also specifies the alternative tool for wallet holdings, saying 'pass user to get_markets'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_rewardsGet user rewardsARead-onlyInspect
A wallet's claimable Aave rewards on v3, v4, or both. Covers incentive programmes distributed through Merit as well as the protocol's own, so a GHO or sGHO incentive shows up here rather than anywhere separate. Omit chainId and both versions cover every chain they serve, stating which under 'chainsCovered' and tagging each row with its own chainId. 'chainsNotServed', when present, lists chains this API holds no market on: Aave supports the chain, there is nothing here to read, so an empty result for one of them is not an answer about that chain, and asking again returns the same nothing. On v3 the response also carries the transaction that claims them.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint annotation: it explains the chainsCovered and chainsNotServed fields, how per-row chainId tagging works, the meaning of an empty result on an unsupported chain, the idempotent 'asking again returns the same nothing' behavior, and the v3-specific claim transaction. This is far beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place, starting with the core purpose and then unpacking edge-case behavior that an agent needs to interpret results correctly. The chainsNotServed explanation is long but necessary because the tool has no output schema to carry this information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return behavior, and it does so thoroughly: version coverage, chain coverage fields, per-row chainId, unsupported-chain semantics, and the v3 claim transaction. Combined with the schema's parameter documentation, an agent has what it needs to invoke the tool and interpret an empty or partial result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all three parameters with descriptions, including the effect of omitting chainId and the default version. The description reinforces these semantics and adds meaningful output-oriented meaning to chainId and version choices, such as covering both versions and tagging each row with its own chainId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately identifies the resource as a wallet's claimable Aave rewards on v3, v4, or both, and clarifies the exact scope including Merit and protocol-native incentives. It explicitly distinguishes this tool from anywhere else a GHO/sGHO incentive might appear, making its purpose unambiguous relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: for claimable rewards, including Merit-distributed incentives, across selected or all chains. It does not explicitly name sibling tools or state when not to use it, so the exclusion guidance is only implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_summaryGet user summary / health factorARead-onlyInspect
A wallet's aggregate position and health factor. Omit chainId and both versions cover every chain they serve, stating which under 'chainsCovered'; there is no need to loop over chains yourself. 'chainsNotServed', when present, lists chains this API holds no market on: Aave supports the chain, there is nothing here to read, so an empty result for one of them is not an answer about that chain, and asking again returns the same nothing. Ask for one of those chains on its own and the reply is the scope alone, with no totals: a zero would read as a real balance. v4 returns a cross-chain summary (lowest health factor, totals, net APY). v3 has no cross-market aggregate, so it returns one entry per market the wallet actually holds a position in, each with its own health factor; 'marketsWithPosition': 0 means the wallet holds no v3 position anywhere, not that the read was narrow or that the wallet is empty: token balances are not here. For what it holds, pass 'user' to get_markets, which returns walletBalance per reserve.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Protocol version (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this read-only, but the description goes beyond them by disclosing subtle behavioral traits: empty results for unsupported chains are not answers, a zero would be misinterpreted as a real balance, and 'marketsWithPosition': 0 means no v3 position anywhere rather than a narrow read. This prevents serious misreadings of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every sentence carries distinct, non-redundant guidance. It is front-loaded with the core purpose, then expands into necessary caveats about version differences, chain coverage, and empty-result interpretation. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing return shapes for both v4 and v3, including key fields like 'chainsCovered', 'chainsNotServed', and 'marketsWithPosition'. It also tells the agent where to go for token balances. This is sufficient for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for chainId and version: omitting chainId covers all served chains, unsupported chains yield scope-only replies, v4 returns a cross-chain summary, and v3 returns per-market entries. User is not further enriched, but schema already covers it well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-resource pair: 'A wallet's aggregate position and health factor.' It clearly distinguishes itself from related siblings like get_user_positions and get_markets by staking out its exact scope, and it explicitly describes the different v3/v4 output behaviors. An agent can immediately know what this tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States an explicit alternative: 'For what it holds, pass user to get_markets, which returns walletBalance per reserve.' It also gives operational guidance such as not looping over chains, and explains how chainId omission changes coverage. This makes the when-to-use decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_summary_historyA wallet's position over time (v4)ARead-onlyInspect
v4 only. How one wallet's net worth, supplied, debt and health factor moved over a window on Aave v4. Use it to answer 'how has my position changed' or to see how close to liquidation a wallet has been. Omit chainId to cover every supported v4 chain.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| window | No | Time window (default week). | |
| chainId | No | Chain id to restrict to, e.g. 1 for Ethereum. Omit the argument entirely to cover every chain. | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and non-destructive. The description adds useful behavioral context: it is v4-only, covers historical movement over a window, and omitting chainId spans every supported v4 chain. It does not specify return shape or pagination, but for a read-only history tool the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the version constraint and core purpose, then give practical usage guidance and a key chain-scoping tip. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read-only history tool with no output schema, the description covers purpose, version, scope, and usage context well. It could be more explicit about the return format, but the described metrics and time-window behavior give an agent enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description mostly reinforces what the schema already says, such as omitting chainId to cover all chains. It adds little semantic value beyond the structured parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reports how a single wallet's net worth, supplied, debt, and health factor moved over a time window on Aave v4. The 'over time' framing clearly distinguishes it from snapshot-style siblings like get_user_summary, even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'how has my position changed' and 'how close to liquidation a wallet has been'. It also clarifies chain coverage behavior. It does not explicitly say when not to use it or name a preferred alternative, so it stops short of full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_voteGet a wallet's vote on a proposalARead-onlyInspect
Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). How one wallet voted on one Aave DAO proposal, and with how much power. Returns voted:false when that wallet did not vote, which is an answer rather than an error. Voting power is in AAVE.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| proposalId | Yes | Proposal id as a decimal string, e.g. '508'. From search_governance_proposals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive, and the description adds meaningful behavioral details: it explicitly states no version argument is accepted and why, explains that voted:false is a valid answer rather than an error, and clarifies voting power is denominated in AAVE. These details go beyond annotation structure and set accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all informative with no filler. The first sentence front-loads a version clarification before the core purpose, slightly delaying the main statement, but overall the structure is efficient and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the essential behavior: result for non-voters, voting power unit, and scope. It does not detail the full response shape for a vote, but that is a minor gap given the tool's simplicity and the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both parameters (100% coverage), so the baseline is 3. The description adds little parameter-specific meaning beyond restating the wallet/proposal focus; the version note addresses a non-existent parameter, and the AAVE mention pertains to output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves how one wallet voted on one Aave DAO proposal and with how much power, using a specific verb-resource relationship. The title reinforces this, and the scope distinguishes it from siblings like get_proposal_votes (all votes) and get_governance_proposal (proposal details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by defining the exact scope—one wallet on one proposal—but never explicitly says when to choose this over alternatives such as get_proposal_votes. The version-argument clarification is a parameter note, not a use-case guide, so selection guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_actionPrepare supply / borrow / withdraw / repayARead-onlyInspect
Build an unsigned transaction to supply, borrow, withdraw, or repay on Aave (v3 or v4). Returns an execution 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 here, so building one is free and commits the user to nothing. Choose sensible values, build it, and say what you chose - do not stop to ask the user first, because they see the transaction before they sign it. Send only the arguments that apply and leave every other one out: v4 takes 'reserve'; v3 takes 'market' + 'token' + 'chainId'; 'max' is for withdraw and repay; 'enableCollateral' is for supply. Never send 'permitSignature' or 'permitDeadline' on a first call: they exist only to re-issue a call after an approval step handed you a permit to sign under 'bySignature', so if you have not been handed one, leave both out. Two things that catch callers out: a supply does NOT become collateral unless you pass enableCollateral:true, and without collateral the borrowing power is zero so any later borrow is refused; and collateral pinned by an open borrow cannot be withdrawn, so a withdraw has to repay first. After sending any transaction, poll get_transaction_processed before building the dependent next one.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Withdraw/repay only: use the entire balance/debt. | |
| token | No | v3 only: underlying token address. | |
| action | Yes | Which action to build. | |
| amount | No | Amount in MAIN units (e.g. '10.5'), never base units: 100000 base units of a 6-decimal token is '0.1', not '100'. Convert before sending if the user stated base units. Omit only if max=true. | |
| market | No | v3 only: market pool address, from a get_markets row in this session. It cannot be recalled: an Aave pool address you already recognise belongs to another deployment (v2, or another chain) and is rejected. | |
| native | No | Use the chain's native gas token instead of an ERC-20. | |
| sender | Yes | Sender wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | v3 only: chain id (positive integer). | |
| reserve | No | 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. | |
| version | Yes | Protocol version (v3 or v4; required, no 'all' for actions). | |
| permitDeadline | No | Unix seconds, the 'deadline' from the permit message that was signed. Required with permitSignature. | |
| permitSignature | No | Send this only to replay a call after an approval handed you a permit to sign: the user's signature (0x...) over the PermitTypedData that approval carried under 'bySignature', on either version. It replaces the approval transaction, so the action comes back in one step. Requires permitDeadline. | |
| enableCollateral | No | supply only: also enable the asset as collateral (default false). Leave it off and the supply earns yield but backs no borrowing, so a following borrow fails for exceeding a borrowing power of zero. Pass true whenever the plan is to borrow against it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true, the description adds significant behavioral context: it is non-custodial, commits nothing, free to build, and describes consequences (supply not collateral unless enableCollateral, withdraw of pinned collateral requires repay first). It also discloses that permit fields are only for replaying after approval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense, front-loading the main purpose and then covering operational pitfalls. Every sentence carries actionable guidance; minor redundancy around collateral and borrowing power appears twice, but it is a deliberate emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters, no output schema, and a complex multi-version protocol, the description covers version-specific parameter rules, required pre-steps (preview_action, get_markets), post-steps (get_transaction_processed), and common failure modes. Nothing an agent needs to safely call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds crucial meaning beyond it: main units vs base units with an example, v4's opaque reserveId cannot be constructed/recalled and what it is not (spokeId), market cannot be recalled, and the logic around when to omit 'amount' (max=true). This strongly compensates and exceeds baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('build') and resource ('an unsigned transaction to supply, borrow, withdraw, or repay on Aave (v3 or v4)'). It also differentiates from siblings like preview_action and submit_signed_order, clarifying it returns an execution plan rather than executing anything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call preview_action first for borrow/withdraw, when to use v3 vs v4 parameters, when to use 'max', 'enableCollateral', and permit fields. It also gives clear exclusions ('Never send permitSignature... on a first call') and mentions polling get_transaction_processed after sending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_cancel_orderPrepare an order cancellation (EIP-712 to sign)ARead-onlyInspect
No version argument. From an orderId, return the EIP-712 cancellation for the user to sign; cancel_order relays the result. This is the gasless route for an intent order; an order that went on chain (a native-token sell) is cancelled with cancel_order's transaction route instead, which needs no signature and no prepare. Non-custodial: this returns what the user signs, and commits nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | The order id (from submit_signed_order's receipt, get_order_status or get_pending_orders). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, and the description meaningfully adds that this is non-custodial, commits nothing, and returns the exact payload the user signs. It also clarifies the resulting signature must be relayed via cancel_order, which is behavior above what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each with a distinct job: version caveat, core function, route selection, and safety commitment. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only preparation tool, the description fully covers what the tool returns, how it should be used, when not to use it, and what it does not commit. No output schema exists, but the description sufficiently characterizes the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents orderId and where it comes from. The description adds no extra parameter semantics beyond saying 'from an orderId'; the baseline of 3 is appropriate because the schema carries the param meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('return') and resource (EIP-712 cancellation for an orderId), and clearly differentiates this prepare step from the cancel_order tool that relays it. The 'No version argument' note and the distinction from the transaction route remove ambiguity among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use this tool: the gasless route for an intent order. It also gives an explicit exclusion: an order that went on chain (native-token sell) should use cancel_order's transaction route instead, which needs no signature and no prepare. This leaves no inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_claim_rewardsPrepare a rewards claim (V4)ARead-onlyInspect
v4 only. Build an unsigned transaction to claim a wallet's V4 rewards. If 'ids' is omitted, claims everything currently claimable. Non-custodial. There is no v3 equivalent because a v3 claim needs no second call: get_user_rewards already returns the transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Optional reward ids (from get_user_rewards). Omit to claim all claimable. | |
| user | Yes | Wallet address (0x, 40 hex). | |
| chainId | No | Chain id to claim on. Required unless 'ids' is omitted, in which case the chain is discovered from the wallet's claimable rewards. | |
| version | No | Optional, and only 'v4': this tool exists on v4 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive. The description adds meaningful behavior: it builds but does not submit an unsigned transaction, is non-custodial, and defaults to claiming all currently claimable rewards when 'ids' is omitted. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the key constraints and purpose, and every sentence carries useful information. The 'v4 only' opening and 'V4 rewards' in the next sentence are slightly redundant, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, full schema coverage, and no output schema, the description covers the important operational context: unsigned/non-custodial nature, default behavior, and v3 alternative. It could mention return-value shape, but no output schema exists and the schema already explains chainId/ids behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters (100% coverage), so the baseline applies. The description reinforces the 'omit ids to claim all' behavior and 'v4 only' constraint, but adds little beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Build'), resource ('unsigned transaction to claim V4 rewards'), and scope ('v4 only'). It distinguishes itself from get_user_rewards and explicitly states there is no v3 equivalent, so an agent can tell this apart from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states this is for v4 reward claims and explains why v3 users should not call it (get_user_rewards already returns the transaction). It does not enumerate all alternative prepare_* tools, but the v3 exclusion and the 'v4 only' qualifier give enough context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_liquidationPrepare a liquidationARead-onlyInspect
Build an unsigned transaction to liquidate an unhealthy position: repay part of someone else's debt and receive their collateral plus the liquidation bonus. Only viable while that position's health factor is below 1 (check get_user_summary for the target). v4 takes collateral and debt as reserveIds; v3 takes collateralToken and debtToken addresses plus chainId. Non-custodial: the liquidator signs and submits.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Cover the maximum the protocol allows. | |
| debt | No | v4 only: reserveId of the debt to repay. | |
| user | Yes | The wallet being liquidated (0x, 40 hex). | |
| amount | No | Debt to cover, in main units. Omit only if max=true. | |
| market | No | v3 only: market pool address (from get_markets). | |
| chainId | No | v3 only: chain id (positive integer). | |
| version | Yes | Protocol version (v3 or v4; required, no 'all' for actions). | |
| debtToken | No | v3 only: debt token address. | |
| collateral | No | v4 only: reserveId of the collateral to seize. | |
| liquidator | No | v4 only: the wallet performing the liquidation (0x, 40 hex). On v3 the liquidator is whoever signs the returned transaction. | |
| collateralToken | No | v3 only: collateral token address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful context beyond them: the tool builds an unsigned transaction, is non-custodial, and requires the liquidator to sign and submit. It also discloses the division between v3 and v4 parameter formats, which is valuable behavioral information not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences carry the core message without waste: what the tool does, when it is viable, how to check viability, version differences, and custody behavior. The most important information is front-loaded, and there is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, two protocol versions, no output schema), the description covers the essential operational context: the liquidation condition, prerequisite check, version-specific field mapping, and non-custodial execution. It could go slightly further by hinting at the shape of the returned unsigned transaction, but the current level is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds useful semantic grouping: v4 uses reserveIds for collateral and debt while v3 uses addresses plus chainId, and it clarifies that the liquidator defaults to the signer on v3. This helps the agent correctly select the version-specific parameter set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Build an unsigned transaction') and resource ('liquidate an unhealthy position'), then explains exactly what the operation does: repay debt, receive collateral, and earn the liquidation bonus. It clearly differentiates this from generic prepare_* siblings by naming the liquidation flow and the v3/v4 parameter distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit viability condition: only use when the target position's health factor is below 1, and tells the agent to check get_user_summary. It also clarifies version-specific inputs, but does not explicitly mention when to prefer this over other prepare_* tools or what to do if the health factor is above 1.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_orderPrepare an order (typed data or transaction to sign)ARead-onlyInspect
No version argument: every order runs on the v4 backend. Which optional arguments apply is decided by the quote that minted the quoteId, so decide before emitting any: a quote that offered a 'bySignature' permit takes permitSignature + permitDeadline once that permit is signed; route:'transaction' applies only to a SwapByTransaction... quote (a native-token sell) and takes no signatures at all. Never send a signature argument unsolicited - it exists to carry back a signature the quote explicitly asked for. Non-custodial: this returns what the user signs, and commits nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| route | No | Which execution route the quote needs, taken from its __typename: 'intent' (default) for everything except SwapByTransaction..., which takes 'transaction' and returns the on-chain transaction plus an orderReceipt, the route a native-token sell takes. | |
| quoteId | Yes | quoteId from get_swap_quote. | |
| permitDeadline | No | Unix seconds, the 'deadline' from the permit message that was signed. Required with permitSignature. | |
| permitSignature | No | The user's signature (0x...) over the PermitTypedData a quote's approvals offered under 'bySignature'. Sending it skips the approval transaction. Never send it on a first call - you only have one once a quote has handed you a permit to sign. Requires permitDeadline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it is non-custodial, returns signable material, commits nothing, always uses the v4 backend, and warns against sending signature arguments unless the quote explicitly requested one. This strongly complements the readOnlyHint and destructiveHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: backend version, quote-driven optionality, route-specific behavior, signature discipline, and non-custodial side-effect-free behavior. It is appropriately sized for a tool with complex conditional parameters and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex conditional rules and no output schema, the description covers the key decision logic and side-effect profile well. It could be more complete by explicitly naming submit_signed_order as the follow-up step and describing the exact return shape for the default 'intent' route, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds important parameter relationships: permitSignature and permitDeadline only apply once a bySignature permit is signed, route:'transaction' takes no signatures, and signatures must never be sent on a first call. This goes beyond the schema by explaining the orchestration and sequencing of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description make clear this prepares an order as typed data or a transaction to sign, with the description emphasizing it 'returns what the user signs' and 'commits nothing.' It is distinct enough from submission tools like submit_signed_order, though it does not explicitly name or contrast sibling prepare tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong conditional guidance: optional arguments are decided by the originating quote, route:'transaction' applies only to SwapByTransaction quotes, and signatures should never be sent unsolicited. However, it does not explicitly state when to prefer this tool over alternatives such as submit_signed_order or prepare_cancel_order, so that routing is left mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_set_collateralPrepare enable/disable collateralARead-onlyInspect
Build an unsigned transaction to change whether a supplied asset is used as collateral (v3 or v4). On v4 'enable' sets the state; on v3 it toggles the current state, and a toggle that would invert a stated 'enable' is refused. The wallet must already hold a supply in that reserve: this sets a flag on it, nothing moves. Disabling can leave a position liquidatable, so it is simulated first: a health factor under 1 after is refused, just above 1 carries a warning to relay, and a build whose simulation could not run says so under 'warnings'. Enabling needs no check. Non-custodial.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | v3 only: underlying token address. | |
| enable | No | v4: true to enable, false to disable (default true). v3 toggles the current state; send it on v3 as the intended end state, and a toggle that would produce the opposite is refused. | |
| market | No | v3 only: market pool address. | |
| sender | Yes | Sender wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | v3 only: chain id (positive integer). | |
| reserve | No | 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. | |
| version | Yes | Protocol version (v3 or v4; required, no 'all' for actions). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is fully consistent with them. It goes well beyond annotations by disclosing important behavioral nuances: v4 sets state while v3 toggles, disabling is simulated with health-factor-based refusals and warnings, simulation failures are surfaced under 'warnings', and nothing actually moves. This gives the agent a reliable mental model of side effects and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, leading with the core purpose then layering version nuances, prerequisites, simulation behavior, and warnings. It is longer than average, but nearly every sentence carries needed semantic weight. A small amount of restructuring could improve scannability, but the content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description still covers the essential behavioral contract: what the transaction does, what must be true before calling, how different versions behave, how failures are signaled, and that this is non-custodial. Together with the fully described parameters, an agent has enough context to invoke the tool correctly and interpret likely outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters, but the description adds substantial meaning beyond it. For example, the 'reserve' parameter is explained as opaque, non-constructible, fetchable only from get_markets or get_position_items, with explicit warnings about 'spokeId' and token symbols being rejected. The 'enable' and 'version' parameters also get version-specific behavioral clarification that the schema alone does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Build an unsigned transaction to change whether a supplied asset is used as collateral (v3 or v4).' It clearly distinguishes the tool from generic siblings like prepare_action by naming the exact action, the version-specific semantics, and the requirement that the wallet holds a supply. An agent can tell what this tool does without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong context for when to use the tool: it explains the v3 vs v4 differences, the prerequisite that the wallet must already hold supply, and that disabling is simulated first. It does not explicitly name alternative tools or say 'use this instead of X,' but the version-specific guidance and the wallet-holding precondition make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_set_emodePrepare an eMode change (v3)ARead-onlyInspect
v3 only. Build an unsigned transaction to switch a wallet's Aave v3 eMode category. eMode groups correlated assets (ETH-correlated, stablecoins) so they borrow against each other at a higher LTV, raising borrowing power at the cost of restricting which assets the position may hold. Take categoryId from get_emode_categories for that market; pass 0 to turn eMode off. v3 only: v4 replaces eMode with risk premium and dynamic config.
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | v3 only: market pool address, from a get_markets row in this session. It cannot be recalled: an Aave pool address you already recognise belongs to another deployment (v2, or another chain) and is rejected. | |
| sender | Yes | Sender wallet address, 0x-prefixed (40 hex chars). | |
| chainId | Yes | Chain id (positive integer). | |
| version | No | Optional, and only 'v3': this tool exists on v3 only. | |
| categoryId | Yes | eMode categoryId from get_emode_categories, or 0 to disable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent: building an unsigned transaction implies no state change. The description adds useful behavioral context beyond annotations, including the eMode LTV/restriction tradeoff, the v3-only constraint, and the categoryId=0 disable behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the version and core action, and the eMode explanation is valuable. It loses a point for repeating 'v3 only' twice and for slightly over-explaining, but it remains compact and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and no output schema, the description provides enough context to select and invoke it appropriately: purpose, version constraints, category source, and zero-to-disable behavior. It does not describe the output shape, but 'unsigned transaction' gives a reasonable expectation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says for categoryId ('from get_emode_categories, or 0 to disable') and does not add substantial new parameter-specific meaning beyond the explanatory eMode context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Build an unsigned transaction to switch a wallet's Aave v3 eMode category.' It also clearly scopes the tool to v3 and distinguishes eMode from other Aave actions, so an agent can tell this apart from prepare_set_collateral or prepare_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'v3 only', 'v4 replaces eMode', and 'Take categoryId from get_emode_categories for that market; pass 0 to turn eMode off.' This tells the agent the prerequisite data source and the disabling behavior clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_sgho_actionPrepare an sGHO deposit or withdrawalARead-onlyInspect
v3 only, Ethereum only. Build an unsigned transaction to deposit GHO into the sGHO vault or withdraw from it. Non-custodial: the user's wallet signs and submits, so building one commits them to nothing. Choose sensible values, build it, and say what you chose rather than stopping to ask. Send only the arguments that apply and leave every other one out. On 'deposit', 'amount' is GHO. On 'withdraw', 'amount' is a number of sGHO SHARES, not GHO - get_sgho_preview converts - or pass max:true to redeem the whole position and omit 'amount'. 'recipient' is only for sending the result to a different address than the sender. A deposit needs a GHO allowance: when the result is ApprovalRequired, submit its 'approval' transaction and then the 'originalTransaction' beside it, in that order.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | withdraw only: redeem the entire share balance. | |
| action | Yes | Which side to build: deposit GHO, or withdraw by redeeming shares. | |
| amount | No | Amount in main units: GHO to deposit, or sGHO shares to redeem. Omit only when max=true. | |
| sender | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| version | No | Optional, and only 'v3': this tool exists on v3 only. | |
| recipient | No | Optional address to receive the shares (deposit) or the GHO (withdraw). Omit the argument entirely to use the sender. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive. The description adds valuable behavioral context: the transaction is unsigned and commits the user to nothing, and it explains the ApprovalRequired flow where the approval transaction must be submitted before the original transaction. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries necessary information. It front-loads the constraints, then explains the core action, argument selection rules, and the approval sequence. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description is thorough: it covers chain/version constraints, deposit vs withdraw behavior, amount units, max semantics, recipient default, and approval handling. It gives an agent enough context to call the tool correctly and interpret the likely result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description significantly enriches the parameter meanings. It clarifies that amount is GHO on deposit but sGHO shares on withdraw, that max:true redeems the whole position and requires omitting amount, that recipient is only for a different address, and that deposit requires a GHO allowance. These are essential semantics not fully captured by the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Build an unsigned transaction to deposit GHO into the sGHO vault or withdraw from it.' It also scopes to v3 and Ethereum. It does not explicitly distinguish itself from sibling tools like prepare_action, but the specific resource and action make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives detailed context: v3-only, Ethereum-only, non-custodial, and when to use deposit vs withdraw. It explains conditional argument handling and the approval flow. It does not explicitly name alternative tools or say when not to use this tool, but the guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_stkgho_migratePrepare a stkGHO migration into sGHOARead-onlyInspect
v3 only, Ethereum only. Build an unsigned transaction that moves a wallet's stkGHO out of the Safety Module and into the sGHO vault. All-or-nothing: it covers the entire stkGHO position and takes no amount. This server cannot read a stkGHO balance or cooldown state, so say that the migration is for the whole position and let the user check its size in their wallet before signing. Non-custodial, so build it rather than asking permission first.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Wallet address, 0x-prefixed (40 hex chars). | |
| version | No | Optional, and only 'v3': this tool exists on v3 only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses key behavioral traits: it builds an unsigned transaction, is non-custodial, cannot read stkGHO balances or cooldown state, and requires the whole position with no amount input. This materially changes how the agent should interact with the user and what it can promise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: constraints first ('v3 only, Ethereum only'), then the action, then the critical caveats. Every sentence contributes essential information, and there is no redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description gives enough context for an agent to invoke the tool correctly: chain and version restrictions, what the transaction does, what the server can and cannot determine, and how to frame the request to the user. It is complete for a low-complexity tool with one meaningful parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters themselves are already documented. The description adds useful semantic context by explaining that the tool takes no amount and always acts on the entire stkGHO position, which clarifies the absence of an amount parameter and reinforces the meaning of 'user' as the wallet owner.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Build an unsigned transaction that moves a wallet's stkGHO out of the Safety Module and into the sGHO vault.' It also states the exact scope ('v3 only, Ethereum only') and the all-or-nothing behavior, which clearly distinguishes this migration tool from generic prepare_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when/when-not guidance: use only on v3 and Ethereum, do not take partial amounts, and build the transaction rather than asking permission first. It also tells the agent to inform the user that the migration covers the whole position and to have the user verify the balance before signing, which is strong operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_actionPreview an action (simulate before executing)ARead-onlyInspect
Simulate a supply/borrow/withdraw/repay against a wallet's position WITHOUT executing, on v3 or v4. Always do this before a borrow or a withdraw. Send only the arguments that apply: v4 takes 'reserve'; v3 takes 'market' + 'token' + 'chainId'; 'max' is for withdraw and repay; 'native' works on both; 'enableCollateral' is v4 only. Both versions answer with 'healthFactorBefore' and 'healthFactorAfter'; v4 also returns net APY, risk premium, net collateral, net balance, projected earnings and both borrowing-power figures, each as a matching Before/After pair, plus 'rewardsAcquired' / 'rewardsAbandoned' when the action changes rewards. v3 has the two health factors and nothing else. Either version also returns 'warnings' when the action would not actually succeed - an error level there means the prepare step will refuse it, so fix the inputs rather than building it. Simulate first even when you intend to build immediately: this is the cheapest way to find out that an action cannot succeed, and it commits nothing. It reports the position's own limits and not token allowances, so a clean simulation says the position allows this, not that no approval step remains.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Withdraw/repay only: use the entire balance/debt. | |
| token | No | v3 only: underlying token address. | |
| action | Yes | Action to simulate. | |
| amount | No | Amount in MAIN units (e.g. '10.5'), never base units: 100000 base units of a 6-decimal token is '0.1', not '100'. Convert before sending if the user stated base units. Omit only if max=true. | |
| market | No | v3 only: market pool address, from a get_markets row in this session. It cannot be recalled: an Aave pool address you already recognise belongs to another deployment (v2, or another chain) and is rejected. | |
| native | No | Use the chain's native gas token instead of an ERC-20, on either version. Pass it whenever the action is in the native token, or the balance check below reads the wrapped ERC-20 balance and can refuse a supply that would work. | |
| sender | Yes | Sender wallet address, 0x-prefixed (40 hex chars). | |
| chainId | No | v3 only: chain id (positive integer). | |
| reserve | No | 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. | |
| version | No | Optional: inferred from the reserve selector ('reserve' means v3 is not being used, 'market'+'token'+'chainId' means v4 is not). Send it to be explicit, or if you somehow set both. | |
| enableCollateral | No | v4 supply only: also enable as collateral. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral detail: it commits nothing, returns warnings when an action would not succeed, and reports position limits but not token allowances. It also explains version-specific return fields and the operational meaning of warnings, giving the agent an accurate mental model of the simulation's semantics beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries decision-relevant information: version-specific arguments, return fields, warnings semantics, and strategic advice to simulate before building. There is no filler or redundant restatement of the schema; the length is justified by v3/v4 complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 11 parameters, the description carries the full burden: it defines returned health factors for both versions, enumerates v4-only fields, explains the warnings array's operational meaning, and cautions about allowance misinterpretation. This gives an agent everything needed to invoke, interpret, and react to the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds valuable cross-parameter/version grouping ('v4 takes reserve; v3 takes market+token+chainId; max is for withdraw and repay; native works on both; enableCollateral is v4 only'), which goes beyond the individual schema entries and helps the agent select the correct parameter set for the intended version.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Simulate') and a precise resource ('a supply/borrow/withdraw/repay against a wallet's position', on v3 or v4). The explicit 'WITHOUT executing' contrast makes its role unambiguous and clearly differentiates it from execution-oriented siblings like prepare_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Always do this before a borrow or a withdraw' and 'Simulate first even when you intend to build immediately.' It also tells the agent to fix inputs rather than build when the simulation fails. It does not name an alternative tool explicitly, but the referenced 'prepare step' and execution flow give clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_governance_proposalsSearch Aave DAO proposalsARead-onlyInspect
Takes no 'version' argument (DAO governance is not per-market; Governance V3 is unrelated to Aave v3/v4 markets). List or search Aave DAO governance proposals. Filter by 'state' to answer "what is live right now" (state 'active') or "what is waiting to execute" (state 'queued'). Pass 'search' for full-text over title, author and description, ranked by relevance. Vote tallies are in AAVE.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (1-100, default 20). | |
| state | No | Filter to one lifecycle state. 'active' is open for voting, 'queued' passed and waits out the timelock, 'executed' is done. Omit for every state. | |
| offset | No | Rows to skip, for paging (default 0). | |
| search | No | Optional full-text query, e.g. 'GHO' or 'Chaos Labs'. Combines with 'state'. | |
| includeSummaries | No | Include each proposal's ~500-char summary (default false). Adds roughly 500 bytes per row, so ask for it when summarising a list rather than when looking one up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, and the description adds useful behavioral context beyond that: search results are 'ranked by relevance,' vote tallies are denominated in AAVE, and the tool rejects a 'version' argument due to the DAO governance model. These details help set expectations for the response without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence earns its place: it clears up a common confusion (no version argument), gives search and filter guidance, explains relevance ranking, and notes vote tally units. It is front-loaded with the most important disambiguation and avoids repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list/search tool with comprehensive schema descriptions and no output schema, the description covers all necessary aspects: what it returns, how to filter, how to search, and when to include summaries. An agent has enough context to invoke it correctly without needing additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description enriches several parameters: 'state' values are mapped to real-world meanings ('active' is open for voting, 'queued' passed and waiting out the timelock), and 'includeSummaries' includes a practical size tradeoff. This adds value beyond the schema's raw parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'List or search Aave DAO governance proposals.' It also distinguishes itself from per-market tools by explicitly stating it takes no 'version' argument and that Governance V3 is unrelated to Aave v3/v4 markets, making it easy to differentiate from siblings like get_governance_proposal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete guidance on when to use this tool, such as filtering by 'state' to answer 'what is live right now' or 'what is waiting to execute,' and using 'search' for full-text relevance queries. It does not explicitly mention alternatives like get_governance_proposal for single-proposal lookups, but the 'List or search' framing and the surrounding sibling context make the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_signed_orderSubmit a user-signed orderADestructiveIdempotentInspect
No version argument: every order runs on the v4 backend. Relay an order the user already signed (quoteId + signature from prepare_order's PreparedOrder). State-changing: this posts the order. The server never signs.
| Name | Required | Description | Default |
|---|---|---|---|
| quoteId | Yes | quoteId (the newQuoteId returned by prepare_order). | |
| signature | Yes | The user's EIP-712 signature (0x...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, idempotent, and destructive/state-changing, so the description adds useful specifics: it posts the order, never signs server-side, and always targets the v4 backend. This clarifies side-effect and security behavior beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying useful information: version behavior, prerequisite input, and state-changing side effect. It is appropriately sized and front-loads an important constraint, though the 'No version argument' phrasing is slightly less direct than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter submit tool with no output schema, the description plus annotations cover the core behavior, inputs, and state-changing nature. It does not describe the return shape or post-submission status, but complexity is low and sibling get_order_status provides a follow-up path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both params already have meaningful descriptions (newQuoteId, EIP-712 signature). The description reinforces that these come from prepare_order's PreparedOrder, but adds no syntax or format details beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: it relays/posts an already user-signed order. It clearly differentiates from prepare_order by requiring the quoteId+signature from prepare_order's PreparedOrder and by being the state-changing submission step. The sibling context includes many prepare_* tools, making this distinction essential and explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this after prepare_order once the user has signed, because it relays the signature. It does not explicitly name alternatives or state when not to use it, but the reference to prepare_order's output makes the intended workflow evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
40 tool updates
- First observed
cancel_order - First observed
get_aave_guide - First observed
get_apy_history - First observed
get_chains - First observed
get_emode_categories - First observed
get_governance_proposal - First observed
get_hub_assets - First observed
get_hubs - First observed
get_markets - First observed
get_order_status - First observed
get_pending_orders - First observed
get_position_items - First observed
get_proposal_payloads - First observed
get_proposal_votes - First observed
get_protocol_history - First observed
get_reserve_details - First observed
get_sgho_preview - First observed
get_sgho_vault - First observed
get_started - First observed
get_swap_quote - First observed
get_swappable_tokens - First observed
get_transaction_processed - First observed
get_user_activity - First observed
get_user_positions - First observed
get_user_rewards - First observed
get_user_summary - First observed
get_user_summary_history - First observed
get_user_vote - First observed
prepare_action - First observed
prepare_cancel_order - First observed
prepare_claim_rewards - First observed
prepare_liquidation - First observed
prepare_order - First observed
prepare_set_collateral - First observed
prepare_set_emode - First observed
prepare_sgho_action - First observed
prepare_stkgho_migrate - First observed
preview_action - First observed
search_governance_proposals - First observed
submit_signed_order
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT- AlicenseNot gradedqualityCmaintenanceEnables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.MIT
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.11961MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
The tool set splits into clean families (get_ reads, prepare_ transaction builders, direct state-changing verbs) and the descriptions aggressively cross-reference each other to draw explicit boundaries, e.g. get_user_positions vs get_user_summary vs get_user_activity. A few clusters could still prompt misselection: the four get_user_* tools share a naming shape, get_started and get_aave_guide both claim the 'when nothing fits' role, and get_hub_assets vs get_markets both return rate data at different aggregation levels.
Every tool follows a verb_noun pattern with a highly predictable convention: get_ for all read operations, prepare_ for every unsigned-transaction builder, and direct imperatives (cancel_order, submit_signed_order, preview_action) for the rest. search_governance_proposals is the only read not named get_, but search_ is semantically apt for full-text lookup. The get_/ prepare_ split is instantly legible across all 40 tools.
40 tools is well past the 25+ 'too many' threshold, and even Aave's genuinely wide scope (v3 and v4 lending, governance, sGHO, rewards, intent orders) does not fully justify the surface. get_started and get_aave_guide overlap as guidance entry points, the three history tools and the get_user_* cluster add near-duplicate reads, and the paragraph-long descriptions compound the agent's context burden. Most tools earn their place individually, but the set would be stronger consolidated to roughly 25-30 tools.
Core workflows are fully covered with no dead ends: preview_action simulation, prepare_action and prepare_set_* builders, get_transaction_processed polling, plus the complete order lifecycle (quote, prepare, submit, status, cancel) and sGHO/rewards coverage. Minor gaps remain: governance is read-only with no way to cast a vote, the server cannot read a stkGHO balance or cooldown state for the migration flow, and there is no stkAAVE staking surface. These are workaroundable, and the v3/v4 dual-version handling is unusually thorough.