Teardrop
Server Details
Teardrop is the native economic layer for AI agents, providing a robust suite of tools for multi-chain portfolio tracking, DeFi yield analysis, and gas estimation. It enables autonomous agents to securely find Web3 data and manage micro-payments on-chain with zero human intervention.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
34 toolsassess_counterparty_riskAssess Counterparty RiskARead-onlyInspect
Assess counterparty risk for an EVM address across token approvals, liquidation health, and activity history. Returns an agent-branchable verdict (high_risk, caution, acceptable, or insufficient_data) and compact risk summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_ids | No | DeBank chain identifiers scoping approvals and history; positions and net worth remain all-chain. | |
| wallet_address | Yes | EVM wallet address (0x-prefixed) |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| verdict | Yes | |
| activity | No | |
| provenance | Yes | |
| liquidation | No | |
| risk_factors | No | |
| data_complete | No | |
| partial_errors | No | |
| wallet_address | Yes | |
| approval_summary | No | |
| total_net_worth_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description adds meaningful behavioral context by stating that the tool returns an agent-branchable verdict with specific values and compact risk summaries. It also reveals the underlying data domains considered, which helps the agent predict what the call will do beyond the annotation 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?
Two sentences carry the full functional contract: the first defines what the tool assesses and the second defines its machine-consumable output. There is no filler or repetition of annotation/schema fields, and 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?
Given the tool has a documented input schema, readOnly annotations, and an output schema referenced by the description, the description is largely complete: an agent knows the input, the scope, and the verdict format. The only minor gap is the absence of explicit guidance on when this composite tool should be chosen over the narrower sibling tools.
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 wallet_address and chain_ids, including the 'positions and net worth remain all-chain' nuance. The description reinforces that risk assessment spans approvals, liquidation health, and activity history, but it does not add parameter-level detail beyond what the schema already provides.
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 ('Assess'), resource ('counterparty risk for an EVM address'), and scope ('across token approvals, liquidation health, and activity history'). It also names the exact verdict values it returns, making the tool's function unambiguous and distinguishable from sibling tools like get_liquidation_risk or get_token_approvals.
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 clearly implies this is the holistic counterparty-risk assessment tool by enumerating the dimensions it covers, but it does not explicitly say when to prefer it over individual sibling tools such as get_liquidation_risk, get_token_approvals, or get_wallet_history. There are no exclusions or alternative routing conditions, so the usage guidance is mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculateCalculateARead-onlyInspect
Evaluate a safe arithmetic expression. Supports +,-,*,/,**,%,sqrt,abs,round,floor,ceil,log,sin,cos,tan,pi,e.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | A safe arithmetic expression, e.g. '(3 + 4) * 2 / sqrt(9)' |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| result | No | |
| expression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=true, so the description need not restate read-only. The description adds behavioral context by noting the expression is 'safe' (implying no arbitrary code execution) and explicitly enumerating supported functions and constants, which clarifies what the tool can and cannot evaluate. This goes beyond the schema's simple example.
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 a single, efficient sentence with a front-loaded action ('Evaluate') and a compact enumeration of supported operations. Every word contributes value, with no redundant or vague phrasing.
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 that the tool has one parameter, an output schema exists, and the readOnly annotation is provided, the description is sufficiently complete. It covers the tool's domain, safe evaluation, and the full set of supported operations, so an agent can invoke it confidently without needing additional behavioral or return-value 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?
The schema description for the 'expression' parameter covers 100% of the parameter, providing an example. The tool description additionally itemizes accepted operators and functions (+, -, *, /, **, %, sqrt, abs, round, etc.), giving the agent a clearer understanding of valid input format and capabilities beyond 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 uses the specific verb 'evaluate' and clearly identifies the resource as an 'arithmetic expression'. It lists supported operations, making the tool's scope unambiguous and distinguishing it from siblings that deal with currency, stats, transactions, and blockchain 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 implies usage for arithmetic computation by stating 'Evaluate a safe arithmetic expression' and listing supported functions, but it does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. No alternative tools are named, and no when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_currencyConvert CurrencyARead-onlyInspect
Convert between fiat currencies (USD, EUR, GBP, etc.) and crypto assets (BTC, ETH, USDC, SOL, etc.). Returns the converted amount and exchange rate.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to convert | |
| to_currency | Yes | Target currency (e.g. 'USD', 'EUR', 'BTC') | |
| from_currency | Yes | Source currency (e.g. 'ETH', 'USD', 'BTC') |
Output Schema
| Name | Required | Description |
|---|---|---|
| rate | Yes | |
| amount | Yes | |
| source | Yes | |
| to_currency | Yes | |
| from_currency | Yes | |
| converted_amount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the tool as non-mutating. The description adds that the tool returns both the converted amount and the exchange rate, which is useful context, but it does not disclose any potential caveats such as rate sourcing, latency, or supported currency limitations. With annotations covering the safety profile, this is adequate but not exceptional.
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 a single, compact sentence that efficiently conveys the tool's purpose and output. It avoids unnecessary words and front-loads the key information, making it easy for an agent to parse.
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 straightforward converter with a simple parameter set and an output schema, the description covers the essential aspects: what it converts, what it returns, and the types of assets involved. It lacks discussion of edge cases or rate specifics, but these are not critical for a basic read-only tool. The description is complete enough to guide 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?
The input schema provides descriptions for all three parameters (amount, from_currency, to_currency) with examples and constraints, achieving 100% coverage. The tool description does not add further semantic detail beyond what the schema offers, so the baseline 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 clearly states that the tool converts between fiat currencies and crypto assets, using the specific verb 'convert' and naming the resource ('currency' and 'assets'). It also specifies the return values (converted amount and exchange rate), which distinguishes it from price-lookup tools like get_token_price.
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 the tool is for currency conversion but does not explicitly mention when to prefer it over sibling tools such as get_token_price or get_dex_quote. No exclusions or alternative usage scenarios are provided, leaving the agent to infer the appropriate context from the tool's name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_text_statsCount Text StatsARead-onlyInspect
Return word count, character count, sentence count, and paragraph statistics for a given text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to summarize |
Output Schema
| Name | Required | Description |
|---|---|---|
| word_count | Yes | |
| sentence_count | Yes | |
| character_count | Yes | |
| paragraph_count | Yes | |
| average_words_per_sentence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a non-destructive operation. The description adds detail about what the tool returns (word, character, sentence, paragraph stats), giving the agent a clear behavioral expectation. It does not dive into tokenization edge cases or the exact meaning of 'paragraph statistics,' but for a tool of this simplicity, the added context is valuable.
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 a single, front-loaded sentence that directly lists the tool's outputs. Every word earns its place; there is no redundancy or fluff, making it both concise and well-structured.
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 low complexity, the presence of a readOnlyHint, and an output schema (which presumably defines return values), the description is complete enough for an agent to select and invoke the tool correctly. It covers the essence without needing to restate schema 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?
The input schema has 100% coverage: the only parameter 'text' is described as 'Text to summarize,' and the tool description says 'for a given text,' so the parameter's purpose is clear. The description does not add significantly beyond the schema (e.g., formats, length limits), but the schema already handles this adequately.
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 specifies a concrete verb ('Return') and enumerates the specific outputs (word count, character count, sentence count, paragraph statistics). It unambiguously identifies a text-analysis tool that is distinct from all sibling tools, which are blockchain/defi/web utilities.
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 does not explicitly state when to use this tool vs alternatives, nor does it offer any exclusions or prerequisites. However, the purpose is self-evident: when the agent needs text metrics, this is the obvious choice. This makes usage guidelines only implied rather than explicitly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_transactionDecode TransactionARead-onlyInspect
Decode a transaction's calldata into a human-readable function name and arguments. Also returns transaction status (1=success, 0=revert), gas used, and block number. Optionally provide an ABI for precise decoding; otherwise uses 4byte.directory. Supports Ethereum mainnet and Base.
| Name | Required | Description | Default |
|---|---|---|---|
| tx_hash | Yes | Transaction hash (0x… 64 hex chars) | |
| abi_json | No | Optional ABI JSON array for decoding. If omitted, 4byte.directory is used. | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| status | No | 1=success, 0=revert, None=pending |
| tx_hash | Yes | |
| chain_id | Yes | |
| gas_used | Yes | |
| value_eth | Yes | |
| to_address | Yes | |
| block_number | Yes | |
| decoded_args | Yes | |
| from_address | Yes | |
| raw_calldata | Yes | |
| decode_source | Yes | |
| function_name | Yes | |
| function_selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds value by revealing the default fallback to 4byte.directory when no ABI is given, the specific return fields (status, gas used, block number), and chain support. This exceeds the annotation's minimal safety signal without contradicting it.
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, front-loaded with the core action, and every sentence earns its place. No redundant phrasing or filler. The structure is ideal: purpose, return values, then parameter guidance.
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 an output schema (return shape is documented), the description need not enumerate every field. It covers purpose, parameter behavior, fallback logic, and chain support, which is sufficient for a read-only tool with high schema coverage. No critical gaps remain.
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 three parameters. The description adds little beyond restating that abi_json is optional and that 4byte.directory is the fallback, which aligns with the schema. This is baseline for high coverage; no additional semantic depth is offered.
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 starts with a specific verb and resource: 'Decode a transaction's calldata into a human-readable function name and arguments.' It clearly distinguishes from sibling tools like get_transaction (raw transaction retrieval) and read_contract (state reads) by specifying the calldata decoding purpose. It also lists supplementary outputs (status, gas used, block number), further clarifying scope.
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 clear context on when to use the optional ABI parameter (for precise decoding) versus relying on the default 4byte.directory. It also states supported chains (Ethereum mainnet and Base). However, it does not explicitly contrast with alternative tools (e.g., when to use get_transaction instead), 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.
delegate_to_agentDelegate To AgentAInspect
Delegate a task to a remote A2A-compliant agent. Discovers the agent's capabilities via its agent card, sends it a message, and returns the result. Use when a task requires specialist capabilities beyond your own tools.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_url | Yes | Base URL of the remote A2A agent (e.g. https://agent.example.com) | |
| task_type | No | Broad task class for routing telemetry; never include user data or task text. | general |
| task_description | Yes | Natural language description of the task to delegate |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message, if any |
| result | Yes | Text result extracted from the remote agent's response |
| status | Yes | A2A task state: completed, failed, etc. |
| cost_usdc | No | Cost of this delegation in atomic USDC |
| agent_name | Yes | Name of the remote agent (from its agent card) |
| error_type | No | Stable error type for delegation failures that require planner recovery. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and idempotentHint=false, so mutation and non-idempotency are known. The description adds the specific behavioral flow: agent-card discovery, message sending, and result returning. However, it does not warn about potential side effects on the remote agent side or failure modes, which would add useful behavioral context for a non-read-only 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 short, purposeful sentences: what it does, how it does it, and when to use it. No filler or repeated schema content.
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?
The description, combined with a fully described schema and an output schema, is nearly complete for correct invocation. It justifies when to use the tool and explains the delegation flow. The main gap is not explicitly addressing remote side effects or cautioning that the target agent may perform actions with consequences, which matters given readOnlyHint=false.
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 description coverage is 100% and each parameter already has a clear description, including the task_type enum and its telemetry/routing purpose. The tool description adds nothing beyond the schema for parameters, so the baseline 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 uses a specific verb ('Delegate') and identifies the exact resource (a remote A2A-compliant agent), then explains the mechanism: discovers capabilities, sends a message, returns the result. This distinguishes it from sibling tools like discover_agents or web_search, which serve different purposes.
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 a clear usage condition: use when a task requires specialist capabilities beyond your own tools. It does not explicitly name alternatives or state when not to use the tool, but the intended context is well conveyed without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_agentsDiscover AgentsARead-onlyInspect
Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional search across agent name, organization slug, or published tool name | |
| limit | No | Maximum number of agents to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| agents | Yes | |
| generated_at | Yes | |
| registration_endpoint | No | Endpoint where an organization can publish its own A2A endpoint. |
| registration_benefits_url | No | Machine-readable registration benefits, requirements, and non-guarantees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the readOnlyHint=true safety profile. The description adds useful scoping context — only opt-in, publicly-registered agents with published reputation are returned — which is genuine behavioral information. However, it does not disclose search semantics, matching behavior, or the nature of the registry being queried.
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?
A single front-loaded sentence that leads with the verb 'Find' and packs in the resource plus three result attributes with zero filler. Every word earns its place, and the description is appropriately sized for the tool's simplicity.
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?
The tool has a full output schema, completely documented parameters, and a readOnlyHint annotation, so the description need not explain return values or safety. The essential call context is present. The only gap is usage differentiation from delegate_to_agent, which is minor for a simple discovery tool.
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%: both q (search across agent name, organization slug, or published tool name) and limit (max returns, bounds, default) are fully documented. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 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 uses a specific verb ('Find') with a precise resource ('opt-in remote A2A agents') and enumerates what results include (published tool capabilities, endpoints, public reputation status). This clearly distinguishes the tool from its sibling delegate_to_agent, which is about interacting with an agent rather than discovering one.
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 states what the tool finds but gives no conditions for when to use it over alternatives. It never references delegate_to_agent or any other sibling, and offers no exclusion criteria or prerequisites — the agent is left to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blockGet BlockARead-onlyInspect
Get details for an Ethereum or Base block by number, hash, or 'latest'.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| block_identifier | No | Block number, block hash, or 'latest'/'earliest'/'pending' | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | Yes | |
| number | Yes | |
| gas_used | Yes | |
| timestamp | Yes | |
| base_fee_gwei | Yes | |
| transaction_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safe read-only behavior. The description adds no additional behavioral context such as limits, prerequisites, or edge cases. It remains consistent with the annotation, but does not enrich it beyond the purpose.
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 a single, concise sentence that front-loads the action and purpose. No unnecessary words 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?
This is a simple read-only tool with an output schema and fully described optional parameters. The description covers the core purpose and identifier types, making it complete for typical use, though it does not mention default chain_id or block_identifier, which is acceptable given schema defaults.
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% for both chain_id and block_identifier. The description mentions 'number, hash, or latest', which is already present in the block_identifier schema description. It does not add new semantics 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 clearly states the tool gets details for an Ethereum or Base block by number, hash, or 'latest'. This is a specific verb+resource with explicit identifier options, distinguishing it from sibling transaction or metrics 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?
No guidance is provided about when to use this tool versus alternatives like get_transaction or get_chain_metrics. The usage context is only implied by the read operation, with no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chain_metricsGet Chain MetricsARead-onlyInspect
Compare blockchain ecosystem health using DeFiLlama current TVL, 7-day and 30-day TVL changes, and aggregate fee activity. Pass chains such as ['Ethereum', 'Arbitrum', 'Solana'] for a focused comparison, or omit chains to inspect the highest-TVL ecosystems. Historical and fee fields fail open when DeFiLlama does not cover a chain.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window used when selecting the historical TVL points to inspect. | |
| limit | No | Maximum number of chain rows to return when the result is not explicitly filtered. | |
| chains | No | Optional chain names to compare, such as ['Ethereum', 'Arbitrum', 'Solana']. When omitted, return the highest-TVL chains up to limit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| error | No | |
| chains | Yes | |
| error_type | No | |
| provenance | No | Source and freshness metadata for the DeFiLlama response. |
| total_available | Yes | |
| requested_chains | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral detail beyond the readOnlyHint annotation by stating that 'Historical and fee fields fail open when DeFiLlama does not cover a chain.' This discloses important fallback behavior that the annotation does not convey, providing meaningful transparency.
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, front-loads the core purpose, then gives usage guidance, and ends with a caveat. Every sentence earns its place with no 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 the tool's moderate complexity, the presence of an output schema, and readOnlyHint annotation, the description is complete. It covers purpose, usage patterns, default behavior (highest-TVL), and a key edge case (fail-open), leaving no major gaps.
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 explains each parameter. The description adds value by illustrating usage of the chains parameter with an example and clarifying the limit behavior ('omit chains to inspect the highest-TVL ecosystems'). However, it doesn't add detail about the days parameter, so a baseline 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 starts with a specific verb and resource: 'Compare blockchain ecosystem health using DeFiLlama current TVL, 7-day and 30-day TVL changes, and aggregate fee activity.' This clearly distinguishes it from sibling tools like get_protocol_tvl or get_dex_volume, which focus on different metrics.
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 clear usage contexts: 'Pass chains such as [...] for a focused comparison, or omit chains to inspect the highest-TVL ecosystems.' While it doesn't explicitly name alternatives or exclusion cases, it effectively communicates when and how to use the tool, earning a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datetimeGet DatetimeARead-onlyInspect
Return the current UTC date and time. Optional strftime format parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | strftime format string for the output | %Y-%m-%d %H:%M:%S UTC |
Output Schema
| Name | Required | Description |
|---|---|---|
| iso8601 | Yes | |
| datetime | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already declares the safe read-only nature. The description adds the important context that the time is in UTC, which is a meaningful behavioral detail. No other behavioral traits are disclosed, but none are expected for such a simple 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?
The description is a single concise sentence that front-loads the core function and mentions the optional parameter. Every word 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?
Given the low complexity, presence of an output schema, and the read-only annotation, the description is complete. It does not need to explain return values because the output schema covers that.
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 fully documents the 'format' parameter with a default and description (100% coverage). The description only says 'Optional strftime format parameter' which adds little beyond the schema, so the baseline 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 uses the specific verb 'Return' with the resource 'current UTC date and time', clearly stating the tool's function. It distinguishes from sibling tools as the only datetime-related tool among crypto-focused 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?
No guidance is given about when to prefer this tool over alternatives. Since there are no obvious alternatives, this is a minor gap, but the description does not explicitly state usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_defi_positionsGet Defi PositionsARead-onlyInspect
Aggregate DeFi positions for a wallet across Aave v3, Compound v3, Uniswap v3 LP, and canonical Ethereum (chain_id=1) or Base (chain_id=8453). Returns Aave aggregate account health (collateral, debt, health factor, LTV) with per-reserve breakdown for major assets, Compound v3 Comet market positions (supply, borrow, per-asset collateral, liquidation flag), and Uniswap v3 LP positions by token ID (token pair, fee tier, tick range, liquidity, uncollected fees). On Ethereum, also returns canonical Lido stETH/wstETH balances and the current wstETH-to-stETH equivalent. Per-protocol failures are isolated — other protocols still return.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| wallet_address | Yes | Wallet address (0x…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| errors | No | |
| aave_v3 | No | |
| chain_id | Yes | |
| uniswap_v3 | No | |
| compound_v3 | No | |
| lido_staking | No | |
| wallet_address | Yes | |
| data_block_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses detailed behavior: only reads data, returns specific Aave/Compound/Uniswap breakdowns, includes Lido balances on Ethereum, and isolates per-protocol failures so other protocols still return results. This is comprehensive and adds significant value beyond the annotation.
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 information-dense but not bloated. Four sentences cover purpose, return details, chain-specific behavior, and error isolation—every sentence earns its place and the main purpose 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?
Given the high complexity of aggregating multiple protocols, the description is complete: it covers chains, protocols, return contents for each protocol, chain-specific extras, and failure handling. The output schema exists, and the description still provides additional useful context, making it fully sufficient.
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%, and the schema already explains both parameters (wallet_address and chain_id). The description restates chain_id values but adds minimal new meaning beyond the schema, 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 uses a specific verb ('aggregate') and identifies the exact resource ('DeFi positions for a wallet') plus the protocols and chains covered (Aave v3, Compound v3, Uniswap v3 LP, Ethereum/Base). It clearly distinguishes from sibling tools like get_wallet_portfolio by naming the precise protocols and scope.
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 clear context on what the tool does (aggregating multiple DeFi protocols), so an agent can infer when to use it. However, it does not explicitly name alternatives or state when NOT to use it, falling short of the highest level of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dex_quoteGet Dex QuoteARead-onlyInspect
Get the best Uniswap v3 swap quote on Ethereum (chain_id=1) or Base (chain_id=8453) via direct on-chain QuoterV2 calls. Queries all four fee tiers (100/500/3000/10000 bps) in parallel and returns the tier with the highest output amount, along with per-tier breakdown. Inputs are raw uint256 amounts and EIP-55 checksummed addresses; native ETH is not quoted directly — pass the WETH address. Returns no_liquidity=true when no pool exists for the pair. Point-in-time quote at the returned block_number; do not cache.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | 1 = Ethereum mainnet, 8453 = Base mainnet. Other chains unsupported. | |
| token_in | Yes | EIP-55 checksummed address of the token being sold. For native ETH, pass the WETH address (Ethereum: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; Base: 0x4200000000000000000000000000000000000006). | |
| amount_in | Yes | Input amount in RAW uint256 units (e.g. '1000000' for 1 USDC, '1000000000000000000' for 1 WETH). Must be > 0 and < 2^128. Common token decimals: WETH/ETH/DAI/wstETH/cbETH/weETH 18, WBTC/cbBTC 8, USDC/USDT 6. Do not call read_contract to look up decimals — use these values directly. | |
| token_out | Yes | EIP-55 checksummed address of the token being bought. |
Output Schema
| Name | Required | Description |
|---|---|---|
| chain_id | Yes | |
| token_in | Yes | |
| amount_in | Yes | |
| token_out | Yes | |
| amount_out | Yes | |
| block_number | Yes | |
| no_liquidity | Yes | |
| fee_tier_used | Yes | |
| effective_rate | Yes | |
| quotes_per_tier | Yes | |
| amount_out_human | Yes | |
| amount_in_decimals | Yes | |
| amount_out_decimals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description enriches the readOnlyHint annotation with critical behavioral details: it queries four fee tiers in parallel, returns the best tier plus a breakdown, reports no_liquidity=true when no pool exists, and returns a block_number for point-in-time quotes. It also cautions against caching. This goes well beyond the annotation's safety signal.
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 a single, information-dense paragraph. Every sentence contributes unique value: purpose, mechanism, input formats, native ETH caveat, no-liquidity behavior, and point-in-time nature. There is no redundancy or fluff.
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 (multi-chain, four fee tiers, specific input constraints), the description covers all essentials: supported chains, parallel tier queries, output choice, no-liquidity handling, and freshness caveat. It even warns against caching. The presence of an output schema means return values need not be fully described, and the description is complete enough for an agent to use 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?
Schema description coverage is 100%, so the schema already thoroughly documents token_in, token_out, amount_in, and chain_id. The description adds a brief note about raw uint256 amounts and EIP-55 addresses, but this largely duplicates schema content. Since the schema handles parameter explanations, the description adds minimal additional semantic value.
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's function: obtaining the best Uniswap v3 swap quote on Ethereum or Base. It specifies the method (direct on-chain QuoterV2), the resource (Uniswap v3), and the scope (chain_ids 1 and 8453). This distinguishes it from sibling tools like get_token_price or get_dex_volume.
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 clear context: it is for on-chain swap quotes, explicitly lists supported chains, and explains that native ETH is not quoted directly (use WETH). It also warns against caching due to point-in-time quotes. While it does not explicitly name alternative tools, the intended usage is unmistakable given the specific inputs and behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dex_volumeGet Dex VolumeARead-onlyInspect
Compare decentralized exchange activity from DeFiLlama. Returns 24-hour, 7-day, and 30-day volume, period-over-period changes, and each protocol's share of reported global 24-hour DEX volume. Filter by protocol names or DeFiLlama slugs and rank by a 1-, 7-, or 30-day lookback window.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of DEX protocols to return. | |
| protocols | No | Optional protocol names or DeFiLlama slugs, such as ['uniswap-v3', 'curve-dex']. When omitted, return the largest DEX protocols. | |
| lookback_days | No | Window used to rank the returned protocols: 1, 7, or 30 days (nearest supported window is used). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| dexes | Yes | |
| error | No | |
| error_type | No | |
| total_matching | Yes | |
| total_available | Yes | |
| volume_share_basis | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description adds meaningful behavioral detail: it lists the exact metrics returned (24h/7d/30d volume, period-over-period changes, share of global volume) and the source. It does not contradict the annotations or hide any obvious side effects beyond what a read-only tool implies.
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 two tight sentences: the first front-loads the primary purpose, and the second enumerates the key metrics and filtering/ranking options. Every phrase earns its place with no redundancy or 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 a read-only annotation, a fully documented 3-parameter schema, and an output schema present, the description provides sufficient selection and invocation context. It names the data source, return metrics, filtering options, and ranking window, leaving no obvious gaps for an agent to misuse the tool.
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 provides 100% coverage of all three parameters with clear descriptions, so the description does not add significant meaning beyond the schema. It restates the filtering/ranking semantics, but the schema already documents limit, protocols, and lookback_days accurately, warranting the baseline score.
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 ('Compare') and resource ('decentralized exchange activity from DeFiLlama'), making the tool's purpose immediately clear. It also distinguishes itself from siblings like get_dex_quote and get_protocol_tvl by focusing on volume comparison metrics.
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 clearly establishes when to use the tool (when comparing DEX activity from DeFiLlama) and how to tailor it via protocol filters and lookback windows. However, it does not explicitly name alternative tools or state when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_erc20_balanceGet Erc20 BalanceBRead-onlyInspect
Get the ERC-20 token balance of a wallet, including symbol and decimals.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| token_address | Yes | ERC-20 token contract address (0x…) | |
| wallet_address | Yes | Wallet address (0x…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| chain_id | Yes | |
| balance_raw | Yes | |
| token_symbol | Yes | |
| token_address | Yes | |
| token_decimals | Yes | |
| wallet_address | Yes | |
| balance_formatted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals this as a safe read operation, and the description adds little beyond the return data hint ('including symbol and decimals'), which is also covered by the output schema. No additional behavioral context such as chain support limitations, error conditions, or rate limits is provided.
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 a single, front-loaded sentence with no filler. Every word contributes to stating the tool's purpose, making it appropriately concise.
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 simple nature of the tool, the detailed schema, the read-only annotation, and the presence of an output schema, the description is sufficient. It could mention that chain_id defaults to Ethereum, but that is already in the schema, so no major gaps exist.
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?
All three parameters (chain_id, token_address, wallet_address) are fully described in the schema with clear descriptions, so the description adds no new meaning. The schema coverage is 100%, so a baseline 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 clearly states the tool's function: retrieving an ERC-20 token balance for a given wallet, with the added detail of returning symbol and decimals. While it is specific and distinguishes from generic balance tools, it does not explicitly differentiate from sibling tools like get_eth_balance or get_wallet_portfolio.
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 use for querying ERC-20 balances but offers no explicit guidance on when to choose this over alternatives, nor any exclusions or prerequisites. The use case is inferred from the tool name and description rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eth_balanceGet Eth BalanceARead-onlyInspect
Get the native ETH balance of an Ethereum or Base address. NOTE: get_wallet_portfolio already includes the native ETH balance in its holdings list — only call get_eth_balance when you need a standalone ETH balance without a full portfolio scan.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Ethereum address (0x…) | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) |
Output Schema
| Name | Required | Description |
|---|---|---|
| address | Yes | |
| chain_id | Yes | |
| balance_eth | Yes | |
| balance_wei | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already discloses that this is a safe read operation. The description adds useful context by mentioning the portfolio overlap, but does not go deeper into behaviors like return format, error handling, or network specifics beyond schema. With annotations carrying the safety profile, this is adequate but not rich (consistent with the calibration example).
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 exactly two sentences. The first sentence states purpose, the second provides a critical usage note. No redundant words, no filler. Every sentence earns its place, and the note about get_wallet_portfolio is essential for correct tool selection.
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 2-parameter read-only tool with an output schema, the description covers what it does, when to use it, and which sibling to avoid. The existence of an output schema means return-value details are not required in the description. It is complete within the context of the 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 description coverage is 100%: both address and chain_id are fully described in the input schema. The description adds nothing new about the parameters themselves, only reinforcing the Ethereum/Base chain support. Baseline of 3 applies because the schema does the heavy lifting.
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'), a clear resource ('native ETH balance'), and a scope ('Ethereum or Base address'). It explicitly distinguishes itself from get_wallet_portfolio, which is a sibling tool, by noting the balance is already included there. This is a precise, non-tautological purpose statement.
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 guidance on when to use the tool ('only call get_eth_balance when you need a standalone ETH balance without a full portfolio scan') and names the alternative (get_wallet_portfolio). This is a clear usage vs. alternative distinction, exceeding mere implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gas_priceGet Gas PriceARead-onlyInspect
Get current EIP-1559 gas fees on Ethereum or Base. Returns base fee, priority fee, and next-block base fee estimate (useful for timing transactions). gas_used_ratio indicates network congestion (>0.5 = busy, >0.9 = very congested). Optional USD estimates include ETH spot price and rough transfer/swap costs. Results cached 10 seconds per chain.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| include_usd_estimate | No | If true, include ETH spot price and rough USD cost estimates for a simple transfer (21k gas) and a swap-like transaction (150k gas). |
Output Schema
| Name | Required | Description |
|---|---|---|
| chain_id | Yes | |
| base_fee_gwei | Yes | |
| eth_price_usd | No | |
| gas_price_gwei | Yes | |
| gas_used_ratio | Yes | |
| priority_fee_gwei | Yes | |
| next_base_fee_gwei | Yes | |
| estimated_swap_cost_usd | No | |
| estimated_transfer_cost_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral details: results are cached for 10 seconds per chain, gas_used_ratio thresholds for congestion are defined, and optional USD estimates are explained. This gives the agent a comprehensive understanding of data freshness and interpretation, complementing the annotation.
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 primary purpose front-loaded in the first sentence. Each sentence provides distinct value: purpose, core outputs and congestion interpretation, and optional extras/caching. No fluff or repetition, making it highly concise and well-structured.
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 simplicity (two optional parameters, output schema present), the description is complete. It covers the purpose, key output fields, congestion thresholds, optional USD estimates, and caching. The agent has sufficient context to select and invoke the tool correctly without unmet informational needs.
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 provides full descriptions for both parameters, achieving 100% coverage. The description adds minimal extra meaning, such as clarifying that USD estimates include rough transfer and swap costs. This is a baseline 3 where the schema does the heavy lifting, and the description offers marginal additional semantics.
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 gets current EIP-1559 gas fees on Ethereum or Base, with a specific verb and resource. It distinguishes itself from sibling tools like get_token_price or get_block by focusing on gas fees and listing specific outputs. The first sentence is explicit and 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 provides clear usage context: it is useful for timing transactions and network congestion assessment via gas_used_ratio. However, it lacks explicit alternatives or when-not-to-use guidance, though no sibling tool directly competes for this purpose. A 4 reflects strong context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lending_ratesGet Lending RatesARead-onlyInspect
Get current on-chain lending supply/borrow rates for expanded Aave v3 reserves and Compound v3 markets on Ethereum or Base. Returns per-asset APY snapshots and Compound utilization where available. Useful for protocol-specific stablecoin yield comparisons (e.g., USDC on Aave vs Compound).
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Optional asset-symbol filter (e.g., ['USDC','DAI']). Case-insensitive. Max 20 symbols. | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base). | |
| protocol | No | Protocol to query: 'aave-v3', 'compound-v3', or 'all'. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| rates | Yes | |
| errors | No | |
| chain_id | Yes | |
| protocol | Yes | |
| data_block_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by disclosing the return format: 'per-asset APY snapshots and Compound utilization where available.' It also includes the caveat 'where available,' which clarifies behavior when data may be incomplete. No contradictions 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?
Three sentences, each with a specific purpose: what it returns, return details, and a use-case example. No fluff or redundant information. Front-loaded with the primary action ('Get current on-chain lending supply/borrow rates').
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?
The tool has an output schema, so return values need not be explained, but the description still mentions APY snapshots and utilization, which helps. The description covers the protocols, chains, and a concrete use case, making it complete for a read-only list-style tool with well-documented parameters and annotations.
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% (all parameters have descriptions), so the baseline is 3. The description adds context about protocol and chain coverage ('Aave v3 reserves and Compound v3 markets on Ethereum or Base') but does not add meaning for the assets filter or chain_id beyond what the schema already provides. The description does not compensate for any parameter gaps because there are none.
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') with a clear resource ('on-chain lending supply/borrow rates') and explicitly scopes it to 'expanded Aave v3 reserves and Compound v3 markets on Ethereum or Base.' It also distinguishes from siblings like get_yield_rates by emphasizing protocol-specific lending rates, not general yields.
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 indicates when to use this tool: 'Useful for protocol-specific stablecoin yield comparisons (e.g., USDC on Aave vs Compound).' This provides clear context, but it does not explicitly mention sibling tools as alternatives or state when NOT to use it. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_liquidation_riskGet Liquidation RiskARead-onlyInspect
Assess DeFi liquidation risk for up to 50 wallets across expanded Aave v3 and Compound v3 coverage on Ethereum (chain_id=1) or Base (chain_id=8453). Returns per-wallet health factor and tiered risk classification (liquidatable, critical, warning, caution, healthy, no_debt) plus an overall_tier aggregate across protocols, and a summary count for alert dashboards. Per-protocol failures are isolated — a Compound RPC error does not blank the Aave result (and vice versa). View-only (eth_call) against hardcoded protocol addresses; duplicate wallet addresses are silently removed.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| wallet_addresses | Yes | Wallet addresses to assess (max 50; duplicates are silently removed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| results | Yes | |
| summary | Yes | |
| chain_id | Yes | |
| data_block_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description reinforces with 'View-only (eth_call)' plus adds valuable behavioral details: per-protocol failure isolation, silent duplicate removal, and hardcoded addresses. These go beyond the annotation and give the agent confidence about side-effect-free operation and error handling.
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, front-loaded with purpose, then output summary, then edge-case behaviors. No fluff; every sentence contributes value and the structure is logical.
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 an output schema present, return types are already documented. The description adds failure isolation, deduplication, and the full tier list, covering edge cases. No major gaps remain.
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% with descriptions for both chain_id and wallet_addresses. The description repeats the max 50 and chain IDs but doesn't add new parameter-level meaning beyond the schema. Baseline of 3 is appropriate since the schema already does the heavy lifting.
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's function with a specific verb and resource: 'Assess DeFi liquidation risk for up to 50 wallets across expanded Aave v3 and Compound v3 coverage.' It names the chains, protocols, and output types, distinguishing it from sibling tools like get_defi_positions or get_lending_rates.
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 for liquidation risk assessment, but it doesn't explicitly state when to prefer this tool over alternatives or mention exclusions. It mentions expanded coverage, which hints at comprehensiveness, but lacks direct comparison such as 'for alternative, use X instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocol_tvlGet Protocol TvlARead-onlyInspect
Get Total Value Locked (TVL) data for a DeFi protocol from DeFiLlama. Returns current TVL in USD, 7-day and 30-day percentage change, and a per-chain breakdown. Set include_historical=True to also retrieve a daily TVL series for trend analysis. When DeFiLlama reports them, also returns current fees and revenue in USD with 7-day and 30-day percentage change. You can also batch multiple protocols via protocols=[...]. Supports 3,000+ protocols including Aave, Uniswap, Curve, Compound, Lido, MakerDAO, and more. Batch responses retain one compact economic summary per requested protocol; single-protocol calls include chain and historical detail. A revenue_error_type identifies an upstream revenue lookup failure. Use the DeFiLlama slug format: 'aave-v3', 'uniswap-v3', 'curve-dex'. Common aliases such as 'spark-protocol' and 'compound' are auto-corrected.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days for the historical series (only used when include_historical=True). | |
| protocol | No | DeFiLlama protocol slug (e.g. 'aave-v3', 'uniswap-v3', 'curve-dex'). Use lowercase with hyphens as shown on DeFiLlama. Tip: 'aave' works for the combined Aave TVL; 'aave-v3' for V3 only. Optional when using batch mode via protocols=[...]. | |
| protocols | No | Optional batch mode: list of DeFiLlama protocol slugs. When provided, the tool returns one TVL result object per protocol. | |
| include_historical | No | If true, return a daily historical TVL series for the requested window. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true; description does not contradict. Adds beyond annotations by describing batch vs single-protocol response differences (compact summary vs detailed chain/history), revenue_error_type, and that historical series is optional. No mention of rate limits or auth, but readonly annotation covers safety.
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?
Description is 4-5 sentences, front-loaded with purpose and key outputs. Each sentence adds value (supported protocols, batch behavior, error type). Could be slightly tightened but no waste.
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 4 optional params, no output schema, and moderate complexity, the description covers return values, batch vs single differences, historical option, fees/revenue when available, and error identifier. Provides comprehensive context for an AI 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?
Schema coverage is 100% (4 params all described in schema). Description adds significant context: explains slug format with examples, distinguishes 'aave' vs 'aave-v3', clarifies days usage only when include_historical=True, and describes batch mode behavior. Greatly 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 clearly states the tool gets TVL data for DeFi protocols from DeFiLlama, specifying returned metrics (current TVL, 7/30-day change, chain breakdown, optional historical, fees/revenue). It differentiates from sibling tools like get_dex_volume or get_lending_rates by being protocol-level TVL specific.
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 guidance: slug format, batch mode via protocols=[...], auto-correction of aliases, and context for when to use single vs batch. Lacks explicit when-not-to-use or comparisons to alternatives, but purpose is narrow enough that it's clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_approvalsGet Token ApprovalsARead-onlyInspect
Audit ERC-20 token allowances for a wallet address. By default, returns all non-zero approvals for assets in the shared tracked-asset registry across curated DeFi protocol spenders (Uniswap, Aave, Compound, 1inch, 0x, OpenSea). Flags unlimited approvals with risk levels: high=unknown spender, medium=trusted protocol, low=bounded amount. Use before swaps to verify approval state, or after security incidents to detect active exploit vectors. Ethereum mainnet and Base only.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | No | Token contract addresses to check (max 50). Defaults to the platform tracked token list. | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| spenders | No | Spender contract addresses to check (max 20). Defaults to the curated DeFi protocol list. | |
| wallet_address | Yes | Wallet address (0x…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| error | No | |
| chain_id | Yes | |
| approvals | Yes | |
| risk_summary | Yes | |
| wallet_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses default behavior (returns non-zero approvals from tracked-asset registry and curated protocol spenders) and output semantics (flags unlimited approvals with risk levels). It also provides network limitations, giving substantial behavioral context.
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 concise, front-loaded with the primary purpose, and each sentence adds value: purpose, defaults, risk flags, use cases, and network restrictions. No wasted words.
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 output schema exists and all parameters are described, the description fully covers the tool's behavior, use cases, and limitations. No critical information 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% as all four parameters have detailed descriptions in the schema. The description adds minimal extra meaning, mostly reinforcing defaults (e.g., 'shared tracked-asset registry' vs schema's 'platform tracked token list'). No significant new parameter semantics are introduced.
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's purpose with a specific verb ('Audit') and resource ('ERC-20 token allowances for a wallet address'). It distinguishes itself from sibling tools by focusing on approvals/allowances and risk flagging, rather than balances or transactions.
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 usage scenarios: 'Use before swaps to verify approval state, or after security incidents to detect active exploit vectors.' It also states an exclusion: 'Ethereum mainnet and Base only,' clarifying when the tool is not applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_priceGet Token PriceARead-onlyInspect
Get current price, 24h change, market cap, fully-diluted valuation, and volume for one or more crypto tokens. Accepts ticker symbols (BTC, ETH, LQTY), full token names (Bitcoin, Liquity, Chainlink), or CoinGecko IDs. Unknown symbols are resolved automatically against the full CoinGecko coin list. Supports batch queries up to 50 tokens. Bare 0x contract addresses are not resolvable by CoinGecko and should be treated as unknown. If get_wallet_portfolio already returned price_usd/value_usd for a held token, reuse that value instead of calling get_token_price again.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | Token symbols or CoinGecko IDs (e.g. ['BTC', 'ETH', 'SOL']) | |
| vs_currency | No | Quote currency (usd, eur, gbp, btc, eth) | usd |
Output Schema
| Name | Required | Description |
|---|---|---|
| prices | Yes | |
| vs_currency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint true. The description goes beyond by explaining unknown symbol auto-resolution against 'the full CoinGecko coin list', the unsupported nature of 'Bare 0x contract addresses', and the batch cap. These are meaningful behavioral details not present in the annotation.
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?
Six sentences, each carrying specific information: purpose, accepted input forms, resolution behavior, batch limit, address limitation, and reuse guidance. No filler or redundant phrasing; the main purpose 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?
With an output schema present, return-value documentation is unnecessary. The description covers input flexibility, resolution behavior, batch constraints, and a reuse recommendation, making it comprehensive for a token-price lookup tool. There are no obvious missing behavioral expectations.
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% with parameter descriptions already present, so the baseline is 3. The description adds value by revealing that full token names are accepted and that unknown symbols resolve automatically, which the schema does not mention. This enriches parameter understanding.
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 'Get current price, 24h change, market cap, fully-diluted valuation, and volume for one or more crypto tokens' — a specific verb and resource, clearly distinguishing it from siblings like get_token_price_historical by emphasizing 'current'. The tool's scope is 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?
Explicitly instructs 'If get_wallet_portfolio already returned price_usd/value_usd for a held token, reuse that value instead of calling get_token_price again', providing a clear when-not-to-use alternative. It also spells out accepted identifier types (symbols, names, CoinGecko IDs) and the 50-token batch limit, offering concrete selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_price_historicalGet Token Price HistoricalARead-onlyInspect
Get historical price data for crypto tokens over a specified time window (1–365 days). Returns period statistics (start, end, % change, high, low) plus a downsampled daily price series, plus high_30d (raw observation maximum), std_30d (population standard deviation of daily returns as a decimal), and dca_baseline_90d (weekly samples over the preceding 90 UTC days, excluding the latest observation). dca_baseline_90d_partial identifies incomplete history. Use for period comparisons (month-over-month, YTD), trend analysis, and price charts. Prefer over web_search for time-comparative financial queries. Pass stats_only=true when the daily series is unnecessary. These metrics are pre-computed and should not be re-derived with calculate.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (1–365). 1=5-min granularity, 2-90=hourly, 91+=daily. | |
| tokens | Yes | Token symbols or CoinGecko IDs (e.g. ['BTC', 'ETH']). Max 10 per call. | |
| stats_only | No | If true, omit the daily price series and return period stats plus precomputed 30-day high/volatility and 90-day DCA baseline metrics. | |
| vs_currency | No | Quote currency (usd, eur, gbp, btc, eth). Lowercase 3–10 letters. | usd |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| tokens | Yes | |
| vs_currency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description adds substantial context beyond that: it explains how dca_baseline_90d is computed (weekly samples over preceding 90 UTC days, excluding latest observation), notes dca_baseline_90d_partial identifies incomplete history, and warns that metrics are pre-computed and should not be re-derived with calculate. 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 core purpose, then compactly enumerates return metrics and usage guidance. Every sentence serves a distinct function—purpose, output details, edge-case identifier, use cases, alternative, and optimization. No redundancy or 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?
The tool is complex with multiple precomputed metrics, but the description covers all key aspects: return value composition, granularity caveats, partial history handling, and guidance on avoiding re-derivation. An output schema exists, so return values need not be exhaustively spelled out, yet the description still provides a rich overview.
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 a small amount of semantic value by clarifying when stats_only is useful ('when the daily series is unnecessary'), but most parameter meaning is already fully documented in the schema. No significant gap to compensate.
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 a specific verb+resource ('Get historical price data for crypto tokens') and details the exact outputs (period statistics, daily price series, high_30d, std_30d, dca_baseline_90d). It distinguishes from siblings like get_token_price and web_search by focusing on historical time windows and time-comparative analysis.
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 use cases are given ('Use for period comparisons (month-over-month, YTD), trend analysis, and price charts'), with a direct alternative ('Prefer over web_search for time-comparative financial queries') and a conditional optimization ('Pass stats_only=true when the daily series is unnecessary'). This is textbook usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionGet TransactionARead-onlyInspect
Get details and receipt for an Ethereum or Base transaction by hash. Includes bounded calldata, normalized event logs, transaction index, and receipt-derived effective gas price and fee when available.
| Name | Required | Description | Default |
|---|---|---|---|
| tx_hash | Yes | Transaction hash (0x…) | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) |
Output Schema
| Name | Required | Description |
|---|---|---|
| logs | No | |
| status | No | 1=success, 0=revert, None=pending |
| fee_eth | No | |
| fee_wei | No | |
| tx_hash | Yes | |
| chain_id | Yes | |
| gas_used | Yes | |
| value_eth | Yes | |
| input_data | No | Hex calldata, bounded to 8 KiB |
| to_address | Yes | |
| block_number | Yes | |
| from_address | Yes | |
| gas_price_gwei | Yes | |
| logs_truncated | No | |
| transaction_index | No | |
| input_data_truncated | No | |
| effective_gas_price_gwei | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context: it includes specific fields like bounded calldata and normalized event logs, and notes the fee is included 'when available', indicating conditional behavior. This goes beyond merely restating 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?
Two tightly packed sentences with no filler. Each clause adds value: the first defines the core action and scope, the second lists key return fields and conditional behavior. Excellent structure for quick comprehension.
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?
The description covers the purpose, scope, and key output details, and the output schema exists to define return structure. It lacks error behavior or prerequisites, but for a simple read tool with full annotations and an output schema, it is sufficiently complete to guide an agent.
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 parameters with descriptions (tx_hash format, chain_id with Ethereum/Base values). The description provides no additional parameter-level semantics beyond what the schema already states, so it rests at the baseline for full 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 states a specific verb ('Get'), a specific resource ('details and receipt for an Ethereum or Base transaction by hash'), and enumerates distinctive outputs (bounded calldata, normalized event logs, transaction index, effective gas price). This clearly distinguishes it from siblings like decode_transaction.
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 (when you have a transaction hash and need details/receipt) but does not explicitly state when to use this tool over alternatives, nor does it provide exclusions. The sibling decode_transaction could benefit from a note, but the context is not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_approvalsGet Wallet ApprovalsARead-onlyInspect
Inspect a wallet's current ERC-20 token authorization exposure on one DeBank-supported chain. Returns discovered spenders, USD exposure, protocol attribution, and hacked or abandoned protocol flags. This is broader than the curated block-accurate get_token_approvals tool.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | DeBank chain identifier, for example eth, arb, or base | |
| wallet_address | Yes | EVM wallet address (0x-prefixed) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| errors | No | |
| chain_id | Yes | |
| approvals | No | |
| provenance | Yes | |
| data_complete | Yes | |
| wallet_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds useful behavioral context about the return contents (spenders, USD exposure, protocol attribution, and hacked/abandoned flags) and the broader scope relative to the sibling. No destructive behavior is implied, and no contradiction 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 two sentences, front-loaded with the core purpose, then return highlights, then a comparative pointer. Every sentence earns its place with no redundancy or fluff.
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 an output schema present, return values are documented. The description covers what the tool does, its chain scope, the parameters (implicitly), the type of data returned, and its relationship to a key sibling. This is complete for an agent to select and call the tool.
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 describes both parameters with 100% coverage. The description adds no additional parameter-level detail beyond tying 'wallet' and 'chain' to the context. Baseline 3 applies because the schema carries the semantics.
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 inspects a wallet's ERC-20 token authorization exposure on a specific chain, with a specific verb ('inspect') and resource. It also immediately distinguishes itself from the sibling get_token_approvals by noting it is broader, so an agent can differentiate.
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 a clear alternative by comparing to get_token_approvals and characterizing it as 'curated block-accurate', implying when the narrower tool is appropriate. However, it doesn't explicitly state 'use this when' or 'do not use when', leaving some 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.
get_wallet_historyGet Wallet HistoryARead-onlyInspect
Get one page of decoded transaction history for an EVM wallet across DeBank-supported chains. Returns send, receive, and approval categories with protocol, token, exchange, gas, and USD metadata. Use the returned next_cursor as start_time to page backward.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_ids | No | Optional DeBank chain identifiers; omit to query all supported chains. | |
| page_count | No | Number of history entries to request (maximum 20). | |
| start_time | No | Return entries earlier than this Unix timestamp for cursor pagination. | |
| wallet_address | Yes | EVM wallet address (0x-prefixed) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| errors | No | |
| cex_dict | No | |
| has_more | No | |
| chain_ids | Yes | |
| page_count | Yes | |
| provenance | Yes | |
| start_time | Yes | |
| token_dict | No | |
| next_cursor | No | |
| history_list | No | |
| project_dict | No | |
| data_complete | Yes | |
| wallet_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the safety profile is covered. The description adds important behavioral details beyond annotations: it reveals that the tool returns 'decoded' transactions with categories and metadata, and explains the pagination mechanism using next_cursor. This transparency is helpful and goes beyond 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?
Two sentences, front-loaded with the primary purpose, followed by return details and pagination guidance. Every sentence earns its place, and there is no redundancy or 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?
The tool is moderately complex (4 params, output schema present). The description clearly covers what the tool returns, the scope of chains, and how to page through results. It is complete and actionable without needing to explain return values due to the 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?
Schema description coverage is 100% for all parameters, so baseline is 3. The description adds value by explaining how start_time relates to the returned next_cursor for cursor pagination, which provides practical semantic meaning not fully captured in the parameter description 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 tool's function: 'Get one page of decoded transaction history for an EVM wallet across DeBank-supported chains.' It specifies the resource (wallet history), the scope (one page, EVM, DeBank-supported chains), and includes return categories, distinguishing it from sibling tools like get_transaction or get_wallet_approvals.
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 clear usage instruction for pagination: 'Use the returned next_cursor as start_time to page backward.' It implies when to use this tool (for browsing transaction history) but does not explicitly state when not to use it or name alternatives among siblings. Still, the pagination guidance is actionable and valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_portfolioGet Wallet PortfolioARead-onlyInspect
Get aggregated token holdings with USD values for a wallet address. Tracks 19 major assets on Ethereum and 12 on Base, including spot, lending, liquid-staking, restaking, and stablecoin assets. Sorted by USD value. Returns up to 20 holdings. Includes native ETH balance in the holdings list — calling get_eth_balance separately after this is redundant.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| wallet_address | Yes | Wallet address (0x…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| chain_id | Yes | |
| holdings | Yes | |
| fetch_errors | No | |
| wallet_address | Yes | |
| total_value_usd | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having readOnlyHint annotation, the description adds valuable context: it lists asset categories, chain coverage, sorting by USD value, a hard limit of 20 holdings, and the inclusion of native ETH. This goes well beyond the annotation to set expectations about the returned data.
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, each providing distinct information: overall function, coverage/scope, and a usage caveat. No wasted words, and the most important detail 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?
With an output schema present and read-only annotation, the description fully covers the tool's behavior, including limits, sorting, and coverage. It provides enough context for an agent to decide when to call it.
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?
Both parameters have detailed descriptions in the schema (wallet address, chain_id with chain IDs). The description reinforces the chain coverage but does not add new parameter-specific information, so schema carries the 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 ('Get aggregated token holdings with USD values') and clearly identifies the resource (wallet address). It also distinguishes from siblings by noting that native ETH balance is included, making a subsequent get_eth_balance call redundant.
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 warns against calling get_eth_balance separately, which is a clear exclusion. It also implies this tool is for broad portfolio views across supported chains, though it doesn't enumerate all alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_positionsGet Wallet PositionsARead-onlyInspect
Get a wallet's DeFi positions across all DeBank-supported chains and protocols. Returns protocol-level positions, asset/debt/net USD values, token lists, and optional all-chain net worth. Set include_token_balances=true to also return DeBank's complete cross-chain wallet token list. This covers substantially more protocols and chains than the block-accurate get_defi_positions tool. Use raw-RPC tools for liquidation, swap quotes, or other transaction-critical questions.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_address | Yes | EVM wallet address (0x…) | |
| include_net_worth | No | Include all-chain net worth and per-chain balances; disable to avoid that additional provider request. | |
| include_token_balances | No | Include DeBank's complete cross-chain token balance list; adds a billable provider request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| errors | No | |
| positions | No | |
| provenance | Yes | |
| data_complete | Yes | |
| chain_balances | No | |
| token_balances | No | |
| wallet_address | Yes | |
| include_net_worth | Yes | |
| staleness_seconds | No | Max age in seconds of the underlying DeBank position data (from per-item update_at), or None when unavailable. |
| total_net_worth_usd | No | |
| include_token_balances | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds meaningful context: it returns protocol-level positions, asset/debt/net values, optional all-chain net worth, and complete cross-chain token lists when requested. It also notes that include_token_balances adds a billable provider request (though part of that is in the schema). 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?
Three focused sentences deliver the core purpose, return contents, key parameter behavior, comparison to an alternative, and usage boundary. Every sentence earns its place with no redundancy or 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?
The tool is moderately complex (cross-chain DeFi positions), but the description plus a rich input schema and output schema fully cover scope, return types, optional parameters, tool differentiation, and important exclusions. The agent has enough context to select and invoke 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 coverage is 100% with clear parameter descriptions, so the baseline is 3. The description reinforces include_token_balances behavior and mentions optional net worth, but adds little beyond what the schema already states. It does not provide unique semantic value for wallet_address 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 clearly states the tool gets a wallet's DeFi positions across all DeBank-supported chains and protocols. It explicitly distinguishes itself from the sibling get_defi_positions by noting it covers substantially more protocols and chains, making its 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?
Provides explicit guidance: use this for broad DeFi position retrieval, and use raw-RPC tools for liquidation, swap quotes, or transaction-critical questions. It also names the alternative get_defi_positions and explains the difference, giving clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_yield_ratesGet Yield RatesARead-onlyInspect
Get DeFi yield pool rates from DeFiLlama, covering 1,000+ protocols across all chains. Returns pools sorted by APY with TVL, base rate, reward APY, and 7d/30d mean APY context. Filter by protocol (e.g. 'aave-v3', 'compound-v3'), chain (e.g. 'Ethereum', 'Base'), minimum TVL, and minimum APY. Use this to answer questions like 'Where can I get the best USDC yield?', 'What is Aave's current APY on Ethereum?', or 'Compare Aave vs Compound yields'. Returns up to 50 pools. Call once per query unless a genuinely disjoint filter is required. The returned symbol field contains the underlying tokens (e.g. 'USDC', 'ETH-USDC', 'WBTC'); filter on the client side by inspecting symbol rather than re-calling with different arguments. Use min_apy, max_apy, min_tvl_usd, and symbols_any to prune noise in a single call. symbols_any matches whole symbol tokens (e.g. 'USDC' matches 'USDC' and 'ETH-USDC' but not 'TULIPAUSDC') and returns the highest-ranked pools for EACH requested symbol, so one call gives a complete per-symbol comparison; symbols with no matching pool are named in note. Set max_apy (e.g. 30) to exclude leveraged/boosted pools so genuine yields surface. Set stable_only=true when you need consistent stablecoin yield screening; this ranks by 30d mean APY first and still returns spot/base/reward components.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Filter by chain name (e.g. 'Ethereum', 'Base', 'Arbitrum'). Case-insensitive. None = all chains. | |
| limit | No | Maximum number of pools to return, sorted by APY descending. | |
| max_apy | No | Exclude pools with APY above this value (%). Default None = no upper bound. Use to filter out leveraged/boosted pools (e.g. max_apy=30) so genuine stablecoin yields surface. | |
| min_apy | No | Exclude pools with APY below this value (%). Default 0 includes all. | |
| protocols | No | Filter by DeFiLlama project slugs (e.g. ['aave-v3', 'compound-v3']). None or empty list = include all protocols. | |
| min_tvl_usd | No | Exclude pools with TVL below this threshold (USD). Default $1M filters noise. | |
| stable_only | No | When true, return only stablecoin pools and rank by 30d mean APY first to emphasize consistency over short-term spikes. | |
| symbols_any | No | Optional symbol filter. If provided, include pools whose symbol field contains at least one token from this list (case-insensitive). Use held token symbols from get_wallet_portfolio to focus results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| pools | Yes | |
| provenance | No | Source and freshness metadata for the DeFiLlama response. |
| total_matching | Yes | |
| filters_applied | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich behavioral detail beyond the readOnlyHint annotation: describes return fields, the 50-pool cap, symbols_any whole-token matching and per-symbol ranking, the note field for unmatched symbols, and the effect of stable_only and max_apy on ranking and filtering. This gives the agent a strong mental model of the tool's 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 a clear purpose, then provides dense, high-value guidance on filtering and edge cases. It is longer than average, but every sentence adds information relevant to using the tool correctly, and it maintains a logical flow from what it does to how to use specific parameters.
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 8 optional parameters, an output schema, and only a readOnlyHint annotation, the description fully compensates: it covers use cases, parameter interpretation, edge-case behavior, and client-side filtering instructions. The tool's behavior is thoroughly specified, leaving no significant ambiguity for the agent.
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 the schema already covers all parameters, the description adds meaning beyond schema entries: it explains that symbols_any returns the highest-ranked pool per requested symbol and notes missing symbols in the note field, clarifies stable_only's ranking change, and recommends max_apy=30 to exclude leveraged pools. These details are not in the schema and materially improve parameter understanding.
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 gets DeFi yield pool rates from DeFiLlama, covers 1,000+ protocols across chains, and returns pools sorted by APY with specific fields. It includes example queries that make the purpose and scope unambiguous, and its focus on yield rates with protocol/chain filters distinguishes it from sibling tools like get_lending_rates and get_defi_positions.
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 via example questions and specific strategies like 'Call once per query unless a genuinely disjoint filter is required' and 'filter on the client side by inspecting symbol rather than re-calling'. However, it does not explicitly name alternatives or state when not to use this tool in favor of a sibling, so it falls short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_fetchHttp FetchARead-onlyInspect
Fetch a web page and extract its main text content. Useful for reading articles, documentation, and web resources. Returns cleaned text, not raw HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch (http or https only) | |
| max_chars | No | Maximum characters of extracted content to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| title | Yes | |
| content | Yes | |
| truncated | Yes | |
| content_length | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context by stating that it 'extracts main text content' and 'returns cleaned text, not raw HTML,' which sets expectations for the output. It does not disclose potential failures like JS-dependent pages or redirects, but the annotation lowers the burden.
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 two short sentences that are front-loaded with the core purpose, then provide a use case and output format. Every sentence adds value and there is no redundancy or padding.
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 two-parameter tool with an output schema, a read-only annotation, and a clear description of behavior and output format, the description is complete. The cleaned-text return behavior is explicitly stated, and schema details 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?
The schema descriptions cover 100% of the parameters, providing details on URL format and max_chars bounds/defaults. The description itself adds no extra parameter semantics beyond the schema's coverage, so 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?
The description uses a specific verb ('Fetch') and resource ('a web page') and clearly states the operation ('extract its main text content'). It also differentiates from sibling tools like web_search by focusing on fetching a given URL rather than searching, and notes the output is cleaned text, not raw HTML.
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 use cases: 'reading articles, documentation, and web resources.' However, it does not explicitly mention alternatives or when not to use this tool (e.g., 'use web_search when searching for pages'), so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_contractRead ContractARead-onlyInspect
Call any view/pure function on a smart contract and return the result. Provide the ABI fragment (JSON array) and function name. State-changing functions (payable/nonpayable) are rejected for safety. Supports historical queries via block_identifier (block number or 'latest') and optional caller_address context for msg.sender-dependent views. Calls use Teardrop's bounded RPC timeout and rate-limit retry policy.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | DEPRECATED: Positional arguments for the function call. Use 'args_json' for complex objects or Gemini compatibility. | |
| chain_id | No | Chain ID (1=Ethereum, 8453=Base) | |
| args_json | No | Optional JSON array string of positional arguments for the function call. Use this instead of 'args' for complex types or when calling via Google/Gemini. | |
| abi_fragment | Yes | JSON array containing the ABI for the function to call. Supports both modern (stateMutability: view/pure) and legacy (constant: true) formats. Only read-only functions are allowed. | |
| function_name | Yes | Name of the function to call | |
| caller_address | No | Optional EVM address to supply as msg.sender for caller-dependent view functions. This does not sign or submit a transaction. | |
| block_identifier | No | Block number, block hash, or 'latest'/'earliest'/'pending' | latest |
| contract_address | Yes | Contract address (0x…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | |
| chain_id | Yes | |
| function_name | Yes | |
| caller_address | No | |
| block_identifier | Yes | |
| contract_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that state-changing functions are rejected, that historical queries are supported, and that calls use a bounded RPC timeout and rate-limit retry policy. This adds meaningful behavioral context about safety and reliability that is not available 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 concise at five sentences, front-loaded with the core purpose. Each sentence adds value, covering safety, historical queries, caller context, and RPC policy. It is slightly longer than necessary but remains efficient and well-structured.
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 (8 parameters, output schema, readOnlyHint), the description covers key functional aspects: arbitrary view/pure calls, ABI requirements, rejection of state-changing functions, historical block support, caller context, and timeout/retry behavior. It does not explain return formatting, but the output schema covers this, and not all parameter semantics are repeated, which is acceptable.
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 descriptions cover 100% of parameters, so the description adds little extra information. It mentions providing the ABI fragment and block_identifier, but these are already well-documented in the schema. The description does not clarify ambiguous parameters like args vs args_json, so it remains at the baseline for high 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 clearly states the tool calls any view/pure function on a smart contract and returns the result. It specifically distinguishes itself by noting state-changing functions are rejected, making it distinct from sibling tools that perform specific reads or transactions.
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 clear context by stating it is for view/pure functions, explicitly excluding state-changing functions for safety. It also mentions support for historical queries and caller_address, which guides when to use these features. However, it does not explicitly mention when to prefer sibling tools like get_erc20_balance for specific token reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_predictionsRecord PredictionsARead-onlyInspect
Record a complete structured prediction document for downstream evaluation. Call once with the exact machine-readable prediction; provide the human-readable report separately.
| Name | Required | Description | Default |
|---|---|---|---|
| predictions | Yes | The complete structured prediction document for this run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| recorded | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'record,' which strongly implies a write operation, while the annotation readOnlyHint=true declares the operation as read-only. This is a direct contradiction. No other behavioral context is provided.
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?
Two sentences, front-loaded with the purpose, then usage instruction. Every word is necessary, with 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?
The description gives basic usage but leaves the side-effect ambiguity unresolved due to the contradiction between 'record' and readOnlyHint. A single nested object parameter and an output schema exist, yet the description fails to clarify whether or how data is persisted, making it incomplete.
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 already describes the 'predictions' parameter with 100% coverage. The description adds meaningful format guidance: 'exact machine-readable prediction' and separating the human-readable report, which enriches the parameter's intended use 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 uses a specific verb ('record') with a clear object ('complete structured prediction document') and purpose ('for downstream evaluation'). It clearly distinguishes this tool from siblings, which are mostly read-only getters or calculations.
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 usage instructions: call once with the exact machine-readable prediction, and provide the human-readable report separately. It does not name alternative tools, but no sibling appears to serve the same recording function, making context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_ensResolve EnsARead-onlyInspect
Resolve an ENS name (e.g. 'vitalik.eth') to an Ethereum address, or pass an Ethereum address for reverse lookup to its primary ENS name. Also returns the avatar text record when available. Mainnet only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ENS name (e.g. 'vitalik.eth') to resolve to an address, or an Ethereum address (0x…) for reverse lookup to a primary ENS name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| error | No | |
| avatar | No | |
| address | Yes | |
| resolved | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by disclosing additional behavior: reverse lookup capability, avatar text record availability, and the mainnet-only restriction. It does not contradict annotations and goes beyond basic safety hints, but stops short of describing edge cases like unregistered names or error handling.
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?
Two sentences, each with clear purpose. The core resolution is stated first, followed by the avatar addition and network constraint. No fluff or repetition; it is both concise and well-structured.
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 tool with an output schema, the description covers all essential aspects: the input formats (name/address), the output direction (address/primary name), the avatar record, and the network (mainnet). The presence of an output schema means return value details are already provided, so the description is fully sufficient.
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 parameter is already fully documented in the schema. The description essentially restates the same info ('ENS name' or 'Ethereum address') without adding new semantics. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('resolve') and clearly defines the resource (ENS names/addresses). It covers both forward and reverse resolution, which distinguishes it from sibling tools like balance checkers and transaction fetchers. The mention of avatar records and mainnet-only adds specificity without ambiguity.
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 its use case by explaining exactly what it does, and the 'Mainnet only' constraint provides a clear exclusion. However, there is no explicit 'use this when' statement or mention of alternatives, though no sibling tool directly overlaps with ENS resolution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_opportunityValidate OpportunityARead-onlyInspect
Assess the economic sustainability and liquidity risk of a DeFi yield pool using DeFiLlama metrics, historical TVL drawdown charts, and token price stability. Returns an agent-branchable verdict (sustainable, caution, unsustainable, or insufficient_data) and structured risk factors.
| Name | Required | Description | Default |
|---|---|---|---|
| pool_id | Yes | DeFiLlama yield pool UUID (e.g. '747c1d2a-c668-4682-b9f9-296708a3dd90'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| chain | No | |
| symbol | No | |
| pool_id | Yes | |
| project | No | |
| verdict | Yes | |
| provenance | Yes | |
| risk_factors | No | |
| data_complete | No | |
| yield_summary | No | |
| partial_errors | No | |
| liquidity_summary | No | |
| sustainability_reason | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that it uses DeFiLlama metrics, historical TVL drawdown charts, and token price stability, and that it returns one of four verdicts. This gives useful behavioral context without contradicting the annotation.
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 two sentences long, front-loads the action, and includes the key output contract. Every sentence contributes necessary information 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?
With one well-documented parameter, an output schema, and readOnlyHint annotation, the description is complete enough for an agent to select and invoke the tool correctly. It covers the input, the analytical approach, and the expected verdict format.
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 fully documents pool_id, including an example UUID, so schema coverage is high. The description adds no additional parameter-level detail, which is acceptable given the baseline of 3 for high 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 uses a specific verb ('Assess') with a clear resource ('economic sustainability and liquidity risk of a DeFi yield pool') and states the output as a branchable verdict plus structured risk factors. It is distinct enough from siblings like assess_counterparty_risk and get_yield_rates.
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 the context clear: use this tool when a DeFi yield pool needs sustainability and liquidity-risk assessment. It does not explicitly name alternatives or state when not to use it, but the intended scenario is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchWeb SearchARead-onlyInspect
Real-time web search via Tavily. Use for current events, fact-checking, and research. Set search_depth='advanced' for complex research queries (higher quality, higher cost). Set topic='news' for recent headlines or 'finance' for market information.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| topic | No | Search topic: 'general' for web, 'news' for headlines, 'finance' for markets | general |
| num_results | No | Number of web search results to return (1–20, default 5). | |
| search_depth | No | 'basic' for fast results, 'advanced' for thorough research (higher cost) | basic |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| query | Yes | |
| results | Yes | |
| num_results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate that. It adds valuable behavioral context by noting that search_depth='advanced' incurs higher cost and that topic='news' or 'finance' narrows results, insights not present in the annotations. This goes beyond the structured data, though it does not mention potential rate limits or pagination, which could be useful.
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, front-loaded with the primary purpose, followed by parameter guidance. Every sentence adds distinct value, with no filler or redundancy. It is appropriately concise while covering purpose, use cases, and parameter nuances.
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 moderate complexity, full schema coverage, and read-only annotation, the description supplies all essential information: what it does, when to use it, and how to tailor parameters. The presence of an output schema means return value details are unnecessary, so the description is fully sufficient for agent selection and 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 coverage is 100%, so the baseline is 3, but the description enriches parameter meaning by linking search_depth to complex research queries and cost, and topic to specific content domains (news, finance). These usage-oriented hints help the agent make better parameter choices than the bare schema descriptions 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 identifies the tool as a real-time web search via Tavily, stating its purpose for current events, fact-checking, and research. This distinguishes it from the sibling tools, which are specific data lookups or calculations, leaving no ambiguity about what this 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 provides clear use cases (current events, fact-checking, research) and practical guidance on when to adjust parameters (search_depth for complex queries, topic for news/finance). However, it does not explicitly compare with alternatives like http_fetch or delegate_to_agent, so it lacks explicit exclusionary guidance, earning a 4 rather than a 5.
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.
1 tool update
- Changed
discover_agents2 fields changed- added
Output schema / properties / registration_benefits_urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Machine-readable registration benefits, requirements, and non-guarantees.", + "title": "Registration Benefits Url" +} - added
Output schema / properties / registration_endpointAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Endpoint where an organization can publish its own A2A endpoint.", + "title": "Registration Endpoint" +}
2 tool updates
- Added
assess_counterparty_risk - Added
validate_opportunity
2 tool updates
- Changed
delegate_to_agent1 field changed- added
Output schema / properties / error_typeAdded value: +{ + "anyOf": [ + { + "const": "advertised_price_exceeds_cap", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error type for delegation failures that require planner recovery.", + "title": "Error Type" +}
- Changed
discover_agents3 fields changed- changed
Input schema / properties / q / descriptionPrevious value: -"Optional search across agent name and organization slug"New value: +"Optional search across agent name, organization slug, or published tool name" - added
Output schema / $defs / DiscoveredAgent / properties / registered_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "UTC timestamp when the organization first registered its A2A endpoint", + "title": "Registered At" +} - added
Output schema / $defs / DiscoveredAgent / properties / tool_namesAdded value: +{ + "description": "Names of up to 20 active published tools exposed by the agent organization", + "items": { + "type": "string" + }, + "title": "Tool Names", + "type": "array" +}
1 tool update
- Added
discover_agents
1 tool update
- Added
record_predictions
3 tool updates
- Added
get_wallet_approvals - Added
get_wallet_history - Added
get_wallet_positions
27 tool updates
- Changed
calculate3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / expression / titleAdded value: +"Expression" - added
Input schema / titleAdded value: +"mcp_calculateArguments"
- Changed
convert_currency5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / amount / titleAdded value: +"Amount" - added
Input schema / properties / from_currency / titleAdded value: +"From Currency" - added
Input schema / properties / to_currency / titleAdded value: +"To Currency" - added
Input schema / titleAdded value: +"mcp_convert_currencyArguments"
- Changed
count_text_stats3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / text / titleAdded value: +"Text" - added
Input schema / titleAdded value: +"mcp_count_text_statsArguments"
- Changed
decode_transaction5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / abi_json / titleAdded value: +"Abi Json" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / tx_hash / titleAdded value: +"Tx Hash" - added
Input schema / titleAdded value: +"mcp_decode_transactionArguments"
- Changed
delegate_to_agent5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / agent_url / titleAdded value: +"Agent Url" - added
Input schema / properties / task_description / titleAdded value: +"Task Description" - added
Input schema / properties / task_type / titleAdded value: +"Task Type" - added
Input schema / titleAdded value: +"mcp_delegate_to_agentArguments"
- Changed
get_block4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / block_identifier / titleAdded value: +"Block Identifier" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / titleAdded value: +"mcp_get_blockArguments"
- Changed
get_chain_metrics12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chains / titleAdded value: +"Chains" - added
Input schema / properties / days / titleAdded value: +"Days" - added
Input schema / properties / limit / titleAdded value: +"Limit" - added
Input schema / titleAdded value: +"mcp_get_chain_metricsArguments" - added
Output schema / $defsAdded value: +{ + "ChainMetricsEntry": { + "properties": { + "chain": { + "title": "Chain", + "type": "string" + }, + "chain_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Chain Id" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "error_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Type" + }, + "fees_24h_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fees 24H Usd" + }, + "fees_30d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fees 30D Change Pct" + }, + "fees_30d_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fees 30D Usd" + }, + "fees_7d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fees 7D Change Pct" + }, + "fees_7d_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fees 7D Usd" + }, + "token_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Token Symbol" + }, + "tvl_30d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Tvl 30D Change Pct" + }, + "tvl_7d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Tvl 7D Change Pct" + }, + "tvl_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Tvl Usd" + } + }, + "required": [ + "chain", + "chain_id", + "token_symbol", + "tvl_usd", + "tvl_7d_change_pct", + "tvl_30d_change_pct", + "fees_24h_usd", + "fees_7d_usd", + "fees_30d_usd", + "fees_7d_change_pct", + "fees_30d_change_pct" + ], + "title": "ChainMetricsEntry", + "type": "object" + }, + "DataProvenance": { + "description": "Machine-readable source and freshness metadata for a tool response.", + "properties": { + "cache_age_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Age Seconds" + }, + "cache_hit": { + "default": false, + "title": "Cache Hit", + "type": "boolean" + }, + "cache_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Ttl Seconds" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "retrieved_at": { + "title": "Retrieved At", + "type": "string" + }, + "source_fetched_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Fetched At" + }, + "source_urls": { + "items": { + "type": "string" + }, + "title": "Source Urls", + "type": "array" + } + }, + "required": [ + "provider", + "retrieved_at" + ], + "title": "DataProvenance", + "type": "object" + } +} - added
Output schema / properties / chains / items / $refAdded value: +"#/$defs/ChainMetricsEntry" - removed
Output schema / properties / chains / items / propertiesRemoved value: -{ - "chain": { - "title": "Chain", - "type": "string" - }, - "chain_id": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Chain Id" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Error" - }, - "error_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Error Type" - }, - "fees_24h_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fees 24H Usd" - }, - "fees_30d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fees 30D Change Pct" - }, - "fees_30d_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fees 30D Usd" - }, - "fees_7d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fees 7D Change Pct" - }, - "fees_7d_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Fees 7D Usd" - }, - "token_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Token Symbol" - }, - "tvl_30d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Tvl 30D Change Pct" - }, - "tvl_7d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Tvl 7D Change Pct" - }, - "tvl_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Tvl Usd" - } -} - removed
Output schema / properties / chains / items / requiredRemoved value: -[ - "chain", - "chain_id", - "token_symbol", - "tvl_usd", - "tvl_7d_change_pct", - "tvl_30d_change_pct", - "fees_24h_usd", - "fees_7d_usd", - "fees_30d_usd", - "fees_7d_change_pct", - "fees_30d_change_pct" -] - removed
Output schema / properties / chains / items / titleRemoved value: -"ChainMetricsEntry" - removed
Output schema / properties / chains / items / typeRemoved value: -"object" - changed
Output schema / properties / provenance / anyOfPrevious value: -[ - { - "description": "Machine-readable source and freshness metadata for a tool response.", - "properties": { - "cache_age_seconds": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cache Age Seconds" - }, - "cache_hit": { - "default": false, - "title": "Cache Hit", - "type": "boolean" - }, - "cache_ttl_seconds": { - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cache Ttl Seconds" - }, - "provider": { - "title": "Provider", - "type": "string" - }, - "retrieved_at": { - "title": "Retrieved At", - "type": "string" - }, - "source_fetched_at": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Source Fetched At" - }, - "source_urls": { - "items": { - "type": "string" - }, - "title": "Source Urls", - "type": "array" - } - }, - "required": [ - "provider", - "retrieved_at" - ], - "title": "DataProvenance", - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/DataProvenance" + }, + { + "type": "null" + } +]
- Changed
get_datetime3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / format / titleAdded value: +"Format" - added
Input schema / titleAdded value: +"mcp_get_datetimeArguments"
- Changed
get_defi_positions22 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / wallet_address / titleAdded value: +"Wallet Address" - added
Input schema / titleAdded value: +"mcp_get_defi_positionsArguments" - added
Output schema / $defsAdded value: +{ + "AavePosition": { + "properties": { + "available_borrows_usd": { + "title": "Available Borrows Usd", + "type": "number" + }, + "health_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Health Factor" + }, + "health_factor_status": { + "title": "Health Factor Status", + "type": "string" + }, + "liquidation_threshold_bps": { + "title": "Liquidation Threshold Bps", + "type": "integer" + }, + "ltv_bps": { + "title": "Ltv Bps", + "type": "integer" + }, + "reserves": { + "items": { + "$ref": "#/$defs/AaveReservePosition" + }, + "title": "Reserves", + "type": "array" + }, + "total_collateral_usd": { + "title": "Total Collateral Usd", + "type": "number" + }, + "total_debt_usd": { + "title": "Total Debt Usd", + "type": "number" + } + }, + "required": [ + "total_collateral_usd", + "total_debt_usd", + "available_borrows_usd", + "ltv_bps", + "liquidation_threshold_bps", + "health_factor", + "health_factor_status", + "reserves" + ], + "title": "AavePosition", + "type": "object" + }, + "AaveReservePosition": { + "properties": { + "asset_address": { + "title": "Asset Address", + "type": "string" + }, + "stable_debt_amount": { + "title": "Stable Debt Amount", + "type": "string" + }, + "supplied_amount": { + "title": "Supplied Amount", + "type": "string" + }, + "symbol": { + "title": "Symbol", + "type": "string" + }, + "usage_as_collateral": { + "title": "Usage As Collateral", + "type": "boolean" + }, + "variable_debt_amount": { + "title": "Variable Debt Amount", + "type": "string" + } + }, + "required": [ + "symbol", + "asset_address", + "supplied_amount", + "variable_debt_amount", + "stable_debt_amount", + "usage_as_collateral" + ], + "title": "AaveReservePosition", + "type": "object" + }, + "CompoundCollateral": { + "properties": { + "amount": { + "title": "Amount", + "type": "string" + }, + "asset_address": { + "title": "Asset Address", + "type": "string" + }, + "borrow_collateral_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Borrow Collateral Factor" + }, + "liquidate_collateral_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Liquidate Collateral Factor" + } + }, + "required": [ + "asset_address", + "amount" + ], + "title": "CompoundCollateral", + "type": "object" + }, + "CompoundMarketPosition": { + "properties": { + "base_asset_address": { + "title": "Base Asset Address", + "type": "string" + }, + "base_asset_symbol": { + "title": "Base Asset Symbol", + "type": "string" + }, + "borrowed_amount": { + "title": "Borrowed Amount", + "type": "string" + }, + "collateral": { + "items": { + "$ref": "#/$defs/CompoundCollateral" + }, + "title": "Collateral", + "type": "array" + }, + "is_liquidatable": { + "title": "Is Liquidatable", + "type": "boolean" + }, + "market_address": { + "title": "Market Address", + "type": "string" + }, + "market_name": { + "title": "Market Name", + "type": "string" + }, + "supplied_amount": { + "title": "Supplied Amount", + "type": "string" + } + }, + "required": [ + "market_name", + "market_address", + "base_asset_symbol", + "base_asset_address", + "supplied_amount", + "borrowed_amount", + "collateral", + "is_liquidatable" + ], + "title": "CompoundMarketPosition", + "type": "object" + }, + "LidoStakingPosition": { + "properties": { + "steth_balance": { + "title": "Steth Balance", + "type": "string" + }, + "total_steth_equivalent": { + "title": "Total Steth Equivalent", + "type": "string" + }, + "wsteth_balance": { + "title": "Wsteth Balance", + "type": "string" + }, + "wsteth_steth_equivalent": { + "title": "Wsteth Steth Equivalent", + "type": "string" + } + }, + "required": [ + "steth_balance", + "wsteth_balance", + "wsteth_steth_equivalent", + "total_steth_equivalent" + ], + "title": "LidoStakingPosition", + "type": "object" + }, + "ProtocolErrorInfo": { + "properties": { + "error": { + "title": "Error", + "type": "string" + }, + "protocol": { + "title": "Protocol", + "type": "string" + } + }, + "required": [ + "protocol", + "error" + ], + "title": "ProtocolErrorInfo", + "type": "object" + }, + "UniswapV3Position": { + "properties": { + "fee_tier_raw": { + "title": "Fee Tier Raw", + "type": "integer" + }, + "liquidity": { + "title": "Liquidity", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "tick_lower": { + "title": "Tick Lower", + "type": "integer" + }, + "tick_upper": { + "title": "Tick Upper", + "type": "integer" + }, + "token0_address": { + "title": "Token0 Address", + "type": "string" + }, + "token0_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token0 Symbol" + }, + "token1_address": { + "title": "Token1 Address", + "type": "string" + }, + "token1_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token1 Symbol" + }, + "token_id": { + "title": "Token Id", + "type": "string" + }, + "tokens_owed_0": { + "title": "Tokens Owed 0", + "type": "string" + }, + "tokens_owed_1": { + "title": "Tokens Owed 1", + "type": "string" + } + }, + "required": [ + "token_id", + "token0_address", + "token1_address", + "fee_tier_raw", + "tick_lower", + "tick_upper", + "liquidity", + "tokens_owed_0", + "tokens_owed_1", + "status" + ], + "title": "UniswapV3Position", + "type": "object" + } +} - changed
Output schema / properties / aave_v3 / anyOfPrevious value: -[ - { - "properties": { - "available_borrows_usd": { - "title": "Available Borrows Usd", - "type": "number" - }, - "health_factor": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Health Factor" - }, - "health_factor_status": { - "title": "Health Factor Status", - "type": "string" - }, - "liquidation_threshold_bps": { - "title": "Liquidation Threshold Bps", - "type": "integer" - }, - "ltv_bps": { - "title": "Ltv Bps", - "type": "integer" - }, - "reserves": { - "items": { - "properties": { - "asset_address": { - "title": "Asset Address", - "type": "string" - }, - "stable_debt_amount": { - "title": "Stable Debt Amount", - "type": "string" - }, - "supplied_amount": { - "title": "Supplied Amount", - "type": "string" - }, - "symbol": { - "title": "Symbol", - "type": "string" - }, - "usage_as_collateral": { - "title": "Usage As Collateral", - "type": "boolean" - }, - "variable_debt_amount": { - "title": "Variable Debt Amount", - "type": "string" - } - }, - "required": [ - "symbol", - "asset_address", - "supplied_amount", - "variable_debt_amount", - "stable_debt_amount", - "usage_as_collateral" - ], - "title": "AaveReservePosition", - "type": "object" - }, - "title": "Reserves", - "type": "array" - }, - "total_collateral_usd": { - "title": "Total Collateral Usd", - "type": "number" - }, - "total_debt_usd": { - "title": "Total Debt Usd", - "type": "number" - } - }, - "required": [ - "total_collateral_usd", - "total_debt_usd", - "available_borrows_usd", - "ltv_bps", - "liquidation_threshold_bps", - "health_factor", - "health_factor_status", - "reserves" - ], - "title": "AavePosition", - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/AavePosition" + }, + { + "type": "null" + } +] - added
Output schema / properties / compound_v3 / items / $refAdded value: +"#/$defs/CompoundMarketPosition" - removed
Output schema / properties / compound_v3 / items / propertiesRemoved value: -{ - "base_asset_address": { - "title": "Base Asset Address", - "type": "string" - }, - "base_asset_symbol": { - "title": "Base Asset Symbol", - "type": "string" - }, - "borrowed_amount": { - "title": "Borrowed Amount", - "type": "string" - }, - "collateral": { - "items": { - "properties": { - "amount": { - "title": "Amount", - "type": "string" - }, - "asset_address": { - "title": "Asset Address", - "type": "string" - }, - "borrow_collateral_factor": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Borrow Collateral Factor" - }, - "liquidate_collateral_factor": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Liquidate Collateral Factor" - } - }, - "required": [ - "asset_address", - "amount" - ], - "title": "CompoundCollateral", - "type": "object" - }, - "title": "Collateral", - "type": "array" - }, - "is_liquidatable": { - "title": "Is Liquidatable", - "type": "boolean" - }, - "market_address": { - "title": "Market Address", - "type": "string" - }, - "market_name": { - "title": "Market Name", - "type": "string" - }, - "supplied_amount": { - "title": "Supplied Amount", - "type": "string" - } -} - removed
Output schema / properties / compound_v3 / items / requiredRemoved value: -[ - "market_name", - "market_address", - "base_asset_symbol", - "base_asset_address", - "supplied_amount", - "borrowed_amount", - "collateral", - "is_liquidatable" -] - removed
Output schema / properties / compound_v3 / items / titleRemoved value: -"CompoundMarketPosition" - removed
Output schema / properties / compound_v3 / items / typeRemoved value: -"object" - added
Output schema / properties / errors / items / $refAdded value: +"#/$defs/ProtocolErrorInfo" - removed
Output schema / properties / errors / items / propertiesRemoved value: -{ - "error": { - "title": "Error", - "type": "string" - }, - "protocol": { - "title": "Protocol", - "type": "string" - } -} - removed
Output schema / properties / errors / items / requiredRemoved value: -[ - "protocol", - "error" -] - removed
Output schema / properties / errors / items / titleRemoved value: -"ProtocolErrorInfo" - removed
Output schema / properties / errors / items / typeRemoved value: -"object" - changed
Output schema / properties / lido_staking / anyOfPrevious value: -[ - { - "properties": { - "steth_balance": { - "title": "Steth Balance", - "type": "string" - }, - "total_steth_equivalent": { - "title": "Total Steth Equivalent", - "type": "string" - }, - "wsteth_balance": { - "title": "Wsteth Balance", - "type": "string" - }, - "wsteth_steth_equivalent": { - "title": "Wsteth Steth Equivalent", - "type": "string" - } - }, - "required": [ - "steth_balance", - "wsteth_balance", - "wsteth_steth_equivalent", - "total_steth_equivalent" - ], - "title": "LidoStakingPosition", - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/LidoStakingPosition" + }, + { + "type": "null" + } +] - added
Output schema / properties / uniswap_v3 / items / $refAdded value: +"#/$defs/UniswapV3Position" - removed
Output schema / properties / uniswap_v3 / items / propertiesRemoved value: -{ - "fee_tier_raw": { - "title": "Fee Tier Raw", - "type": "integer" - }, - "liquidity": { - "title": "Liquidity", - "type": "string" - }, - "status": { - "title": "Status", - "type": "string" - }, - "tick_lower": { - "title": "Tick Lower", - "type": "integer" - }, - "tick_upper": { - "title": "Tick Upper", - "type": "integer" - }, - "token0_address": { - "title": "Token0 Address", - "type": "string" - }, - "token0_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Token0 Symbol" - }, - "token1_address": { - "title": "Token1 Address", - "type": "string" - }, - "token1_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Token1 Symbol" - }, - "token_id": { - "title": "Token Id", - "type": "string" - }, - "tokens_owed_0": { - "title": "Tokens Owed 0", - "type": "string" - }, - "tokens_owed_1": { - "title": "Tokens Owed 1", - "type": "string" - } -} - removed
Output schema / properties / uniswap_v3 / items / requiredRemoved value: -[ - "token_id", - "token0_address", - "token1_address", - "fee_tier_raw", - "tick_lower", - "tick_upper", - "liquidity", - "tokens_owed_0", - "tokens_owed_1", - "status" -] - removed
Output schema / properties / uniswap_v3 / items / titleRemoved value: -"UniswapV3Position" - removed
Output schema / properties / uniswap_v3 / items / typeRemoved value: -"object"
- Changed
get_dex_quote12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / amount_in / titleAdded value: +"Amount In" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / token_in / titleAdded value: +"Token In" - added
Input schema / properties / token_out / titleAdded value: +"Token Out" - added
Input schema / titleAdded value: +"mcp_get_dex_quoteArguments" - added
Output schema / $defsAdded value: +{ + "TierQuote": { + "properties": { + "amount_out": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Amount Out" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "fee_tier": { + "title": "Fee Tier", + "type": "integer" + }, + "gas_estimate": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gas Estimate" + }, + "sqrt_price_x96_after": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sqrt Price X96 After" + }, + "success": { + "title": "Success", + "type": "boolean" + } + }, + "required": [ + "fee_tier", + "success" + ], + "title": "TierQuote", + "type": "object" + } +} - added
Output schema / properties / quotes_per_tier / items / $refAdded value: +"#/$defs/TierQuote" - removed
Output schema / properties / quotes_per_tier / items / propertiesRemoved value: -{ - "amount_out": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Amount Out" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Error" - }, - "fee_tier": { - "title": "Fee Tier", - "type": "integer" - }, - "gas_estimate": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Gas Estimate" - }, - "sqrt_price_x96_after": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Sqrt Price X96 After" - }, - "success": { - "title": "Success", - "type": "boolean" - } -} - removed
Output schema / properties / quotes_per_tier / items / requiredRemoved value: -[ - "fee_tier", - "success" -] - removed
Output schema / properties / quotes_per_tier / items / titleRemoved value: -"TierQuote" - removed
Output schema / properties / quotes_per_tier / items / typeRemoved value: -"object"
- Changed
get_dex_volume11 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / titleAdded value: +"Limit" - added
Input schema / properties / lookback_days / titleAdded value: +"Lookback Days" - added
Input schema / properties / protocols / titleAdded value: +"Protocols" - added
Input schema / titleAdded value: +"mcp_get_dex_volumeArguments" - added
Output schema / $defsAdded value: +{ + "DexVolumeEntry": { + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category" + }, + "chains": { + "items": { + "type": "string" + }, + "title": "Chains", + "type": "array" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "error_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Type" + }, + "protocol": { + "title": "Protocol", + "type": "string" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Slug" + }, + "volume_24h_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 24H Usd" + }, + "volume_30d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 30D Change Pct" + }, + "volume_30d_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 30D Usd" + }, + "volume_7d_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 7D Change Pct" + }, + "volume_7d_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 7D Usd" + }, + "volume_share_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume Share Pct" + } + }, + "required": [ + "protocol", + "slug", + "category", + "volume_24h_usd", + "volume_7d_usd", + "volume_30d_usd", + "volume_7d_change_pct", + "volume_30d_change_pct", + "volume_share_pct", + "chains" + ], + "title": "DexVolumeEntry", + "type": "object" + } +} - added
Output schema / properties / dexes / items / $refAdded value: +"#/$defs/DexVolumeEntry" - removed
Output schema / properties / dexes / items / propertiesRemoved value: -{ - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Category" - }, - "chains": { - "items": { - "type": "string" - }, - "title": "Chains", - "type": "array" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Error" - }, - "error_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Error Type" - }, - "protocol": { - "title": "Protocol", - "type": "string" - }, - "slug": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Slug" - }, - "volume_24h_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 24H Usd" - }, - "volume_30d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 30D Change Pct" - }, - "volume_30d_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 30D Usd" - }, - "volume_7d_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 7D Change Pct" - }, - "volume_7d_usd": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 7D Usd" - }, - "volume_share_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume Share Pct" - } -} - removed
Output schema / properties / dexes / items / requiredRemoved value: -[ - "protocol", - "slug", - "category", - "volume_24h_usd", - "volume_7d_usd", - "volume_30d_usd", - "volume_7d_change_pct", - "volume_30d_change_pct", - "volume_share_pct", - "chains" -] - removed
Output schema / properties / dexes / items / titleRemoved value: -"DexVolumeEntry" - removed
Output schema / properties / dexes / items / typeRemoved value: -"object"
- Changed
get_erc20_balance5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / token_address / titleAdded value: +"Token Address" - added
Input schema / properties / wallet_address / titleAdded value: +"Wallet Address" - added
Input schema / titleAdded value: +"mcp_get_erc20_balanceArguments"
- Changed
get_eth_balance4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / address / titleAdded value: +"Address" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / titleAdded value: +"mcp_get_eth_balanceArguments"
- Changed
get_gas_price4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / include_usd_estimate / titleAdded value: +"Include Usd Estimate" - added
Input schema / titleAdded value: +"mcp_get_gas_priceArguments"
- Changed
get_lending_rates11 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / assets / titleAdded value: +"Assets" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / protocol / titleAdded value: +"Protocol" - added
Input schema / titleAdded value: +"mcp_get_lending_ratesArguments" - added
Output schema / $defsAdded value: +{ + "LendingRateEntry": { + "properties": { + "asset_symbol": { + "title": "Asset Symbol", + "type": "string" + }, + "borrow_apy_pct": { + "title": "Borrow Apy Pct", + "type": "number" + }, + "chain_id": { + "title": "Chain Id", + "type": "integer" + }, + "market_name": { + "title": "Market Name", + "type": "string" + }, + "protocol": { + "enum": [ + "aave-v3", + "compound-v3" + ], + "title": "Protocol", + "type": "string" + }, + "source": { + "const": "on-chain", + "default": "on-chain", + "title": "Source", + "type": "string" + }, + "supply_apy_pct": { + "title": "Supply Apy Pct", + "type": "number" + }, + "utilization_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Utilization Pct" + } + }, + "required": [ + "protocol", + "chain_id", + "market_name", + "asset_symbol", + "supply_apy_pct", + "borrow_apy_pct" + ], + "title": "LendingRateEntry", + "type": "object" + } +} - added
Output schema / properties / rates / items / $refAdded value: +"#/$defs/LendingRateEntry" - removed
Output schema / properties / rates / items / propertiesRemoved value: -{ - "asset_symbol": { - "title": "Asset Symbol", - "type": "string" - }, - "borrow_apy_pct": { - "title": "Borrow Apy Pct", - "type": "number" - }, - "chain_id": { - "title": "Chain Id", - "type": "integer" - }, - "market_name": { - "title": "Market Name", - "type": "string" - }, - "protocol": { - "enum": [ - "aave-v3", - "compound-v3" - ], - "title": "Protocol", - "type": "string" - }, - "source": { - "const": "on-chain", - "default": "on-chain", - "title": "Source", - "type": "string" - }, - "supply_apy_pct": { - "title": "Supply Apy Pct", - "type": "number" - }, - "utilization_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Utilization Pct" - } -} - removed
Output schema / properties / rates / items / requiredRemoved value: -[ - "protocol", - "chain_id", - "market_name", - "asset_symbol", - "supply_apy_pct", - "borrow_apy_pct" -] - removed
Output schema / properties / rates / items / titleRemoved value: -"LendingRateEntry" - removed
Output schema / properties / rates / items / typeRemoved value: -"object"
- Changed
get_liquidation_risk15 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / wallet_addresses / titleAdded value: +"Wallet Addresses" - added
Input schema / titleAdded value: +"mcp_get_liquidation_riskArguments" - added
Output schema / $defsAdded value: +{ + "AaveRisk": { + "properties": { + "health_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Health Factor" + }, + "liquidation_threshold_bps": { + "title": "Liquidation Threshold Bps", + "type": "integer" + }, + "ltv_bps": { + "title": "Ltv Bps", + "type": "integer" + }, + "risk_tier": { + "title": "Risk Tier", + "type": "string" + }, + "total_collateral_usd": { + "title": "Total Collateral Usd", + "type": "number" + }, + "total_debt_usd": { + "title": "Total Debt Usd", + "type": "number" + } + }, + "required": [ + "health_factor", + "risk_tier", + "total_collateral_usd", + "total_debt_usd", + "liquidation_threshold_bps", + "ltv_bps" + ], + "title": "AaveRisk", + "type": "object" + }, + "CompoundRisk": { + "properties": { + "base_asset_symbol": { + "title": "Base Asset Symbol", + "type": "string" + }, + "borrow_balance_raw": { + "title": "Borrow Balance Raw", + "type": "string" + }, + "is_liquidatable": { + "title": "Is Liquidatable", + "type": "boolean" + }, + "market_address": { + "title": "Market Address", + "type": "string" + }, + "market_name": { + "title": "Market Name", + "type": "string" + }, + "risk_tier": { + "title": "Risk Tier", + "type": "string" + } + }, + "required": [ + "market_name", + "market_address", + "base_asset_symbol", + "is_liquidatable", + "borrow_balance_raw", + "risk_tier" + ], + "title": "CompoundRisk", + "type": "object" + }, + "ProtocolErrorInfo": { + "properties": { + "error": { + "title": "Error", + "type": "string" + }, + "protocol": { + "title": "Protocol", + "type": "string" + } + }, + "required": [ + "protocol", + "error" + ], + "title": "ProtocolErrorInfo", + "type": "object" + }, + "RiskSummary": { + "properties": { + "caution_count": { + "title": "Caution Count", + "type": "integer" + }, + "critical_count": { + "title": "Critical Count", + "type": "integer" + }, + "healthy_count": { + "title": "Healthy Count", + "type": "integer" + }, + "liquidatable_count": { + "title": "Liquidatable Count", + "type": "integer" + }, + "no_debt_count": { + "title": "No Debt Count", + "type": "integer" + }, + "total_wallets": { + "title": "Total Wallets", + "type": "integer" + }, + "warning_count": { + "title": "Warning Count", + "type": "integer" + } + }, + "required": [ + "total_wallets", + "liquidatable_count", + "critical_count", + "warning_count", + "caution_count", + "healthy_count", + "no_debt_count" + ], + "title": "RiskSummary", + "type": "object" + }, + "WalletRiskResult": { + "properties": { + "aave": { + "anyOf": [ + { + "$ref": "#/$defs/AaveRisk" + }, + { + "type": "null" + } + ], + "default": null + }, + "chain_id": { + "title": "Chain Id", + "type": "integer" + }, + "compound": { + "items": { + "$ref": "#/$defs/CompoundRisk" + }, + "title": "Compound", + "type": "array" + }, + "errors": { + "items": { + "$ref": "#/$defs/ProtocolErrorInfo" + }, + "title": "Errors", + "type": "array" + }, + "overall_tier": { + "title": "Overall Tier", + "type": "string" + }, + "wallet_address": { + "title": "Wallet Address", + "type": "string" + } + }, + "required": [ + "wallet_address", + "chain_id", + "overall_tier" + ], + "title": "WalletRiskResult", + "type": "object" + } +} - added
Output schema / properties / results / items / $refAdded value: +"#/$defs/WalletRiskResult" - removed
Output schema / properties / results / items / propertiesRemoved value: -{ - "aave": { - "anyOf": [ - { - "properties": { - "health_factor": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Health Factor" - }, - "liquidation_threshold_bps": { - "title": "Liquidation Threshold Bps", - "type": "integer" - }, - "ltv_bps": { - "title": "Ltv Bps", - "type": "integer" - }, - "risk_tier": { - "title": "Risk Tier", - "type": "string" - }, - "total_collateral_usd": { - "title": "Total Collateral Usd", - "type": "number" - }, - "total_debt_usd": { - "title": "Total Debt Usd", - "type": "number" - } - }, - "required": [ - "health_factor", - "risk_tier", - "total_collateral_usd", - "total_debt_usd", - "liquidation_threshold_bps", - "ltv_bps" - ], - "title": "AaveRisk", - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "chain_id": { - "title": "Chain Id", - "type": "integer" - }, - "compound": { - "items": { - "properties": { - "base_asset_symbol": { - "title": "Base Asset Symbol", - "type": "string" - }, - "borrow_balance_raw": { - "title": "Borrow Balance Raw", - "type": "string" - }, - "is_liquidatable": { - "title": "Is Liquidatable", - "type": "boolean" - }, - "market_address": { - "title": "Market Address", - "type": "string" - }, - "market_name": { - "title": "Market Name", - "type": "string" - }, - "risk_tier": { - "title": "Risk Tier", - "type": "string" - } - }, - "required": [ - "market_name", - "market_address", - "base_asset_symbol", - "is_liquidatable", - "borrow_balance_raw", - "risk_tier" - ], - "title": "CompoundRisk", - "type": "object" - }, - "title": "Compound", - "type": "array" - }, - "errors": { - "items": { - "properties": { - "error": { - "title": "Error", - "type": "string" - }, - "protocol": { - "title": "Protocol", - "type": "string" - } - }, - "required": [ - "protocol", - "error" - ], - "title": "ProtocolErrorInfo", - "type": "object" - }, - "title": "Errors", - "type": "array" - }, - "overall_tier": { - "title": "Overall Tier", - "type": "string" - }, - "wallet_address": { - "title": "Wallet Address", - "type": "string" - } -} - removed
Output schema / properties / results / items / requiredRemoved value: -[ - "wallet_address", - "chain_id", - "overall_tier" -] - removed
Output schema / properties / results / items / titleRemoved value: -"WalletRiskResult" - removed
Output schema / properties / results / items / typeRemoved value: -"object" - added
Output schema / properties / summary / $refAdded value: +"#/$defs/RiskSummary" - removed
Output schema / properties / summary / propertiesRemoved value: -{ - "caution_count": { - "title": "Caution Count", - "type": "integer" - }, - "critical_count": { - "title": "Critical Count", - "type": "integer" - }, - "healthy_count": { - "title": "Healthy Count", - "type": "integer" - }, - "liquidatable_count": { - "title": "Liquidatable Count", - "type": "integer" - }, - "no_debt_count": { - "title": "No Debt Count", - "type": "integer" - }, - "total_wallets": { - "title": "Total Wallets", - "type": "integer" - }, - "warning_count": { - "title": "Warning Count", - "type": "integer" - } -} - removed
Output schema / properties / summary / requiredRemoved value: -[ - "total_wallets", - "liquidatable_count", - "critical_count", - "warning_count", - "caution_count", - "healthy_count", - "no_debt_count" -] - removed
Output schema / properties / summary / titleRemoved value: -"RiskSummary" - removed
Output schema / properties / summary / typeRemoved value: -"object"
- Changed
get_protocol_tvl6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / days / titleAdded value: +"Days" - added
Input schema / properties / include_historical / titleAdded value: +"Include Historical" - added
Input schema / properties / protocol / titleAdded value: +"Protocol" - added
Input schema / properties / protocols / titleAdded value: +"Protocols" - added
Input schema / titleAdded value: +"mcp_get_protocol_tvlArguments"
- Changed
get_token_approvals17 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / spenders / titleAdded value: +"Spenders" - added
Input schema / properties / tokens / titleAdded value: +"Tokens" - added
Input schema / properties / wallet_address / titleAdded value: +"Wallet Address" - added
Input schema / titleAdded value: +"mcp_get_token_approvalsArguments" - added
Output schema / $defsAdded value: +{ + "ApprovalEntry": { + "properties": { + "allowance_formatted": { + "title": "Allowance Formatted", + "type": "string" + }, + "allowance_raw": { + "title": "Allowance Raw", + "type": "string" + }, + "is_permit2": { + "title": "Is Permit2", + "type": "boolean" + }, + "is_unlimited": { + "title": "Is Unlimited", + "type": "boolean" + }, + "risk_level": { + "enum": [ + "low", + "medium", + "high" + ], + "title": "Risk Level", + "type": "string" + }, + "spender_address": { + "title": "Spender Address", + "type": "string" + }, + "spender_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Spender Name" + }, + "token_address": { + "title": "Token Address", + "type": "string" + }, + "token_symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Token Symbol" + } + }, + "required": [ + "token_symbol", + "token_address", + "spender_name", + "spender_address", + "allowance_raw", + "allowance_formatted", + "is_unlimited", + "is_permit2", + "risk_level" + ], + "title": "ApprovalEntry", + "type": "object" + }, + "RiskSummary": { + "properties": { + "high_risk_approvals": { + "title": "High Risk Approvals", + "type": "integer" + }, + "total_approvals": { + "title": "Total Approvals", + "type": "integer" + }, + "unknown_spenders": { + "title": "Unknown Spenders", + "type": "integer" + }, + "unlimited_approvals": { + "title": "Unlimited Approvals", + "type": "integer" + } + }, + "required": [ + "total_approvals", + "unlimited_approvals", + "high_risk_approvals", + "unknown_spenders" + ], + "title": "RiskSummary", + "type": "object" + } +} - added
Output schema / properties / approvals / items / $refAdded value: +"#/$defs/ApprovalEntry" - removed
Output schema / properties / approvals / items / propertiesRemoved value: -{ - "allowance_formatted": { - "title": "Allowance Formatted", - "type": "string" - }, - "allowance_raw": { - "title": "Allowance Raw", - "type": "string" - }, - "is_permit2": { - "title": "Is Permit2", - "type": "boolean" - }, - "is_unlimited": { - "title": "Is Unlimited", - "type": "boolean" - }, - "risk_level": { - "enum": [ - "low", - "medium", - "high" - ], - "title": "Risk Level", - "type": "string" - }, - "spender_address": { - "title": "Spender Address", - "type": "string" - }, - "spender_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Spender Name" - }, - "token_address": { - "title": "Token Address", - "type": "string" - }, - "token_symbol": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Token Symbol" - } -} - removed
Output schema / properties / approvals / items / requiredRemoved value: -[ - "token_symbol", - "token_address", - "spender_name", - "spender_address", - "allowance_raw", - "allowance_formatted", - "is_unlimited", - "is_permit2", - "risk_level" -] - removed
Output schema / properties / approvals / items / titleRemoved value: -"ApprovalEntry" - removed
Output schema / properties / approvals / items / typeRemoved value: -"object" - added
Output schema / properties / risk_summary / $refAdded value: +"#/$defs/RiskSummary" - removed
Output schema / properties / risk_summary / propertiesRemoved value: -{ - "high_risk_approvals": { - "title": "High Risk Approvals", - "type": "integer" - }, - "total_approvals": { - "title": "Total Approvals", - "type": "integer" - }, - "unknown_spenders": { - "title": "Unknown Spenders", - "type": "integer" - }, - "unlimited_approvals": { - "title": "Unlimited Approvals", - "type": "integer" - } -} - removed
Output schema / properties / risk_summary / requiredRemoved value: -[ - "total_approvals", - "unlimited_approvals", - "high_risk_approvals", - "unknown_spenders" -] - removed
Output schema / properties / risk_summary / titleRemoved value: -"RiskSummary" - removed
Output schema / properties / risk_summary / typeRemoved value: -"object"
- Changed
get_token_price10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / tokens / titleAdded value: +"Tokens" - added
Input schema / properties / vs_currency / titleAdded value: +"Vs Currency" - added
Input schema / titleAdded value: +"mcp_get_token_priceArguments" - added
Output schema / $defsAdded value: +{ + "TokenPriceEntry": { + "properties": { + "change_24h_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Change 24H Pct" + }, + "fully_diluted_valuation": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fully Diluted Valuation" + }, + "id": { + "title": "Id", + "type": "string" + }, + "market_cap": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Market Cap" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price" + }, + "symbol": { + "title": "Symbol", + "type": "string" + }, + "volume_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Volume 24H" + } + }, + "required": [ + "id", + "symbol", + "price", + "market_cap", + "volume_24h", + "change_24h_pct" + ], + "title": "TokenPriceEntry", + "type": "object" + } +} - added
Output schema / properties / prices / items / $refAdded value: +"#/$defs/TokenPriceEntry" - removed
Output schema / properties / prices / items / propertiesRemoved value: -{ - "change_24h_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Change 24H Pct" - }, - "fully_diluted_valuation": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Fully Diluted Valuation" - }, - "id": { - "title": "Id", - "type": "string" - }, - "market_cap": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Market Cap" - }, - "price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price" - }, - "symbol": { - "title": "Symbol", - "type": "string" - }, - "volume_24h": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Volume 24H" - } -} - removed
Output schema / properties / prices / items / requiredRemoved value: -[ - "id", - "symbol", - "price", - "market_cap", - "volume_24h", - "change_24h_pct" -] - removed
Output schema / properties / prices / items / titleRemoved value: -"TokenPriceEntry" - removed
Output schema / properties / prices / items / typeRemoved value: -"object"
- Changed
get_token_price_historical12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / days / titleAdded value: +"Days" - added
Input schema / properties / stats_only / titleAdded value: +"Stats Only" - added
Input schema / properties / tokens / titleAdded value: +"Tokens" - added
Input schema / properties / vs_currency / titleAdded value: +"Vs Currency" - added
Input schema / titleAdded value: +"mcp_get_token_price_historicalArguments" - added
Output schema / $defsAdded value: +{ + "DailyPricePoint": { + "properties": { + "date": { + "title": "Date", + "type": "string" + }, + "price": { + "title": "Price", + "type": "number" + } + }, + "required": [ + "date", + "price" + ], + "title": "DailyPricePoint", + "type": "object" + }, + "TokenHistoricalEntry": { + "properties": { + "daily_prices": { + "items": { + "$ref": "#/$defs/DailyPricePoint" + }, + "title": "Daily Prices", + "type": "array" + }, + "dca_baseline_90d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Mean of weekly daily-close samples from the preceding 90 UTC days, in vs_currency.", + "title": "Dca Baseline 90D" + }, + "dca_baseline_90d_partial": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "True when the DCA baseline uses incomplete 90-day history; null when unavailable.", + "title": "Dca Baseline 90D Partial" + }, + "high_30d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Maximum raw price observation in the trailing 30 UTC days, in vs_currency.", + "title": "High 30D" + }, + "id": { + "title": "Id", + "type": "string" + }, + "price_change_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price Change Pct" + }, + "price_end": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price End" + }, + "price_high": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price High" + }, + "price_low": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price Low" + }, + "price_start": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Price Start" + }, + "std_30d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Population standard deviation of trailing 30-day simple daily returns, as a decimal.", + "title": "Std 30D" + }, + "symbol": { + "title": "Symbol", + "type": "string" + } + }, + "required": [ + "id", + "symbol", + "price_start", + "price_end", + "price_change_pct", + "price_high", + "price_low", + "daily_prices" + ], + "title": "TokenHistoricalEntry", + "type": "object" + } +} - added
Output schema / properties / tokens / items / $refAdded value: +"#/$defs/TokenHistoricalEntry" - removed
Output schema / properties / tokens / items / propertiesRemoved value: -{ - "daily_prices": { - "items": { - "properties": { - "date": { - "title": "Date", - "type": "string" - }, - "price": { - "title": "Price", - "type": "number" - } - }, - "required": [ - "date", - "price" - ], - "title": "DailyPricePoint", - "type": "object" - }, - "title": "Daily Prices", - "type": "array" - }, - "dca_baseline_90d": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Mean of weekly daily-close samples from the preceding 90 UTC days, in vs_currency.", - "title": "Dca Baseline 90D" - }, - "dca_baseline_90d_partial": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "True when the DCA baseline uses incomplete 90-day history; null when unavailable.", - "title": "Dca Baseline 90D Partial" - }, - "high_30d": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Maximum raw price observation in the trailing 30 UTC days, in vs_currency.", - "title": "High 30D" - }, - "id": { - "title": "Id", - "type": "string" - }, - "price_change_pct": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price Change Pct" - }, - "price_end": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price End" - }, - "price_high": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price High" - }, - "price_low": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price Low" - }, - "price_start": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Price Start" - }, - "std_30d": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Population standard deviation of trailing 30-day simple daily returns, as a decimal.", - "title": "Std 30D" - }, - "symbol": { - "title": "Symbol", - "type": "string" - } -} - removed
Output schema / properties / tokens / items / requiredRemoved value: -[ - "id", - "symbol", - "price_start", - "price_end", - "price_change_pct", - "price_high", - "price_low", - "daily_prices" -] - removed
Output schema / properties / tokens / items / titleRemoved value: -"TokenHistoricalEntry" - removed
Output schema / properties / tokens / items / typeRemoved value: -"object"
- Changed
get_transaction10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / tx_hash / titleAdded value: +"Tx Hash" - added
Input schema / titleAdded value: +"mcp_get_transactionArguments" - added
Output schema / $defsAdded value: +{ + "TransactionLog": { + "properties": { + "address": { + "title": "Address", + "type": "string" + }, + "data": { + "title": "Data", + "type": "string" + }, + "data_truncated": { + "default": false, + "title": "Data Truncated", + "type": "boolean" + }, + "log_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Log Index" + }, + "topics": { + "items": { + "type": "string" + }, + "title": "Topics", + "type": "array" + }, + "topics_truncated": { + "default": false, + "title": "Topics Truncated", + "type": "boolean" + } + }, + "required": [ + "address", + "topics", + "data" + ], + "title": "TransactionLog", + "type": "object" + } +} - added
Output schema / properties / logs / items / $refAdded value: +"#/$defs/TransactionLog" - removed
Output schema / properties / logs / items / propertiesRemoved value: -{ - "address": { - "title": "Address", - "type": "string" - }, - "data": { - "title": "Data", - "type": "string" - }, - "data_truncated": { - "default": false, - "title": "Data Truncated", - "type": "boolean" - }, - "log_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Log Index" - }, - "topics": { - "items": { - "type": "string" - }, - "title": "Topics", - "type": "array" - }, - "topics_truncated": { - "default": false, - "title": "Topics Truncated", - "type": "boolean" - } -} - removed
Output schema / properties / logs / items / requiredRemoved value: -[ - "address", - "topics", - "data" -] - removed
Output schema / properties / logs / items / titleRemoved value: -"TransactionLog" - removed
Output schema / properties / logs / items / typeRemoved value: -"object"
- Changed
get_wallet_portfolio10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / wallet_address / titleAdded value: +"Wallet Address" - added
Input schema / titleAdded value: +"mcp_get_wallet_portfolioArguments" - added
Output schema / $defsAdded value: +{ + "PortfolioEntry": { + "properties": { + "balance_formatted": { + "title": "Balance Formatted", + "type": "string" + }, + "price_usd": { + "title": "Price Usd", + "type": "number" + }, + "symbol": { + "title": "Symbol", + "type": "string" + }, + "token_address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Token Address" + }, + "value_usd": { + "title": "Value Usd", + "type": "number" + } + }, + "required": [ + "symbol", + "token_address", + "balance_formatted", + "price_usd", + "value_usd" + ], + "title": "PortfolioEntry", + "type": "object" + } +} - added
Output schema / properties / holdings / items / $refAdded value: +"#/$defs/PortfolioEntry" - removed
Output schema / properties / holdings / items / propertiesRemoved value: -{ - "balance_formatted": { - "title": "Balance Formatted", - "type": "string" - }, - "price_usd": { - "title": "Price Usd", - "type": "number" - }, - "symbol": { - "title": "Symbol", - "type": "string" - }, - "token_address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Token Address" - }, - "value_usd": { - "title": "Value Usd", - "type": "number" - } -} - removed
Output schema / properties / holdings / items / requiredRemoved value: -[ - "symbol", - "token_address", - "balance_formatted", - "price_usd", - "value_usd" -] - removed
Output schema / properties / holdings / items / titleRemoved value: -"PortfolioEntry" - removed
Output schema / properties / holdings / items / typeRemoved value: -"object"
- Changed
get_yield_rates17 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / chain / titleAdded value: +"Chain" - added
Input schema / properties / limit / titleAdded value: +"Limit" - added
Input schema / properties / max_apy / titleAdded value: +"Max Apy" - added
Input schema / properties / min_apy / titleAdded value: +"Min Apy" - added
Input schema / properties / min_tvl_usd / titleAdded value: +"Min Tvl Usd" - added
Input schema / properties / protocols / titleAdded value: +"Protocols" - added
Input schema / properties / stable_only / titleAdded value: +"Stable Only" - added
Input schema / properties / symbols_any / titleAdded value: +"Symbols Any" - added
Input schema / titleAdded value: +"mcp_get_yield_ratesArguments" - added
Output schema / $defsAdded value: +{ + "DataProvenance": { + "description": "Machine-readable source and freshness metadata for a tool response.", + "properties": { + "cache_age_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Age Seconds" + }, + "cache_hit": { + "default": false, + "title": "Cache Hit", + "type": "boolean" + }, + "cache_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Ttl Seconds" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "retrieved_at": { + "title": "Retrieved At", + "type": "string" + }, + "source_fetched_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Fetched At" + }, + "source_urls": { + "items": { + "type": "string" + }, + "title": "Source Urls", + "type": "array" + } + }, + "required": [ + "provider", + "retrieved_at" + ], + "title": "DataProvenance", + "type": "object" + }, + "YieldPoolEntry": { + "properties": { + "apy": { + "title": "Apy", + "type": "number" + }, + "apy_base": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Apy Base" + }, + "apy_mean_30d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Apy Mean 30D" + }, + "apy_mean_7d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Apy Mean 7D" + }, + "apy_reward": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Apy Reward" + }, + "chain": { + "title": "Chain", + "type": "string" + }, + "il_risk": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Il Risk" + }, + "pool_id": { + "title": "Pool Id", + "type": "string" + }, + "project": { + "title": "Project", + "type": "string" + }, + "stable": { + "title": "Stable", + "type": "boolean" + }, + "symbol": { + "title": "Symbol", + "type": "string" + }, + "tvl_usd": { + "title": "Tvl Usd", + "type": "number" + } + }, + "required": [ + "pool_id", + "project", + "symbol", + "chain", + "tvl_usd", + "apy", + "apy_mean_7d", + "apy_mean_30d", + "apy_base", + "apy_reward", + "stable", + "il_risk" + ], + "title": "YieldPoolEntry", + "type": "object" + } +} - added
Output schema / properties / pools / items / $refAdded value: +"#/$defs/YieldPoolEntry" - removed
Output schema / properties / pools / items / propertiesRemoved value: -{ - "apy": { - "title": "Apy", - "type": "number" - }, - "apy_base": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Apy Base" - }, - "apy_mean_30d": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Apy Mean 30D" - }, - "apy_mean_7d": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Apy Mean 7D" - }, - "apy_reward": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Apy Reward" - }, - "chain": { - "title": "Chain", - "type": "string" - }, - "il_risk": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Il Risk" - }, - "pool_id": { - "title": "Pool Id", - "type": "string" - }, - "project": { - "title": "Project", - "type": "string" - }, - "stable": { - "title": "Stable", - "type": "boolean" - }, - "symbol": { - "title": "Symbol", - "type": "string" - }, - "tvl_usd": { - "title": "Tvl Usd", - "type": "number" - } -} - removed
Output schema / properties / pools / items / requiredRemoved value: -[ - "pool_id", - "project", - "symbol", - "chain", - "tvl_usd", - "apy", - "apy_mean_7d", - "apy_mean_30d", - "apy_base", - "apy_reward", - "stable", - "il_risk" -] - removed
Output schema / properties / pools / items / titleRemoved value: -"YieldPoolEntry" - removed
Output schema / properties / pools / items / typeRemoved value: -"object" - changed
Output schema / properties / provenance / anyOfPrevious value: -[ - { - "description": "Machine-readable source and freshness metadata for a tool response.", - "properties": { - "cache_age_seconds": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cache Age Seconds" - }, - "cache_hit": { - "default": false, - "title": "Cache Hit", - "type": "boolean" - }, - "cache_ttl_seconds": { - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cache Ttl Seconds" - }, - "provider": { - "title": "Provider", - "type": "string" - }, - "retrieved_at": { - "title": "Retrieved At", - "type": "string" - }, - "source_fetched_at": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Source Fetched At" - }, - "source_urls": { - "items": { - "type": "string" - }, - "title": "Source Urls", - "type": "array" - } - }, - "required": [ - "provider", - "retrieved_at" - ], - "title": "DataProvenance", - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/DataProvenance" + }, + { + "type": "null" + } +]
- Changed
http_fetch4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / max_chars / titleAdded value: +"Max Chars" - added
Input schema / properties / url / titleAdded value: +"Url" - added
Input schema / titleAdded value: +"mcp_http_fetchArguments"
- Changed
read_contract10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / abi_fragment / titleAdded value: +"Abi Fragment" - added
Input schema / properties / args / titleAdded value: +"Args" - added
Input schema / properties / args_json / titleAdded value: +"Args Json" - added
Input schema / properties / block_identifier / titleAdded value: +"Block Identifier" - added
Input schema / properties / caller_address / titleAdded value: +"Caller Address" - added
Input schema / properties / chain_id / titleAdded value: +"Chain Id" - added
Input schema / properties / contract_address / titleAdded value: +"Contract Address" - added
Input schema / properties / function_name / titleAdded value: +"Function Name" - added
Input schema / titleAdded value: +"mcp_read_contractArguments"
- Changed
resolve_ens3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / name / titleAdded value: +"Name" - added
Input schema / titleAdded value: +"mcp_resolve_ensArguments"
- Changed
web_search12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / num_results / titleAdded value: +"Num Results" - added
Input schema / properties / query / titleAdded value: +"Query" - added
Input schema / properties / search_depth / titleAdded value: +"Search Depth" - added
Input schema / properties / topic / titleAdded value: +"Topic" - added
Input schema / titleAdded value: +"mcp_web_searchArguments" - added
Output schema / $defsAdded value: +{ + "SearchResult": { + "properties": { + "score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Score" + }, + "snippet": { + "title": "Snippet", + "type": "string" + }, + "title": { + "title": "Title", + "type": "string" + }, + "url": { + "title": "Url", + "type": "string" + } + }, + "required": [ + "title", + "url", + "snippet" + ], + "title": "SearchResult", + "type": "object" + } +} - added
Output schema / properties / results / items / $refAdded value: +"#/$defs/SearchResult" - removed
Output schema / properties / results / items / propertiesRemoved value: -{ - "score": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Score" - }, - "snippet": { - "title": "Snippet", - "type": "string" - }, - "title": { - "title": "Title", - "type": "string" - }, - "url": { - "title": "Url", - "type": "string" - } -} - removed
Output schema / properties / results / items / requiredRemoved value: -[ - "title", - "url", - "snippet" -] - removed
Output schema / properties / results / items / titleRemoved value: -"SearchResult" - removed
Output schema / properties / results / items / typeRemoved value: -"object"
1 tool update
- Changed
get_defi_positions2 fields changed- added
Output schema / properties / lido_stakingAdded value: +{ + "anyOf": [ + { + "properties": { + "steth_balance": { + "title": "Steth Balance", + "type": "string" + }, + "total_steth_equivalent": { + "title": "Total Steth Equivalent", + "type": "string" + }, + "wsteth_balance": { + "title": "Wsteth Balance", + "type": "string" + }, + "wsteth_steth_equivalent": { + "title": "Wsteth Steth Equivalent", + "type": "string" + } + }, + "required": [ + "steth_balance", + "wsteth_balance", + "wsteth_steth_equivalent", + "total_steth_equivalent" + ], + "title": "LidoStakingPosition", + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Output schema / properties / note / defaultPrevious value: -"On-chain position snapshot at data_block_number. Aave USD values are from the Aave oracle (base currency = USD, 8 decimals on Ethereum/Base). Compound collateral and Uniswap v3 amounts are raw integer units — divide by 10**decimals to format. Compound collateral factors are decimals (e.g., 0.90 = 90%) when available from Comet getAssetInfo. Token symbols are resolved for well-known tokens; None means unrecognised — do NOT call read_contract, web_search, or any external lookup to identify these tokens. Report them as 'unrecognized token (0x…)' in the final answer and move on. Uniswap v3 liquidity is returned raw (no underlying token valuation in v1); tokensOwed0/1 are uncollected fees only. If a protocol is missing (e.g., aave_v3 is null) and appears in errors, its risk could not be verified from this snapshot and must not be treated as no debt. Does not include staking rewards, COMP accruals, or unlisted protocols."New value: +"On-chain position snapshot at data_block_number. Aave USD values are from the Aave oracle (base currency = USD, 8 decimals on Ethereum/Base). Compound collateral and Uniswap v3 amounts are raw integer units — divide by 10**decimals to format. Compound collateral factors are decimals (e.g., 0.90 = 90%) when available from Comet getAssetInfo. Token symbols are resolved for well-known tokens; None means unrecognised — do NOT call read_contract, web_search, or any external lookup to identify these tokens. Report them as 'unrecognized token (0x…)' in the final answer and move on. Uniswap v3 liquidity is returned raw (no underlying token valuation in v1); tokensOwed0/1 are uncollected fees only. Lido staking contains canonical Ethereum stETH/wstETH balances and a current wstETH-to-stETH equivalent in raw integer units; it does not include APR, rewards accounting, validator positions, or withdrawal queue status. Lido staking is null on Base because its wstETH representation there is bridged. If a protocol is missing (e.g., aave_v3 is null) and appears in errors, its risk could not be verified from this snapshot and must not be treated as no debt. Does not include COMP accruals or unlisted protocols."
4 tool updates
- Changed
get_chain_metrics1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "anyOf": [ + { + "description": "Machine-readable source and freshness metadata for a tool response.", + "properties": { + "cache_age_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Age Seconds" + }, + "cache_hit": { + "default": false, + "title": "Cache Hit", + "type": "boolean" + }, + "cache_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Ttl Seconds" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "retrieved_at": { + "title": "Retrieved At", + "type": "string" + }, + "source_fetched_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Fetched At" + }, + "source_urls": { + "items": { + "type": "string" + }, + "title": "Source Urls", + "type": "array" + } + }, + "required": [ + "provider", + "retrieved_at" + ], + "title": "DataProvenance", + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Source and freshness metadata for the DeFiLlama response." +}
- Changed
get_transaction8 fields changed- added
Output schema / properties / effective_gas_price_gweiAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Effective Gas Price Gwei" +} - added
Output schema / properties / fee_ethAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fee Eth" +} - added
Output schema / properties / fee_weiAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fee Wei" +} - added
Output schema / properties / input_dataAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Hex calldata, bounded to 8 KiB", + "title": "Input Data" +} - added
Output schema / properties / input_data_truncatedAdded value: +{ + "default": false, + "title": "Input Data Truncated", + "type": "boolean" +} - added
Output schema / properties / logsAdded value: +{ + "items": { + "properties": { + "address": { + "title": "Address", + "type": "string" + }, + "data": { + "title": "Data", + "type": "string" + }, + "data_truncated": { + "default": false, + "title": "Data Truncated", + "type": "boolean" + }, + "log_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Log Index" + }, + "topics": { + "items": { + "type": "string" + }, + "title": "Topics", + "type": "array" + }, + "topics_truncated": { + "default": false, + "title": "Topics Truncated", + "type": "boolean" + } + }, + "required": [ + "address", + "topics", + "data" + ], + "title": "TransactionLog", + "type": "object" + }, + "title": "Logs", + "type": "array" +} - added
Output schema / properties / logs_truncatedAdded value: +{ + "default": false, + "title": "Logs Truncated", + "type": "boolean" +} - added
Output schema / properties / transaction_indexAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Transaction Index" +}
- Changed
get_yield_rates1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "anyOf": [ + { + "description": "Machine-readable source and freshness metadata for a tool response.", + "properties": { + "cache_age_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Age Seconds" + }, + "cache_hit": { + "default": false, + "title": "Cache Hit", + "type": "boolean" + }, + "cache_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Ttl Seconds" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "retrieved_at": { + "title": "Retrieved At", + "type": "string" + }, + "source_fetched_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source Fetched At" + }, + "source_urls": { + "items": { + "type": "string" + }, + "title": "Source Urls", + "type": "array" + } + }, + "required": [ + "provider", + "retrieved_at" + ], + "title": "DataProvenance", + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Source and freshness metadata for the DeFiLlama response." +}
- Changed
read_contract2 fields changed- added
Input schema / properties / caller_addressAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional EVM address to supply as msg.sender for caller-dependent view functions. This does not sign or submit a transaction." +} - added
Output schema / properties / caller_addressAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Caller Address" +}
1 tool update
- Changed
get_token_price_historical5 fields changed- changed
Input schema / properties / stats_only / descriptionPrevious value: -"If true, omit the daily price series and return only period stats (start/end/change/high/low) to reduce payload size."New value: +"If true, omit the daily price series and return period stats plus precomputed 30-day high/volatility and 90-day DCA baseline metrics." - added
Output schema / properties / tokens / items / properties / dca_baseline_90dAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Mean of weekly daily-close samples from the preceding 90 UTC days, in vs_currency.", + "title": "Dca Baseline 90D" +} - added
Output schema / properties / tokens / items / properties / dca_baseline_90d_partialAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "True when the DCA baseline uses incomplete 90-day history; null when unavailable.", + "title": "Dca Baseline 90D Partial" +} - added
Output schema / properties / tokens / items / properties / high_30dAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Maximum raw price observation in the trailing 30 UTC days, in vs_currency.", + "title": "High 30D" +} - added
Output schema / properties / tokens / items / properties / std_30dAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Population standard deviation of trailing 30-day simple daily returns, as a decimal.", + "title": "Std 30D" +}
2 tool updates
- Added
get_chain_metrics - Added
get_dex_volume
1 tool update
- Changed
get_yield_rates1 field changed- added
Input schema / properties / max_apyAdded value: +{ + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Exclude pools with APY above this value (%). Default None = no upper bound. Use to filter out leveraged/boosted pools (e.g. max_apy=30) so genuine stablecoin yields surface." +}
1 tool update
- Changed
get_token_price1 field changed- added
Output schema / properties / prices / items / properties / fully_diluted_valuationAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fully Diluted Valuation" +}
1 tool update
- Changed
delegate_to_agent1 field changed- added
Input schema / properties / task_typeAdded value: +{ + "default": "general", + "description": "Broad task class for routing telemetry; never include user data or task text.", + "enum": [ + "general", + "research", + "analysis", + "data_retrieval", + "coding", + "transaction", + "automation" + ], + "type": "string" +}
25 tool updates
- First observed
calculate - First observed
convert_currency - First observed
count_text_stats - First observed
decode_transaction - First observed
delegate_to_agent - First observed
get_block - First observed
get_datetime - First observed
get_defi_positions - First observed
get_dex_quote - First observed
get_erc20_balance - First observed
get_eth_balance - First observed
get_gas_price - First observed
get_lending_rates - First observed
get_liquidation_risk - First observed
get_protocol_tvl - First observed
get_token_approvals - First observed
get_token_price - First observed
get_token_price_historical - First observed
get_transaction - First observed
get_wallet_portfolio - First observed
get_yield_rates - First observed
http_fetch - First observed
read_contract - First observed
resolve_ens - First observed
web_search
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
Most tools target distinct data sources, but several near-duplicates exist: get_token_approvals/get_wallet_approvals, get_defi_positions/get_wallet_positions, and get_wallet_portfolio/get_eth_balance. The descriptions do cross-reference and clarify the differences, so an agent can disambiguate with effort, but names alone are not enough.
The dominant get_<noun> pattern is clear and nearly all names use lowercase snake_case with verb-first conventions. A few tools like calculate, record_predictions, http_fetch, and web_search break the get_ pattern, but the overall style remains predictable.
34 tools is excessive for a single server, even for a broad DeFi/onchain analytics domain. The count is inflated by generic utilities such as calculate, count_text_stats, web_search, and http_fetch, plus multiple overlapping data-retrieval endpoints, making the surface hard to scan.
The set covers an unusually wide range of domain operations: prices, balances, portfolio/positions, approvals, yields, TVL, DEX quotes/volume, transactions, blocks, gas, ENS, contract reads, and risk assessments. It is view-only by design, so missing write/transaction tools is acceptable; minor gaps like address-based token pricing or transaction simulation are workaround-able.