SQD Portal
Server Details
Query onchain data across EVM, Solana, Bitcoin, Substrate, and Hyperliquid via the SQD Portal API.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- subsquid-labs/portal-mcp-server
- GitHub Stars
- 1
- Server Listing
- SQD Portal MCP Server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.3/5 across 28 of 28 tools scored. Lowest: 3.6/5.
Each tool targets a distinct resource/action combination: analytics vs raw queries, logs vs token transfers, and per-chain variants are cleanly separated. The debug tools are clearly namespaced apart from user-facing tools, and descriptions include explicit 'don't use' guidance that reinforces boundaries.
Tools follow a consistent portal_<domain>_<verb>_<noun> pattern, with 'get_' used for summaries/analytics and 'query_' for raw record retrieval. Special-purpose verbs like 'list_' and 'resolve_' are used sparingly for unique utilities, and the debug namespace is consistently prefixed.
28 tools is on the higher end but appropriate for a multi-chain data platform covering EVM, Solana, Bitcoin, Substrate, and Hyperliquid, plus cross-cutting utilities. Each tool earns its place with a distinct purpose, and the count reflects the broad scope rather than redundancy.
The tool surface provides comprehensive coverage: analytics and raw queries for every supported chain, plus contract activity, deployment, token transfers, OHLC, time series, wallet summaries, and network metadata. Cross-cutting tools for entity resolution, network discovery, head/status, and block/time resolution eliminate dead ends for typical read-only investigations.
Available Tools
28 toolsportal_bitcoin_get_analyticsAInspect
Get the big picture for Bitcoin block, fee, and address activity over a recent or explicit window.
COMMON USER ASKS:
Bitcoin network snapshot
FIRST CHOICE FOR:
the big picture for Bitcoin right now
WHEN TO USE:
You want the big picture for Bitcoin right now.
You want a network-level Bitcoin snapshot.
You care about block cadence, fees, SegWit/Taproot adoption, or activity metrics.
DON'T USE:
You need raw transactions rather than network analytics.
EXAMPLES:
Bitcoin network snapshot: {"network":"bitcoin-mainnet","timeframe":"1h"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | No | Network name (default: bitcoin-mainnet) | bitcoin-mainnet |
| to_block | No | Ending block number | |
| timeframe | No | Time range: '1h' (~6 blocks), '6h' (~36 blocks), '24h' (~144 blocks). Default: '1h' | |
| from_block | No | Starting block number (use this OR timeframe) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (high-level metrics only), 'compact' (core sections, lighter payload), 'full' (complete analytics). | full |
| include_address_activity | No | Include unique address count and output value (requires extra queries, slower) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It does convey a read-only network analytics nature and the data categories included, but it does not mention return format, pagination, performance caveats (though one parameter description notes extra queries), or any potential side effects.
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 well-structured with distinct sections (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES) and remains focused. Each sentence contributes to selection or invocation guidance; the slight repetition of 'big picture' is acceptable for emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter analytics tool with no output schema and no annotations, the description covers purpose, usage boundaries, and a concrete example, and the schema handles parameter details. It falls slightly short of 5 because it doesn't describe expected output structure or note parameter exclusivity (e.g., from_block vs timeframe).
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%, establishing a baseline of 3. The description adds value beyond the schema with an example call and clarifies the 'recent or explicit window' concept, which helps interpret timeframe vs. block/timestamp parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the big picture for Bitcoin block, fee, and address activity over a recent or explicit window.' It clearly distinguishes this analytics tool from raw transaction queries by stating 'DON'T USE... raw transactions rather than network analytics.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit WHEN TO USE bullets, a DON'T USE exclusion naming the sibling tool type, and an example. This gives an agent clear decision criteria against portal_bitcoin_query_transactions and other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_bitcoin_query_transactionsAInspect
Query raw Bitcoin transactions and optionally attach inputs and outputs inline.
COMMON USER ASKS:
Recent Bitcoin transactions
Attach inputs and outputs
WHEN TO USE:
You need raw Bitcoin transaction records.
You want the UTXO envelope without switching to separate input/output tools.
DON'T USE:
You only need a quick wallet or network summary.
EXAMPLES:
Recent Bitcoin transactions: {"network":"bitcoin-mainnet","timeframe":"1h","limit":20}
Attach inputs and outputs: {"network":"bitcoin-mainnet","timeframe":"1h","include_inputs":true,"include_outputs":true,"limit":10}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (default: bitcoin-mainnet). Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_inputs | No | Attach transaction inputs inline | |
| include_outputs | No | Attach transaction outputs inline | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps inline inputs and outputs in a smaller shape when requested. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosing behavioral traits. It describes a 'query' operation and notes optional inline attachment of inputs/outputs, which implies a non-destructive read. However, it does not explicitly state that the tool is read-only, nor does it mention rate limits or pagination behavior beyond what the schema covers.
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 opens with a crisp one-sentence summary, then organizes additional guidance into labeled sections (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). Each section is purposeful and concise, with no redundant or filler 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?
Given the tool's 12 optional parameters and no output schema, the description provides useful situational guidance and examples. However, it omits a description of the return structure (e.g., what 'compact' vs 'full' response formats produce). The schema covers parameter semantics well, and the examples illustrate typical usage, so the description is fairly complete but not exhaustive.
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% parameter coverage, so the baseline is 3. The description adds value by providing example JSON payloads that show how to combine parameters (e.g., setting both include_inputs and include_outputs to true) and how to use network/timeframe/limit together. This goes beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries raw Bitcoin transactions with optional inline input/output attachment. This specific verb+resource+scope distinguishes it from other chain-specific transaction tools (e.g., portal_evm_query_transactions) by explicitly naming Bitcoin.
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 includes explicit 'WHEN TO USE' and 'DON'T USE' sections, providing clear context for when to invoke this tool and when to avoid it (e.g., for a quick wallet or network summary). Although no specific alternative tool names are mentioned, the guidance effectively sets expectations for raw transaction queries versus summaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_debug_hyperliquid_query_replica_commandsAInspect
ADVANCED: Query Hyperliquid replica-command actions such as orders, cancels, and leverage updates.
COMMON USER ASKS:
Recent order actions
WHEN TO USE:
You are debugging Hyperliquid replica-command records.
You need raw order-action events instead of fills or analytics.
DON'T USE:
You only need public trading activity; fills and analytics are usually the better fit.
EXAMPLES:
Recent order actions: {"network":"hyperliquid-replica-cmds","timeframe":"1h","limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | User wallet addresses (0x-prefixed, lowercase) | |
| limit | No | Max actions to return | |
| cursor | No | Continuation cursor from a previous response | |
| status | No | Filter by action status | |
| network | No | Network name (default: 'hyperliquid-replica-cmds'). Optional when continuing with cursor. | hyperliquid-replica-cmds |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| action_type | No | Action types to filter | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| vault_address | No | Vault addresses (0x-prefixed, lowercase) | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It clarifies that this is a query/read tool and returns 'raw order-action events,' but it does not mention pagination, whether filters are required, or any performance caveats. The 'ADVANCED' tag adds a small signal, but the behavioral disclosure is only partial.
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 'ADVANCED' and purpose, then structured into COMMON USER ASKS, WHEN TO USE, DON'T USE, and EXAMPLES. Each section is short and every sentence provides selection-relevant value.
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 complex tool with 13 optional parameters and no output schema, the description provides useful context: use cases, exclusions, and a concrete example. It does not describe return fields or default behavior when no filters are provided, but the schema covers parameter defaults and the purpose is clearly scoped.
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 13 parameters have rich descriptions in the schema (100% coverage), so the baseline is 3. The description adds an example with network, timeframe, and limit, but does not elaborate on parameter meaning beyond the schema. This is adequate but not enhanced.
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+resource: 'Query Hyperliquid replica-command actions such as orders, cancels, and leverage updates.' It also distinguishes from siblings by noting these are 'raw order-action events instead of fills or analytics,' making the scope clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE and DON'T USE sections. It says use when 'debugging Hyperliquid replica-command records' and needing 'raw order-action events instead of fills or analytics,' and warns not to use if you only need 'public trading activity' because 'fills and analytics are usually the better fit.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_debug_query_blocksAInspect
ADVANCED: Query raw block records directly for EVM, Solana, or Bitcoin.
COMMON USER ASKS:
Recent Base blocks
WHEN TO USE:
You are debugging Portal coverage or block-level fields.
You need raw block records instead of transactions, logs, or summaries.
DON'T USE:
You are answering a normal end-user question; prefer recent activity, time series, or raw transaction tools first.
EXAMPLES:
Recent Base blocks: {"network":"base-mainnet","timeframe":"1h","limit":5}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max blocks to return (default: 20). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| field_preset | No | Field preset for EVM datasets: 'minimal' (number+timestamp+gas), 'standard' (+hash+miner+size), 'full' (all block fields). Ignored for Solana/Bitcoin. | standard |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_l2_fields | No | Include L2-specific fields (auto-detected for L2 chains) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only low-level operation ('query raw block records directly') and provides context about debugging, but it does not disclose response format, pagination behavior, rate limits, permissions, or any operational caveats. The 'ADVANCED' flag hints at complexity but not specific behaviors.
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 well-structured with clear headers (ADVANCED, COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES) and is front-loaded with the core purpose. Every section is concise and purposeful, making it easy for an agent to scan and extract key information without excess verbosity.
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 11 parameters, no output schema, and no annotations. The description covers usage guidance, exclusions, and an example, but does not explain the structure of the response or what 'raw block records' contain. Given the debug-oriented nature, this is adequate, but the lack of return-value description leaves a gap for an AI agent that needs to interpret the output.
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% description coverage for all 11 parameters, so the schema already documents them thoroughly. The description adds value with a concrete example ('Recent Base blocks: {"network":"base-mainnet","timeframe":"1h","limit":5}'), which clarifies parameter combinations and usage in a common scenario. This goes beyond the schema 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 opens with 'Query raw block records directly for EVM, Solana, or Bitcoin,' clearly specifying the verb (query), resource (raw block records), and scope (multiple chains). It explicitly distinguishes itself from sibling tools like portal_evm_query_transactions and portal_solana_query_transactions by focusing on block-level data, and the 'ADVANCED' tag signals its debug-oriented purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'DON'T USE' sections. It states to use when debugging Portal coverage or needing raw block records instead of transactions/logs/summaries, and advises against using for normal end-user questions, instead preferring recent activity, time series, or raw transaction tools. This is textbook usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_debug_resolve_time_to_blockAInspect
ADVANCED: Resolve a timestamp to the nearest indexed block or slot.
COMMON USER ASKS:
Resolve one hour ago on Base
Resolve an older time on Polkadot
WHEN TO USE:
You are debugging timestamp windows or building a manual block-range query.
You want to inspect exact versus estimated timestamp-to-block resolution.
DON'T USE:
You just want to query by time; most public tools already accept natural timestamps directly.
EXAMPLES:
Resolve one hour ago on Base: {"network":"base-mainnet","timestamp":"1h ago"}
Resolve an older time on Polkadot: {"network":"polkadot","timestamp":"2026-04-08T12:00:00Z"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Network name or alias | |
| timestamp | Yes | Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago" |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the core behavior (nearest indexed block/slot) and hints at exact versus estimated resolution, but it does not disclose output structure, network limitations, error behavior, or confirm it is a read-only operation. This is adequate but not rich.
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 well-organized with clear sections (ADVANCED, COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). Every section adds distinct value, and the most important information is front-loaded in the first sentence.
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 (2 required parameters, no output schema), the description is remarkably complete: it states what it does, when to use it, when not to use it, and provides two illustrative examples. No critical context is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents both parameters, so the baseline is 3. The description adds value with concrete examples showing network aliases ('base-mainnet') and relative timestamp syntax ('1h ago'), which clarifies real-world usage beyond the generic schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Resolve a timestamp to the nearest indexed block or slot.' It clearly distinguishes this from siblings like portal_debug_query_blocks by framing it as timestamp-to-block resolution and mentioning manual block-range query building.
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 includes explicit 'WHEN TO USE' and 'DON'T USE' sections, with concrete use cases like debugging timestamp windows and a direct alternative ('most public tools already accept natural timestamps directly'). This gives the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_get_analyticsAInspect
Get the big picture for network-wide EVM activity with ranked contracts and compact overview metrics.
COMMON USER ASKS:
Top contracts on Base
FIRST CHOICE FOR:
the big picture for activity on an EVM network like Base or Optimism
WHEN TO USE:
You want the big picture for activity on an EVM network.
You want the most active contracts on an EVM network.
You want an analytics-style network overview instead of a raw record list.
DON'T USE:
You need chart buckets over time rather than ranked entities.
EXAMPLES:
Top contracts on Base: {"network":"base-mainnet","timeframe":"1h","limit":10}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| limit | No | Number of top contracts to return (default: 10, max: 100) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (supports short names: 'ethereum', 'polygon', 'base', etc.). Optional when continuing with cursor. | |
| timeframe | No | Optional natural time window like '1h' or '24h' | |
| num_blocks | No | Number of recent blocks to analyze when timeframe is omitted (default: 50, max: 10000) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_details | No | Include sample transaction hashes for each contract |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'Get' conveys a read-only operation, and the description discloses the return shape (ranked contracts and overview metrics), but it does not explicitly state safety characteristics, data freshness, or the performance implications of 'fast' vs 'deep' mode, which the schema notes but the description omits.
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 well-structured and front-loaded with a one-sentence purpose summary. It uses logical headers (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES) and bullet points, with no redundant filler. Every section contributes to understanding and 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?
Given the tool's complexity (9 parameters, no output schema, no annotations), the description still provides substantial context: it states the output type, usage boundaries, and gives a worked example. It does not fully describe the response structure or all parameter interactions, but the schema covers parameters and the example covers the typical use case, making it sufficient for initial 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 description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by providing a complete, realistic example ({"network":"base-mainnet","timeframe":"1h","limit":10}) that demonstrates how to combine the most important parameters for a common task, which aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Get the big picture for network-wide EVM activity with ranked contracts and compact overview metrics.' It distinguishes this tool from siblings by explicitly contrasting with 'raw record list' and 'chart buckets over time,' and includes a concrete example for 'Top contracts on Base.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'DON'T USE' guidance, covering the decisive use cases (big picture, most active contracts, analytics-style overview) and the key exclusion (needing time buckets). However, it does not name specific alternative tools (e.g., portal_evm_query_transactions) as the rubric's top tier requires, though it implies them by describing what not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_get_contract_activityAInspect
Summarize what one specific contract has been doing lately, including recent interactions, unique callers, and optional event activity.
COMMON USER ASKS:
Contract activity snapshot
FIRST CHOICE FOR:
what one specific contract has been doing lately on an EVM network
WHEN TO USE:
You want to ask "what has this contract been doing?" and get a contract-level answer.
You want a contract-centric activity summary instead of raw records.
You need top callers and interaction volume for one contract.
DON'T USE:
You need the underlying raw logs or transactions.
You want general recent network activity without naming one contract.
EXAMPLES:
Contract activity snapshot: {"network":"base-mainnet","contract_address":"0xabc...","timeframe":"24h"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | Yes | Network name or alias | |
| timeframe | No | Analysis period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'. | 1000 |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_events | No | Include event log summary | |
| contract_address | Yes | Contract address to analyze |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It accurately discloses that the tool returns an aggregate, contract-level summary rather than raw records, and it names the included output components (interactions, unique callers, optional events). However, it does not describe the exact response shape or execution behavior around mode/timeframe, leaving some minor ambiguity.
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 strong one-sentence summary and uses clearly labeled sections for quick scanning. It is somewhat longer than necessary—COMMON USER ASKS and FIRST CHOICE overlap—but every section still contributes useful guidance, so it remains appropriately 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 tool with 7 parameters, no output schema, and no annotations, the description covers purpose, usage scenarios, exclusions, and a concrete example, while the schema fully documents all parameters. It could be more explicit about the response shape, but the listed output components and complete schema make selection and invocation sufficiently clear.
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 concrete example with network, contract_address, and timeframe, but this does not substantially enrich the parameter meanings already provided in the schema. No parameter explanations are needed beyond what the schema gives.
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 ('Summarize') and identifies a precise resource: one specific contract's activity, including recent interactions, unique callers, and optional event activity. This clearly distinguishes it from sibling raw-log and transaction tools like portal_evm_query_logs and portal_evm_query_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 WHEN TO USE and DON'T USE sections, including alternatives and exclusions. It states it is the FIRST CHOICE for contract-centric summaries and warns against using it when raw logs/transactions or general network activity are needed, which gives an agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_get_contract_deploymentAInspect
Locate the create trace and parent transaction that deployed a specific EVM contract address within a bounded window.
COMMON USER ASKS:
Find BAYC deployment
Find recent deployment
Find deployment from known range
FIRST CHOICE FOR:
who deployed this EVM contract
when was this contract deployed
what deployment transaction created this contract
WHEN TO USE:
You need the deployer, deployment block, deployment timestamp, or deployment transaction for an EVM contract.
You can provide a starting block/time window, a contract address, or a supported well-known contract alias such as BAYC/Bored Apes.
You want a deployment lookup instead of general contract activity.
DON'T USE:
You need all activity for a contract after deployment.
The contract is old and no block/time hint is available; provide from_block or from_timestamp first.
EXAMPLES:
Find BAYC deployment: {"network":"ethereum-mainnet","contract":"bored apes","from_block":12000000,"to_block":13000000,"scan_order":"earliest"}
Find recent deployment: {"network":"base-mainnet","contract_address":"0xabc...","search_depth_blocks":100000}
Find deployment from known range: {"network":"ethereum-mainnet","contract_address":"0xabc...","from_block":17000000,"to_block":17100000,"scan_order":"earliest"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | EVM network name or alias, e.g. base, ethereum, arbitrum. | |
| contract | No | Contract address or a supported well-known alias/name, e.g. "bayc" or "bored apes" on Ethereum. | |
| to_block | No | Optional ending block. Defaults to the indexed head. | |
| timeframe | No | Optional recent time window to search, e.g. "24h" or "7d". | |
| from_block | No | Optional starting block. Provide this for older contracts when the deployment is not recent. | |
| scan_order | No | Scan latest first for recent deployments, or earliest first when you provide a historical from_block. | latest |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "7d ago". | |
| max_scan_blocks | No | Safety cap for historical deployment scans. Default: scan the requested window up to 1,000,000 blocks. | |
| contract_address | No | Contract address whose deployment transaction should be located. | |
| search_depth_blocks | No | When no explicit range is given, search this many recent blocks backward from the indexed head. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool performs a bounded-window search, accepts scan_order, and requires from_block or from_timestamp for older contracts. However, it does not state what happens when no deployment is found or whether it is strictly read-only. It adds useful context beyond the schema, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). It is front-loaded with a precise purpose statement. While some redundancy exists between 'COMMON USER ASKS' and 'FIRST CHOICE FOR', the organization makes it easy to scan, and every section contributes to tool selection and invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description is remarkably complete. It covers the purpose, explicit usage conditions, exclusions, and provides three distinct examples illustrating different parameter combinations. It even explains the return value (create trace and parent transaction). This fully equips an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining parameter usage through examples, such as using aliases like 'bored apes', clarifying that from_block should be provided for older contracts, and explaining the purpose of search_depth_blocks. This exceeds the 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 opens with a specific verb+resource+scope: 'Locate the create trace and parent transaction that deployed a specific EVM contract address within a bounded window.' It clearly distinguishes this from general contract activity by stating 'You want a deployment lookup instead of general contract activity,' which sets it apart from sibling tools like portal_evm_get_contract_activity.
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 WHEN TO USE and DON'T USE sections provide clear conditions and exclusions. For example, 'DON'T USE: You need all activity for a contract after deployment' and 'you can provide a starting block/time window... or a supported well-known contract alias.' The examples also demonstrate concrete usage scenarios, giving the agent strong situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_get_ohlcAInspect
Build chart-ready EVM OHLC candles plus a recent trade tape from supported DEX event sources, including Uniswap v2-style swaps, Uniswap v3/v4, and Aerodrome Slipstream.
COMMON USER ASKS:
Base Uniswap v2-style swap candles
Base Uniswap candles
Base Uniswap v4 candles
WHEN TO USE:
You need OHLC candles for supported EVM event-derived price sources.
You want a candle chart and recent trades instead of scalar time-series buckets.
You want a Dexscreener-style pool chart with hover-ready candle metadata and a trade tape.
DON'T USE:
You only need counts or scalar metrics over time.
You want a simple activity chart for a network rather than pool candles.
EXAMPLES:
Base Uniswap v2-style swap candles: {"network":"base-mainnet","source":"uniswap_v2_swap","pool_address":"0x","duration":"1h","interval":"5m","price_in":"auto","include_recent_trades":true}
Base Uniswap candles: {"network":"base-mainnet","source":"uniswap_v3_swap","pool_address":"0x","duration":"1h","interval":"5m","price_in":"auto"}
Base Uniswap v4 candles: {"network":"base-mainnet","source":"uniswap_v4_swap","pool_id":"0x","duration":"1h","interval":"5m","price_in":"auto","include_recent_trades":true}
Base Aerodrome Slipstream candles: {"network":"base-mainnet","source":"aerodrome_slipstream_swap","pool_address":"0x","duration":"1h","interval":"5m","price_in":"token1"}
| Name | Required | Description | Default |
|---|---|---|---|
| fee | No | Optional Uniswap v4 LP fee in hundredths of a bip, e.g. 3000 for 0.30%. | |
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor from a previous candle page | |
| source | No | Which event source to build candles from. Prefer swap-derived sources for factual trade prices and volumes. Uniswap v4 uses PoolManager Swap events filtered by pool_id, not a per-pool contract address. | uniswap_v3_swap |
| network | No | EVM network name (default: base-mainnet) | base-mainnet |
| pool_id | No | Uniswap v4 pool id (bytes32). Optional when you provide the full v4 pool key instead. | |
| duration | No | How much recent history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes". | 1h |
| interval | No | Candle interval. auto uses chart-friendly defaults like 1h→5m and 24h→1h. | auto |
| price_in | No | Choose which token the displayed price should be expressed in. auto picks the more human-readable quote side. | auto |
| base_token | No | Legacy orientation input. Prefer price_in instead. | |
| pool_address | No | Pool/pair contract address for address-keyed sources like Uniswap v3, Slipstream, or Sync-derived CPMM pools. | |
| tick_spacing | No | Optional Uniswap v4 tick spacing. Required with the rest of the pool key when deriving pool_id. | |
| hooks_address | No | Optional Uniswap v4 hooks contract address. Defaults to the zero address when omitted. | |
| token0_symbol | No | Optional token0 symbol label for summaries | |
| token1_symbol | No | Optional token1 symbol label for summaries | |
| token0_address | No | Optional token0 address to infer known decimals | |
| token1_address | No | Optional token1 address to infer known decimals | |
| token0_decimals | No | Optional token0 decimals for human-readable prices | |
| token1_decimals | No | Optional token1 decimals for human-readable prices | |
| currency0_address | No | Optional Uniswap v4 currency0 address. Use with currency1_address, fee, and tick_spacing to derive pool_id factually. | |
| currency1_address | No | Optional Uniswap v4 currency1 address. Use with currency0_address, fee, and tick_spacing to derive pool_id factually. | |
| recent_trades_limit | No | Maximum number of recent trades to return in the trade tape. | |
| pool_manager_address | No | Uniswap v4 PoolManager address. Optional on networks with a built-in official Uniswap deployment mapping. | |
| include_recent_trades | No | Include a recent trade tape for swap-derived sources when factual per-trade amounts are available. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the expected output ('chart-ready EVM OHLC candles plus a recent trade tape') but does not disclose behavioral traits such as execution cost, return shape, pagination behavior, data availability caveats, or how the tool behaves when a source lacks factual trade amounts. The mode-related caveat lives in the schema, not in the tool description.
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 well-structured with clear sections: purpose, common asks, when/don't use, and examples. Each section earns its place; the examples are compact and immediately actionable. Front-loaded purpose sentence communicates the core behavior in one line.
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 complexity of a 24-parameter multi-source tool with no output schema and no annotations, the description is quite complete: it covers supported sources, common use cases, exclusions, and example payloads. It does not describe the return envelope or pagination semantics, but the presence of standard OHLC candle concepts and the cursor parameter in the schema mitigate this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, setting a baseline of 3. The description adds value above that by providing concrete JSON examples for each source type, mapping common user asks to parameter combinations (e.g., Uniswap v4 using pool_id, Aerodrome using pool_address and price_in). This helps disambiguate which parameters matter for which source.
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+resource: 'Build chart-ready EVM OHLC candles plus a recent trade tape from supported DEX event sources'. It names exact protocols (Uniswap v2-style, v3/v4, Aerodrome Slipstream) and clearly distinguishes this from analytical or scalar metric tools by emphasizing candles and trade tape.
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?
There are explicit 'WHEN TO USE' and 'DON'T USE' sections providing clear positive and negative guidance. It stops short of naming alternative sibling tools (e.g., portal_evm_get_analytics or portal_get_time_series) for the excluded cases, so it lacks explicit alternative tool pointers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_query_logsAInspect
Query raw EVM logs with address/topic filters, common event aliases, earliest/latest scanning, and optional inline decoding.
COMMON USER ASKS:
Recent USDC Transfer logs
First recent USDC Transfer log
Latest ERC721/pass mint ID and tx hash
FIRST CHOICE FOR:
NFT or ERC721 mint lookups such as latest pass minted, token ID, and mint transaction hash
contract event questions where the user needs exact event evidence rather than wallet or transaction summaries
WHEN TO USE:
You need event logs filtered by contract or topic signature.
You want decoded log hints while still keeping the raw log shape available.
You want the first or last matching event in a bounded block/time window.
You want common event names such as transfer, approval, swap, mint, or burn instead of remembering topic0 hashes.
You need the latest ERC721/pass mint in a bounded deployment/recent window: filter Transfer events with topic1 as the zero address, use scan_order=latest, limit=1, and decode=true to expose decoded_log.decoded.token_id plus transaction_hash.
DON'T USE:
You only want token transfers, which are easier with the token-transfer tool.
EXAMPLES:
Recent USDC Transfer logs: {"network":"base-mainnet","timeframe":"1h","token_symbols":["USDC"],"event":"transfer","limit":20}
First recent USDC Transfer log: {"network":"base-mainnet","timeframe":"1h","token_symbols":["USDC"],"event":"transfer","scan_order":"earliest","limit":1}
Latest ERC721/pass mint ID and tx hash: {"network":"base-mainnet","from_block":46020000,"to_block":46100000,"addresses":["0xE4E70FdF2Fc1147a7f35c4c5de88E6BeA63eeAfA"],"event":"transfer","topic1":["0x0000000000000000000000000000000000000000000000000000000000000000"],"scan_order":"latest","decode":true,"include_transaction":true,"limit":1}
Decode logs inline: {"network":"ethereum-mainnet","timeframe":"1h","topic0":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],"decode":true,"limit":10}
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Common event alias or topic0 hash. Examples: "transfer", "approval", "swap", "sync", "deposit", "withdrawal". Merges with topic0. | |
| limit | No | Max logs to return (default: 20, max: 200). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| decode | No | Decode known log signatures inline when topics/data are available | |
| topic0 | No | Event signatures (topic0). E.g., Transfer = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef | |
| topic1 | No | Topic1 filter (often: from address in Transfer, indexed parameter 1) | |
| topic2 | No | Topic2 filter (often: to address in Transfer, indexed parameter 2) | |
| topic3 | No | Topic3 filter (indexed parameter 3, chain-specific) | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number. RECOMMENDED: <10k blocks for fast (<1s) responses. Larger ranges may be slow or timeout. | |
| addresses | No | Contract addresses to filter (e.g., ['0xUSDC...', '0xDAI...']). IMPORTANT: Always include this or topics for fast queries. | |
| timeframe | No | Time range (e.g., '24h', '7d'). Alternative to from_block/to_block. Supported: 1h, 6h, 12h, 24h, 3d, 7d, 14d, 30d | |
| from_block | No | Starting block number (use this OR timeframe) | |
| scan_order | No | Which side of the block window to scan first. Use earliest for first-event questions. | latest |
| field_preset | No | Field preset: 'minimal' (address+topic0+block, ~80% smaller), 'standard' (all topics+timestamp), 'full' (includes raw data hex, largest). Use 'minimal' to reduce context usage. | standard |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| token_symbols | No | Token symbols to resolve via open token-list data and merge into addresses, e.g. ["USDC"]. | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline transaction context is requested. Use 'summary' for counting or categorizing. | |
| include_transaction | No | Include parent transaction data | |
| include_transaction_logs | No | Include all logs from parent transactions | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use addresses for deterministic single-contract filters. | |
| include_transaction_traces | No | Include traces for parent transactions |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It discloses performance tradeoffs ('RECOMMENDED: <10k blocks for fast (<1s) responses. Larger ranges may be slow or timeout') and output size reduction ('Use 'minimal' to reduce context usage'). It does not mention authentication or rate limits, but those are less critical for a read-only query tool, and the performance and output-size notes are 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 lengthy but well-structured with clear sections (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES). Every section adds actionable value, and the core purpose is front-loaded. Some redundancy exists between 'COMMON USER ASKS' and 'FIRST CHOICE FOR', so it is not maximally concise, but it earns a high score for effective organization.
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 24 parameters and no output schema, the description covers the primary use cases with multiple request examples, performance warnings, and explicit alternative-tool guidance. It does not explain pagination via cursor or the exact response structure, but the schema covers parameter formats and field_preset hints at output content. This is a comprehensive description for a complex tool, leaving only minor 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%, which sets a baseline of 3. The description adds meaning beyond the schema by providing examples that demonstrate effective parameter combinations, such as 'use scan_order=latest, limit=1, and decode=true to expose decoded_log.decoded.token_id' and showing how to combine token_symbols, addresses, and event. It also clarifies that event aliases merge with topic0, which is not obvious from 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 opens with 'Query raw EVM logs with address/topic filters, common event aliases, earliest/latest scanning, and optional inline decoding.' This clearly states a specific verb, resource, and key capabilities. It also distinguishes itself from the sibling token-transfer tool in the 'DON'T USE' section, satisfying the differentiation requirement.
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 includes dedicated 'WHEN TO USE' and 'DON'T USE' sections. It names the sibling token-transfer tool as the alternative when only token transfers are needed, and provides multiple concrete user scenarios in 'COMMON USER ASKS' and 'FIRST CHOICE FOR.' This is explicit guidance beyond just a general statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_query_token_transfersAInspect
Query token-transfer activity on EVM without needing to remember Transfer event signatures. Best for "did token X move?" and asset-tracing questions.
COMMON USER ASKS:
Recent USDC transfers
First recent USDC transfer
WHEN TO USE:
You want ERC-20 style transfer activity filtered by token, sender, or recipient.
You want the fastest answer to a token movement question like "did USDC move?".
You are tracing suspicious, stolen, bridged, or exploit-related token movement and need sender/recipient/transaction pivots.
You want the easiest raw transfer query on an EVM network.
You need the first matching transfer in a bounded window without typing the Transfer topic hash.
DON'T USE:
You need arbitrary event logs beyond token transfers.
EXAMPLES:
Recent USDC transfers: {"network":"base-mainnet","timeframe":"1h","token_symbols":["USDC"],"limit":20}
First recent USDC transfer: {"network":"base-mainnet","timeframe":"1h","token_symbols":["USDC"],"scan_order":"earliest","limit":1}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transfers | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number. RECOMMENDED: <10k blocks for fast responses. | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to block numbers. | |
| from_block | No | Starting block number | |
| scan_order | No | Which side of the block window to scan first. Use earliest for first-transfer questions. | latest |
| to_addresses | No | Recipient addresses | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| token_symbols | No | Token symbols to resolve via open token-list data, e.g. ["USDC"]. Merges with token_addresses. | |
| from_addresses | No | Sender addresses | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| token_addresses | No | Token contract addresses | |
| include_token_info | No | Include token metadata (symbol, decimals) inline. Avoids separate token metadata lookups. | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use token_addresses for deterministic single-contract filters. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description holds the burden. It discloses key behaviors: symbol resolution via 'open token-list data', bounded-window scanning, and scan_order semantics. It does not explicitly state there are no side effects, but the query verb and context make the read-only nature clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections and front-loaded purpose. Each section earns its place; the examples are compact and useful. Slight verbosity prevents a perfect score.
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 15-parameter tool with no output schema and no annotations, the description is thorough: purpose, use cases, exclusions, and two examples. It doesn't mention pagination via cursor, but that is already in the schema. Overall it is highly complete for 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 this is already well-documented. The description adds value with concrete examples showing parameter combinations (e.g., scan_order:'earliest' for first-transfer questions) and notes about merging token_symbols and token_addresses, beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Query token-transfer activity on EVM'. It clearly distinguishes from siblings by noting it avoids typing Transfer event signatures, setting it apart from portal_evm_query_logs and portal_evm_query_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?
Dedicated 'WHEN TO USE' and 'DON'T USE' sections provide explicit context. The 'DON'T USE' entry for arbitrary event logs implies the alternative tool (query_logs), giving clear when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_evm_query_transactionsAInspect
Query raw EVM transactions with optional logs, traces, state-diff context, and evidence pivots for transaction-level investigations.
COMMON USER ASKS:
Recent Base transactions
Filter by sender
First EIP-2930 transaction from Berlin fork
WHEN TO USE:
You need raw transaction records on an EVM network.
You want chain-specific transaction fields or include flags that convenience tools do not expose.
You need exact transaction evidence for an investigation, including sender, receiver, transaction hash, logs, traces, or failed calls.
You need to find the first transaction matching a raw field condition such as transaction type 0x1 from a known block.
You need top-N raw transactions ranked by value, gas used, or effective gas price.
You need top senders or receivers from a bounded transaction window.
You want common method names such as transfer, approve, deposit, or withdraw instead of remembering sighashes.
You want calls to a token contract by symbol, such as transfer calls to USDC, without hardcoding token addresses.
DON'T USE:
You only need a quick recent feed or wallet-level summary.
EXAMPLES:
Recent Base transactions: {"network":"base-mainnet","timeframe":"1h","limit":20}
Filter by sender: {"network":"ethereum-mainnet","timeframe":"6h","from_addresses":["0xabc..."],"limit":20}
First EIP-2930 transaction from Berlin fork: {"network":"ethereum-mainnet","from_block":12244000,"transaction_type":"0x1","scan_order":"earliest","limit":1,"field_preset":"minimal"}
Largest recent calls to a resolved token contract: {"network":"base-mainnet","timeframe":"1h","to_token_symbols":["USDC"],"method":"transfer","order_by":"gas_used_desc","limit":5}
Top senders by transaction count: {"network":"base-mainnet","timeframe":"1h","aggregate_by":"sender","aggregate_metric":"count","limit":10}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions (default: 20, max: 200). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| method | No | FILTER: Common EVM method alias or 4-byte sighash. Examples: "transfer", "approve", "transferFrom", "deposit", "withdraw". Merges with sighash. | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| sighash | No | FILTER: Function sighash (4-byte hex, e.g., '0xa9059cbb' for transfer). Optional if limit <=100. | |
| order_by | No | Optional ranking for top-N questions. Use value_desc, gas_used_desc, or effective_gas_price_desc. | chronological |
| to_block | No | Ending block number. RECOMMENDED: <5k blocks for fast (<500ms) responses. Larger ranges may be slow. | |
| timeframe | No | Time range (e.g., '24h', '7d'). Alternative to from_block/to_block. Supported: 1h, 6h, 12h, 24h, 3d, 7d, 14d, 30d. Large ranges OK with low limit (<=100). | |
| from_block | No | Starting block number (use this OR timeframe). Large ranges OK with low limit (<=100). | |
| last_nonce | No | Maximum nonce | |
| scan_order | No | Which side of the block window to scan first. Normal previews default to latest; transaction_type searches default to earliest, so "first tx type 0x1 from block N" scans forward from from_block. | |
| first_nonce | No | Minimum nonce | |
| aggregate_by | No | Optional bounded aggregation for top sender/receiver questions. Returns ranked address rows instead of raw transactions. | |
| field_preset | No | Field preset: 'minimal' (from/to/value+block, ~70% smaller), 'standard' (hash+gas+timestamp), 'full' (includes input data hex, largest). Use 'minimal' to reduce context usage. | standard |
| include_logs | No | Include logs emitted by transactions | |
| min_gas_used | No | FILTER/RANKING: Minimum receipt gasUsed. Accepts decimal or hex string. | |
| to_addresses | No | FILTER: Recipient addresses (typically contracts being called, or wallets receiving ETH). Optional if limit <=100. | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| min_value_wei | No | FILTER/RANKING: Minimum native token value in wei. Accepts decimal or hex string. | |
| finalized_only | No | Only query finalized blocks | |
| from_addresses | No | FILTER: Sender addresses (wallets or contracts that initiated the transaction). Optional if limit <=100. | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_traces | No | Include traces for transactions | |
| max_scan_blocks | No | Safety cap for first/last/ranked client-side scans. Default: min(window, 10000 blocks). | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline logs, traces, or state diffs are requested. Use 'summary' for counting or profiling. | |
| aggregate_metric | No | Metric used with aggregate_by. count ranks by tx count; value by total native value; gas_used by total gas used; effective_gas_price by max effective gas price. | count |
| to_token_symbols | No | Resolve token symbols via open token-list data and merge them into to_addresses, e.g. transfer/approve calls to USDC. | |
| transaction_type | No | FILTER: EVM transaction type. Accepts decimal or hex strings such as 0, 1, 2, "0x0", "0x1", "0x2". Applied client-side while streaming Portal results; use with scan_order="earliest" and from_block to find the first typed transaction. | |
| contract_creation | No | FILTER: true returns contract-creation transactions; false excludes them. Useful for "first contract creation from this wallet". | |
| include_l2_fields | No | Include L2-specific fields | |
| from_token_symbols | No | Resolve token symbols via open token-list data and merge them into from_addresses. Rare, but useful for token-contract-originated transactions. | |
| transaction_status | No | FILTER: Transaction receipt status. Use "success"/1 or "failed"/0 for failed/reverted transaction searches. | |
| include_state_diffs | No | Include state diffs caused by transactions | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use from_addresses/to_addresses for deterministic single-contract filters. | |
| min_effective_gas_price_wei | No | FILTER/RANKING: Minimum effectiveGasPrice in wei. Accepts decimal or hex string. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It adds useful context beyond the schema: evidence pivots, common method-name aliases, token-symbol resolution, and scan_order defaults ('transaction_type searches default to earliest'). It does not disclose rate limits, error behavior, or explicitly state read-only semantics, but as a query tool the non-mutating nature is clear from 'Query raw EVM transactions.' This is solid but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized with clear headers (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). Every bullet serves a distinct purpose, and the examples are compact and illustrative. The opening sentence front-loads the core purpose. Given the tool's 35 parameters and investigative use cases, this length earns its place without 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?
This is a complex tool with 35 parameters and no output schema. The description covers a wide range of use cases, explicitly mentions optional logs/traces/state-diffs, and provides example inputs. However, it does not describe the output structure (e.g., what fields appear in a transaction record) beyond the schema's field_preset parameter, so the agent must infer response composition. Given the complexity, this is a minor gap in an otherwise comprehensive description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter significance is mostly handled by the schema. The description adds value by showing realistic parameter combinations in EXAMPLES (e.g., transaction_type '0x1' with from_block and scan_order 'earliest') and explaining nuanced concepts like aggregate_by for 'top senders' and to_token_symbols for 'transfer calls to USDC.' This goes beyond simple param descriptions, helping an agent assemble correct invocations.
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+resource: 'Query raw EVM transactions with optional logs, traces, state-diff context, and evidence pivots for transaction-level investigations.' This clearly distinguishes it from sibling tools like portal_evm_query_token_transfers or portal_evm_get_analytics by emphasizing 'raw' and 'transaction-level.' The DON'T USE section further reinforces its scope by excluding quick recent feeds and wallet-level summaries.
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 WHEN TO USE section provides seven concrete scenarios (e.g., 'need raw transaction records on an EVM network', 'find the first transaction matching a raw field condition'), and DON'T USE clearly says to avoid it for 'quick recent feed or wallet-level summary.' However, it does not name specific sibling alternatives like portal_get_recent_activity or portal_get_wallet_summary, instead referring generically to 'convenience tools,' so it stops short of an explicit alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_get_headAInspect
Get just the latest indexed head block or slot for a network.
COMMON USER ASKS:
Latest head
Finalized head
FIRST CHOICE FOR:
getting the current indexed head before building a manual block range
WHEN TO USE:
You only need the current block or slot number.
You need the current head before building a raw block-range query.
DON'T USE:
You want to know if the network is caught up, behind, fresh, or what tables are available.
EXAMPLES:
Latest head: {"network":"base-mainnet"}
Finalized head: {"network":"ethereum-mainnet","type":"finalized"}
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Block type | latest |
| network | Yes | Network name or alias |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds some context with 'indexed' and 'just' indicating a scope limitation, but it does not state whether the operation is read-only, what the return value looks like, or any error behavior. This is a moderate gap for a simple getter.
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 well-structured with a one-sentence summary, clear sections (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES), and no redundant content. Each section earns its place and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters and no output schema, the description is highly complete. It covers the purpose, common use cases, exclusions, and example invocations. The only missing piece is return format, but that is likely self-evident for a 'get head' operation and not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds value through concrete examples mapping 'latest' and 'finalized' to the type parameter and showing network aliases. This clarifies usage beyond the bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get just the latest indexed head block or slot for a network', providing a specific verb and resource. It distinguishes from siblings by positioning itself as the first choice for head retrieval and explicitly excluding network status or activity queries.
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 includes explicit WHEN TO USE and DON'T USE sections, listing concrete use cases and exclusions. It also labels itself as FIRST CHOICE FOR, giving clear guidance on when this tool should be selected over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_get_network_infoAInspect
Answer "is this network caught up?" with indexing freshness, lag, heads, and available tables.
COMMON USER ASKS:
Is Base caught up?
FIRST CHOICE FOR:
checking indexing head, lag, tables, and capabilities for one network
WHEN TO USE:
You want to know whether a network is indexed, fresh, caught up, or behind before querying.
You need chain family, real-time status, or available tables for a network.
DON'T USE:
You only need the latest block or slot number.
EXAMPLES:
Is Base caught up?: {"network":"base-mainnet"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Network name or alias |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals the output topics (freshness, lag, heads, tables) and implies a read-only info query, but it does not explicitly state that no state is modified or describe data source specifics. For a simple info tool this is acceptable but lacks explicit side-effect disclosure.
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 well-structured with labeled sections and front-loads the core purpose. It is somewhat verbose with repeated guidance, but each section adds distinct value, so no content is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no annotations, and no output schema, the description provides all necessary context: what it does, when to use, when not to use, and an example. It fully equips an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for the single parameter is 100%, so the baseline is 3. The description adds a concrete example ('base-mainnet') showing the expected value format, which goes beyond the schema's generic 'Network name or alias' and helps invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description directly states the tool answers 'is this network caught up?' with indexing freshness, lag, heads, and available tables. It clearly distinguishes from sibling tools by focusing on network info rather than block, transaction, or analytics queries.
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 'FIRST CHOICE FOR', 'WHEN TO USE', and 'DON'T USE' sections. It directs users to avoid this tool when only needing the latest block/slot, implicitly pointing to alternatives like portal_get_head. This gives clear decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_get_recent_activityAInspect
Get a simple recent-activity feed across EVM, Solana, Bitcoin, or Hyperliquid with chronological paging and investigation pivots.
COMMON USER ASKS:
Recent activity on Base
Recent Hyperliquid fills
FIRST CHOICE FOR:
recent activity on any supported network without manual block math
questions like "what has been happening on Base lately?"
first-pass incident triage when the user asks what happened recently on a network
WHEN TO USE:
You want a quick recent-activity feed for a network.
You want to ask what has been happening lately on a network and see the newest activity first.
You want the simplest starting point before reaching for raw VM-specific query tools.
You are investigating an incident and need a bounded, recent evidence timeline before narrowing to wallets, transfers, logs, or fills.
DON'T USE:
You need raw logs, instructions, or chain-specific fields that only raw query tools return.
You want a chart over time rather than a recent feed.
EXAMPLES:
Recent activity on Base: {"network":"base-mainnet","timeframe":"1h","limit":10}
Recent Hyperliquid fills: {"network":"hyperliquid-fills","timeframe":"1h","limit":10}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (supports short names: 'polygon', 'base', 'ethereum', 'arbitrum', etc.). Optional when continuing with cursor. | |
| timeframe | No | Time period or block count. Examples: '100' (default), '1h', '6h', '24h', '7d', '3d'. | 100 |
| to_addresses | No | Filter by recipient addresses | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_addresses | No | Filter by sender addresses | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses useful behavioral traits: 'chronological paging' and 'investigation pivots', and describes the feed as 'bounded' and 'recent evidence timeline', implying a read-only, safe operation. It could be more explicit about the return shape or authentication needs, but the guidance provided 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?
The description is longer than two sentences but well-structured with clear section headings (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES). Each sentence contributes to usability, and the examples are compact. The structure aids scanning without being redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no output schema, many siblings), the description is remarkably complete. It covers purpose, usage context, exclusions, and concrete examples. It does not explain return values, but with no output schema and a feed-like tool, the provided context is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 100%, the description adds concrete examples that disambiguate parameter usage, such as network short names ('base-mainnet') and timeframe formats ('1h', '100'). This clarifies how to combine network, timeframe, and limit in practice, which is value beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a simple recent-activity feed across EVM, Solana, Bitcoin, or Hyperliquid'. It clearly distinguishes itself from sibling raw query tools by emphasizing 'simple' and 'recent-activity feed' rather than raw logs or chain-specific fields. The 'FIRST CHOICE FOR' section further reinforces its unique role as a starting point for incident triage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'DON'T USE' sections, listing concrete scenarios like 'You want a quick recent-activity feed' and exclusions like 'You need raw logs, instructions, or chain-specific fields'. It also names alternatives implicitly by referring to 'raw VM-specific query tools', giving an agent clear decision boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_get_time_seriesAInspect
Build simple activity charts and other time-series views across supported VMs, including compare-previous windows and grouped EVM contract trends.
COMMON USER ASKS:
Base transactions per 15m bucket
Compare two periods
FIRST CHOICE FOR:
activity over time, compare-current-vs-previous, grouped trends, and simple activity charts
WHEN TO USE:
You want chart-ready metric buckets over time.
You want a simple activity chart for a network, defaulting to a 6h interactive window unless a longer window is explicitly requested.
You want to compare the current period to the previous period.
DON'T USE:
You need raw record lists instead of aggregated buckets.
You need DEX pool candles or OHLC output.
EXAMPLES:
Base transactions per 15m bucket: {"network":"base-mainnet","metric":"transaction_count","duration":"6h","interval":"15m"}
Compare two periods: {"network":"solana-mainnet","metric":"transaction_count","duration":"1h","interval":"5m","compare_previous":true}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| metric | Yes | Metric to aggregate over time | |
| address | No | Optional: Filter to specific contract address for contract-specific trends | |
| network | Yes | Network name (supports short names: 'ethereum', 'polygon', 'base', etc.) | |
| duration | No | Total time period to analyze. Defaults to "6h" for interactive use. Explicit longer windows like "24h" or "7d" are supported but can take longer. Accepts compact durations like "30m" or natural phrases like "past 30 minutes". | 6h |
| group_by | No | Optional grouping mode. contract is currently supported only for EVM transaction_count | none |
| interval | Yes | Time bucket interval (5m, 15m, 1h, 6h, 1d) | |
| group_limit | No | Maximum number of contract groups when group_by=contract | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "24h ago". | |
| compare_previous | No | Compare the selected window against the immediately previous window |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explains behavioral traits such as the default 6h interactive window, longer windows taking longer, and returning 'chart-ready metric buckets.' However, it does not explicitly state that it is read-only or describe the exact return structure, which would be useful given the lack of an output 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?
The description is well-structured with clear sections (purpose, common user asks, first choice, when to use, don't use, examples). Every sentence contributes useful information, and the examples are concise. It maintains high information density without 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 has 11 parameters, no output schema, and no annotations, the description is relatively complete: it covers purpose, usage guidance, examples, and limitations. However, it only vaguely refers to 'chart-ready metric buckets' without specifying the output format or fields, which is a gap for agents expecting structured results. More explicit return-value documentation would push this to 5.
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 covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds value beyond the schema by providing concrete JSON examples for 'Base transactions per 15m bucket' and 'Compare two periods,' demonstrating how parameters like network, metric, duration, interval, and compare_previous combine. It also clarifies the default duration and interval behavior.
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 builds 'simple activity charts and other time-series views across supported VMs,' which is a specific verb+resource. It differentiates from siblings by explicitly mentioning 'compare-previous windows' and 'grouped EVM contract trends,' and the 'DON'T USE' section contrasts with OHLC and raw record tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance with 'FIRST CHOICE FOR,' 'WHEN TO USE,' and 'DON'T USE' sections. It names alternatives like 'raw record lists' and 'DEX pool candles or OHLC output,' and gives examples for common scenarios, making it clear when to select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_get_wallet_summaryAInspect
Summarize wallet activity and fund flow with shared overview, asset movement, counterparties, evidence pivots, and follow-up filters across supported networks.
COMMON USER ASKS:
EVM wallet fund-flow triage
Solana wallet activity and fee flow
FIRST CHOICE FOR:
one-call wallet analysis across supported VMs
suspicious wallet triage, fund-flow direction, counterparties, and next evidence pivots before drilling into raw records
WHEN TO USE:
You want a single high-level answer about what one wallet has been doing and where value appears to move.
You want inbound/outbound flow, top counterparties, largest movements, and exact next pivots before drilling into raw transactions or fills.
The user asks to investigate a suspicious wallet, stolen-funds path, exploit counterparty, or incident address.
DON'T USE:
You need every raw record with full chain-specific fields and no summarization.
EXAMPLES:
EVM wallet fund-flow triage: {"network":"base-mainnet","address":"0xabc...","timeframe":"24h"}
Solana wallet activity and fee flow: {"network":"solana-mainnet","address":"Vote111...","timeframe":"6h"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor from a previous response | |
| address | No | Wallet address to analyze. Optional when continuing with cursor. | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| timeframe | No | Look-back period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'. | 1000 |
| include_nfts | No | Include NFT transfers (ERC721/1155) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_tokens | No | Include ERC20 token transfers | |
| limit_per_type | No | Max items per category (txs, tokens, nfts) | |
| response_format | No | Response format: defaults to 'compact' for a readable wallet investigation. Use 'summary' for headline flow only or 'full' for all returned activity rows. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly conveys that this is a summarization (read-oriented) operation, returns 'inbound/outbound flow, top counterparties, largest movements, and exact next pivots', and implies non-raw output. However, it does not explicitly state that it is non-destructive or mention potential rate limits/pagination caveats, though the nature of 'summarize' and evidence pivots sufficiently indicates safe read 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 well-structured with clear headings (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES) and front-loaded with a concise summary sentence. There is slight redundancy between 'FIRST CHOICE FOR' and 'WHEN TO USE' (both mention suspicious wallet triage), and the overall length is justified but could be slightly tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema and annotations, the description provides enough context: it explains the tool's role in the ecosystem (summary vs raw records), expected output components (overview, movements, counterparties, pivots), and includes concrete examples for two networks. It does not enumerate all supported networks or explain cursor-based pagination, but those are adequately covered by the schema, and the description compensates well for the missing output schema by describing the high-level return content.
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 baseline is 3. The description does not add per-parameter semantics beyond the schema, but the examples ('EVM wallet fund-flow triage: {"network":"base-mainnet","address":"0xabc...","timeframe":"24h"}') reinforce how network, address, and timeframe map to real use. This is marginal added value, keeping the score at 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 uses a specific verb 'summarize' with a precise resource ('wallet activity and fund flow') and details the output components: 'shared overview, asset movement, counterparties, evidence pivots, and follow-up filters'. It clearly distinguishes from sibling raw-query tools by stating it is the 'FIRST CHOICE FOR one-call wallet analysis' and 'before drilling into raw records', and the DON'T USE section explicitly excludes raw record retrieval.
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 guidance with WHEN TO USE conditions ('You want a single high-level answer...', 'You want inbound/outbound flow...', 'The user asks to investigate a suspicious wallet...') and a DON'T USE condition ('You need every raw record with full chain-specific fields and no summarization'). It also names the alternative category (raw transactions/fills) by contrast, satisfying the when-not/alternatives criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_hyperliquid_get_analyticsAInspect
Get the big-picture Hyperliquid fill analytics with top traders, volume by coin, fees, and PnL.
COMMON USER ASKS:
Hyperliquid fill snapshot
Who traded the most?
WHEN TO USE:
You want network-level Hyperliquid fill analytics.
You want to know who traded the most, which coins had volume, or how fees and PnL looked.
You want grouped aggregate sections without stitching raw fills together yourself.
DON'T USE:
You need individual fill records or OHLC candles.
EXAMPLES:
Hyperliquid fill snapshot: {"network":"hyperliquid-fills","timeframe":"1h"}
Who traded the most?: {"network":"hyperliquid-fills","timeframe":"1h"}
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter by asset symbols (e.g., ["BTC", "ETH"]) | |
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor for ranked analytics sections | |
| network | No | Network name (default: 'hyperliquid-fills') | hyperliquid-fills |
| timeframe | No | Time range: '1h', '6h', '24h'. Default: '1h' | 1h |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| section_limit | No | Per-section page size for ranked sections. Default: 6 | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (smallest snapshot), 'compact' (chat-sized ranked sections, default), 'full' (complete analytics). | compact |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It communicates that this is a read-only aggregated analytics operation ('grouped aggregate sections', 'big-picture') and describes the scope. However, it does not mention execution cost, pagination behavior beyond what's in schema, or how the 'mode' parameter affects runtime behavior. The description adds some behavioral context but not complete coverage.
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 organized into clear sections (summary, asks, when/don't use, examples) with each earning its place. It is thorough without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 optional parameters and no output schema, the description provides strong context for purpose, use cases, and exclusions, plus representative examples. It lacks some detail on the exact shape of the response and the meaning of mode/response_format, but the schema covers the parameters. Given the complexity, this is adequately complete.
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 baseline is 3. The examples include concrete values for network and timeframe, illustrating common usage. However, the description does not explain parameters like mode, cursor, response_format, or timestamp formats beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the big-picture Hyperliquid fill analytics' and enumerates concrete output dimensions (top traders, volume by coin, fees, PnL). It clearly differentiates from sibling tools like portal_hyperliquid_query_fills and portal_hyperliquid_get_ohlc through the DON'T USE section.
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 WHEN TO USE and DON'T USE sections provide explicit guidance, including when not to use (individual fills or OHLC candles), which implicitly directs to siblings. COMMON USER ASKS helps with typical intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_hyperliquid_get_ohlcAInspect
Build chart-ready Hyperliquid trade OHLC candles with fixed buckets and auto intervals.
COMMON USER ASKS:
BTC candles
WHEN TO USE:
You want candles for one coin on Hyperliquid.
You need chart-ready OHLC, volume, and VWAP data from fills.
DON'T USE:
You want scalar time-series buckets or raw fills.
EXAMPLES:
BTC candles: {"network":"hyperliquid-fills","coin":"BTC","duration":"6h","interval":"auto"}
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Asset symbol to build candles for (for example: "BTC", "ETH", "SOL"). Optional when continuing with cursor. | |
| user | No | Optional trader wallet address (0x-prefixed, lowercase) | |
| cursor | No | Continuation cursor from a previous candle page | |
| network | No | Network name (default: 'hyperliquid-fills') | hyperliquid-fills |
| duration | No | How much recent trading history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes". | 1h |
| interval | No | Candle interval. Use auto for chart-friendly defaults: 1h→5m, 6h→15m, 12h→30m, 24h→1h. | auto |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals the tool aggregates fills into fixed buckets, uses auto intervals with explicit mapping (1h→5m, etc.), and returns OHLC, volume, and VWAP. This is meaningful behavioral context beyond the tool name.
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 well-structured with clear sections (purpose, when/don't, example). It is front-loaded with the primary purpose and each section earns its place. The example is concise and illustrative.
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 6 parameters, no output schema, and no annotations. The description covers the data source (fills), output components (OHLC, volume, VWAP), and provides a concrete example. It doesn't explain pagination or return structure in detail, but the schema covers parameters and the example compensates.
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 6 parameters are already described in the schema with examples and defaults (100% coverage). The description adds only an example JSON, which is helpful but not additional semantic meaning for parameters. Per baseline, score 3.
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-resource pair: 'Build chart-ready Hyperliquid trade OHLC candles with fixed buckets and auto intervals.' It clearly distinguishes from siblings by noting 'DON'T USE: scalar time-series buckets or raw fills', which differentiates it from portal_get_time_series and portal_hyperliquid_query_fills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'WHEN TO USE' and 'DON'T USE' sections. When: 'you want candles for one coin on Hyperliquid' and 'need chart-ready OHLC, volume, and VWAP data from fills.' Don't: 'scalar time-series buckets or raw fills.' This gives clear selection guidance, though it doesn't name alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_hyperliquid_query_fillsAInspect
Query raw individual Hyperliquid fills with trader, coin, fee, PnL, and builder context.
COMMON USER ASKS:
Recent BTC fills
WHEN TO USE:
You need raw fill records on Hyperliquid.
You want to filter by trader, coin, direction, builder, or fee token.
DON'T USE:
You want the big picture, top traders, grouped aggregates, or candles instead of raw fill rows.
EXAMPLES:
Recent BTC fills: {"network":"hyperliquid-fills","timeframe":"1h","coin":["BTC"],"limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Trade direction: "Open Long", "Close Long", "Open Short", "Close Short" | |
| coin | No | Asset symbols (e.g., "ETH", "BTC", "SOL") | |
| user | No | Trader wallet addresses (0x-prefixed, lowercase) | |
| cloid | No | Client order IDs (0x-prefixed hex) | |
| limit | No | Max fills to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| builder | No | Builder addresses (0x-prefixed, lowercase) | |
| network | No | Network name (default: 'hyperliquid-fills'). Optional when continuing with cursor. | hyperliquid-fills |
| to_block | No | Ending block number | |
| fee_token | No | Fee token symbols | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| include_pnl | No | Include closedPnl and startPosition fields | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Use 'summary' for aggregate stats or 'full' when you truly need every fill field. | |
| include_builder_info | No | Include builder and builderFee fields |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It correctly labels the tool as a query, mentions the raw granularity, and notes the filter dimensions, but it does not mention pagination (cursor), response format defaults, or any read-only/safety implications. This is adequate but not rich.
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 well-structured with a clear summary, user ask examples, explicit when/don't-use guidance, and a concrete example. Each section serves a distinct purpose without fluff, and the most important 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's 18 parameters and lack of output schema, the description effectively covers what the tool does, when to use it, and provides a usage example. It does not describe return value shape or pagination behavior, but the schema covers parameter details, and the example demonstrates a realistic call. This is nearly complete for a query 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 coverage is 100%, so the baseline is 3. The description paraphrases the key filters (trader, coin, direction, builder, fee token) and provides a realistic example with coin and timeframe, which adds a small amount of interpretive value over the raw schema descriptions. However, it does not explain any parameter mechanics 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 opens with a specific verb and resource: 'Query raw individual Hyperliquid fills' with explicit context fields (trader, coin, fee, PnL, builder). It clearly distinguishes from siblings by stating this is for raw fills, not aggregates or candles, and the DON'T USE section reinforces the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The WHEN TO USE and DON'T USE sections provide explicit guidance on when to invoke this tool and when to avoid it in favor of aggregate/big-picture tools. It names alternatives conceptually (top traders, grouped aggregates, candles) and gives a concrete example, making the decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_list_networksAInspect
Find the right network or chain name to use across EVM, Solana, Bitcoin, Substrate, and Hyperliquid.
COMMON USER ASKS:
Find Base-like networks
Show Solana mainnets
Show Substrate mainnets
FIRST CHOICE FOR:
finding the correct network before any other query
WHEN TO USE:
You are not sure which network name, chain name, or alias to use.
You want to filter networks by VM family, network type, or real-time availability.
DON'T USE:
You already know the exact network and want live data from that network.
EXAMPLES:
Find Base-like networks: {"query":"base","limit":10}
Show Solana mainnets: {"vm":"solana","network_type":"mainnet"}
Show Substrate mainnets: {"vm":"substrate","network_type":"mainnet"}
| Name | Required | Description | Default |
|---|---|---|---|
| vm | No | Filter by VM family | |
| limit | No | Max results to return (default: 25, max: 100) | |
| query | No | Search by name, alias, or chain ID | |
| network_type | No | Filter by network type | |
| real_time_only | No | Only show networks with a real-time indexed head |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It adds context that this tool is a metadata/discovery operation (not live data), supports real-time availability filtering, and serves as a prerequisite lookup step. However, it does not explicitly state the return format or describe the 'real-time indexed head' concept beyond the parameter name, leaving a small gap.
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 well-structured into sections (common asks, first choice, when to use, don't use, examples). Every section serves a distinct purpose and adds value; there is no fluff. The opening sentence is a clear front-loaded purpose. Given the tool's complexity (5 parameters, multiple VM families), this length is appropriate and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers usage scenarios and parameter examples thoroughly, but with no output schema, it does not describe what the returned network list contains or how results are structured. For a simple list/discovery tool, this is a moderate gap; the name implies a list, but exact return fields are left unspecified. Thus, it is minimally complete but not fully explanatory.
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's examples ('Find Base-like networks: {"query":"base","limit":10}') illustrate parameter combinations but add little semantic meaning beyond what the schema already provides for each parameter. It does not clarify value formats or edge cases, so it does not push above 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 opens with a specific verb+resource: 'Find the right network or chain name to use across EVM, Solana, Bitcoin, Substrate, and Hyperliquid.' This clearly distinguishes the tool from its data-query siblings, which focus on live chain data rather than network discovery. The purpose is unambiguous and well-scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance, including a 'FIRST CHOICE' section and a 'DON'T USE' section: 'You already know the exact network and want live data from that network.' It also lists specific filter use cases (VM family, network type, real-time availability), giving clear criteria for invocation. This exceeds baseline guidance by naming exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_resolve_entityAInspect
Resolve user-facing blockchain entities into query-ready identifiers, with ambiguity kept explicit.
COMMON USER ASKS:
Resolve USDC on Base
Resolve WETH on Ethereum
Resolve BAYC contract
FIRST CHOICE FOR:
resolving a token symbol like USDC to token contract addresses
resolving EVM contract aliases, protocol names, pool identifiers, or Hyperliquid coin names before querying
checking which token-list addresses a symbol maps to before querying logs or transfers
turning a user-friendly token name into deterministic EVM filters
WHEN TO USE:
The user names a token symbol such as USDC, WETH, DAI, or PEPE and you need contract addresses before querying raw data.
The user names a well-known EVM contract, protocol, pool identifier, or Hyperliquid ticker and you need a deterministic follow-up filter.
You need to disambiguate bridged token variants on an EVM network.
You want a source-backed token address rather than relying on memory or hardcoded constants.
DON'T USE:
You already have the exact address, pool id, protocol slug, or coin filter and can pass it directly.
EXAMPLES:
Resolve USDC on Base: {"network":"base-mainnet","kind":"token","query":"USDC","limit":10}
Resolve WETH on Ethereum: {"network":"ethereum-mainnet","kind":"token","query":"WETH","limit":5}
Resolve BAYC contract: {"network":"ethereum-mainnet","kind":"contract","query":"bored apes"}
Resolve Hyperliquid coin: {"kind":"hyperliquid_coin","query":"bitcoin"}
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Entity kind to resolve: token, contract alias/address, pool identifier, protocol name, or Hyperliquid coin/ticker. | token |
| limit | No | Maximum matches to return. | |
| query | Yes | Entity string to resolve, e.g. "USDC", "bayc", "uniswap", "BTC", or "0x...". | |
| network | No | Network name or alias when the entity is network-scoped, e.g. "base", "ethereum", "arbitrum-one", or "hyperliquid-fills". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: ambiguity is "kept explicit", it returns deterministic filters, and it provides source-backed addresses. However, it does not describe the return format, pagination behavior, or error/ambiguity handling in detail, but the examples and mention of 'limit' hint at multiple matches.
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 well-structured with clear section headers, front-loaded with the core purpose. Every section earns its place: common asks, usage criteria, exclusions, and examples. It is appropriately sized for the tool's complexity and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description should explain what the tool returns. It does mention "query-ready identifiers", "token contract addresses", and "EVM filters", but does not fully specify the response structure or edge cases. However, the examples and extensive usage guidance make it largely complete for an agent to correctly select and invoke 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?
Schema coverage is 100%, so baseline is 3. The description adds significant value by providing concrete example payloads for common asks (e.g., USDC on Base) and explaining how to combine `kind`, `network`, and `query`. This goes beyond the schema's individual parameter descriptions and clarifies usage patterns.
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+resource: "Resolve user-facing blockchain entities into query-ready identifiers". It clearly distinguishes the tool from sibling query/analytics tools by focusing on resolution, and explicitly lists "FIRST CHOICE FOR" scenarios that separate it from alternatives.
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 has dedicated "WHEN TO USE" and "DON'T USE" sections with explicit conditions and examples. It tells the agent exactly when to use this tool (e.g., user names a token symbol) and when not to (if exact address/filter already known), providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_solana_get_analyticsAInspect
Get the big picture for Solana throughput, fees, wallet activity, and optional top-program usage.
COMMON USER ASKS:
Solana network snapshot
Include top programs
FIRST CHOICE FOR:
the big picture for Solana right now
WHEN TO USE:
You want the big picture for Solana right now.
You want a network health snapshot for Solana.
You want throughput, fee, success-rate, or top-program analytics rather than raw records.
DON'T USE:
You want chart buckets or raw transaction/instruction records.
EXAMPLES:
Solana network snapshot: {"network":"solana-mainnet","timeframe":"1h"}
Include top programs: {"network":"solana-mainnet","timeframe":"1h","include_programs":true}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor for paginating top_programs | |
| network | No | Network name (default: solana-mainnet) | solana-mainnet |
| timeframe | No | Time range. Accepts compact durations like '15m' or natural phrases like 'past 30 minutes'. Optional; defaults to a 1h analysis window. | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| program_limit | No | Max top-program rows to return per page when include_programs is enabled | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| response_format | No | Response format: 'summary' (high-level metrics), 'compact' (core sections), 'full' (complete analytics). | full |
| include_programs | No | Include top programs by instruction count (requires an extra instruction scan and is slower) | |
| include_compute_units | No | Include average compute-unit stats across the full range (disabled by default for speed) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It implies a read-only analytics operation via 'Get' and 'analytics' and clarifies it does not return raw records, but it does not explicitly state side-effect-free behavior, pagination behavior, or performance/rate-limit considerations.
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 well-structured with a front-loaded summary and clear labeled sections (COMMON USER ASKS, FIRST CHOICE, WHEN TO USE, DON'T USE, EXAMPLES). It repeats 'big picture for Solana right now' a few times but remains appropriately concise and scannable.
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 10-parameter analytics tool with no output schema and no annotations, the description provides strong selection context: purpose, when to use, when not to use, and illustrative examples. It does not describe the output structure or advanced parameter interactions, but the schema covers parameter details and examples cover common flows.
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 example payloads showing common uses of network, timeframe, and include_programs, but it does not add meaningful semantics beyond what parameter descriptions already provide for cursor, mode, or timestamps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the big picture for Solana throughput, fees, wallet activity, and optional top-program usage.' It clearly distinguishes from sibling raw-record tools through the DON'T USE section, which excludes raw transaction/instruction records.
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 WHEN TO USE and DON'T USE sections provide concrete use cases (network health snapshot, throughput/fee analytics) and exclusions (chart buckets, raw records). However, no specific alternative sibling tool is named, falling just short of the highest guidance standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_solana_query_instructionsAInspect
Query raw Solana instructions with program and account filters.
COMMON USER ASKS:
Token Program instructions
WHEN TO USE:
You need program-level or account-level instruction activity.
You want to inspect Token Program, Jupiter, System Program, or Anchor discriminator activity.
DON'T USE:
You only need transaction-level activity and not individual instructions.
EXAMPLES:
Token Program instructions: {"network":"solana-mainnet","timeframe":"1h","program_id":["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],"limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| a0 | No | Account at index 0. You can pass a single string or an array. | |
| a1 | No | Account at index 1. You can pass a single string or an array. | |
| a2 | No | Account at index 2. You can pass a single string or an array. | |
| a3 | No | Account at index 3. You can pass a single string or an array. | |
| a4 | No | Account at index 4. You can pass a single string or an array. | |
| a5 | No | Account at index 5. You can pass a single string or an array. | |
| a6 | No | Account at index 6. You can pass a single string or an array. | |
| a7 | No | Account at index 7. You can pass a single string or an array. | |
| a8 | No | Account at index 8. You can pass a single string or an array. | |
| a9 | No | Account at index 9. You can pass a single string or an array. | |
| d1 | No | 1-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d2 | No | 2-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d4 | No | 4-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d8 | No | 8-byte discriminator filter - Anchor (0x-prefixed hex). You can pass a single string or an array. | |
| a10 | No | Account at index 10. You can pass a single string or an array. | |
| a11 | No | Account at index 11. You can pass a single string or an array. | |
| a12 | No | Account at index 12. You can pass a single string or an array. | |
| a13 | No | Account at index 13. You can pass a single string or an array. | |
| a14 | No | Account at index 14. You can pass a single string or an array. | |
| a15 | No | Account at index 15. You can pass a single string or an array. | |
| limit | No | Max instructions | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending slot number. Keep ranges reasonable for performance. | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. Solana slots are ~400ms. | |
| from_block | No | Starting slot number (use this OR timeframe) | |
| program_id | No | Program IDs. You can pass a single string or an array. | |
| include_logs | No | Include program logs | |
| is_committed | No | Only committed transactions | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized slots | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| mentions_account | No | Accounts mentioned anywhere in the instruction. You can pass a single string or an array. | |
| include_transaction | No | Include transaction data | |
| transaction_fee_payer | No | Fee payer filter. You can pass a single string or an array. | |
| include_inner_instructions | No | Include inner (CPI) instructions | |
| include_transaction_balances | No | Include SOL balance changes | |
| include_transaction_instructions | No | Include all instructions from the parent transaction (sibling instructions) | |
| include_transaction_token_balances | No | Include token balance changes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does clarify that the tool returns 'raw' instructions (not decoded) and implies read-only behavior, but it omits details about pagination (cursor), output structure, or performance characteristics. The example hints at usage but doesn't disclose rate limits or response shape, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with clear headings (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). Every section serves a purpose, and the example is concise. No redundancy or filler; it front-loads the core purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 39 parameters and no output schema, the description covers the essential context: what the tool does, when to use it, and how to frame a common query via example. It doesn't mention return format or pagination, but given the rich schema and focused use cases, it is close to fully adequate for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by providing a full example with program_id (as an array), network, timeframe, and limit, showing how to compose filters. This concrete illustration helps agents understand parameter usage more effectively than the raw 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 opens with 'Query raw Solana instructions with program and account filters,' a specific verb+resource statement that clearly distinguishes this tool from siblings like portal_solana_query_transactions (transaction-level). It also names concrete use cases (Token Program, Jupiter, System Program, Anchor discriminators), reinforcing its distinctive 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?
Explicit 'WHEN TO USE' and 'DON'T USE' sections provide clear context: use for program-level or account-level instruction activity, avoid for transaction-level queries. A concrete example for Token Program instructions further demonstrates when and how to invoke the tool, leaving little ambiguity about appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_solana_query_transactionsAInspect
Query raw Solana transactions with optional balances, rewards, logs, and instruction context.
COMMON USER ASKS:
Recent Solana transactions
Filter by program
WHEN TO USE:
You need raw Solana transaction records.
You want Solana-specific filters or include flags that convenience tools do not expose.
DON'T USE:
You only want recent activity or a compact network summary.
EXAMPLES:
Recent Solana transactions: {"network":"solana-mainnet","timeframe":"1h","limit":20}
Filter by program: {"network":"solana-mainnet","timeframe":"1h","program_id":["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],"limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending slot number | |
| fee_payer | No | Fee payer addresses | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting slot number (use this OR timeframe) | |
| include_logs | No | Include program logs | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized slots | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_rewards | No | Include block rewards (validator staking rewards). Filter by pubkey using mentions_account. | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline instruction, balance, log, or reward context is requested. Use 'summary' for aggregate stats. | |
| include_balances | No | Include SOL balance changes | |
| mentions_account | No | Accounts mentioned anywhere in the transaction | |
| include_instructions | No | Include instruction data | |
| include_token_balances | No | Include SPL token balance changes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose pagination behavior, default response format, network fallback, or performance implications of include flags. It only repeats the existence of options without behavioral detail.
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 organized with clear sections and examples, making it easy to scan. However, the inclusion of the invalid 'program_id' example and some redundancy (e.g., repeating 'raw') slightly detract from an otherwise crisp structure.
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 17 parameters and no output schema, yet the description does not cover cursor pagination, network requirements, or output shape. The two examples only address simple cases, leaving many common tasks (e.g., using timestamps, filters, response formats) undocumented.
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?
While schema coverage is complete (100%), the description adds an example using 'program_id' which is not present in the input schema, misleading the agent. It also fails to explain parameter interactions (e.g., from_block vs timeframe, response_format defaults) beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries raw Solana transactions with optional context (balances, rewards, logs, instructions). The verb 'Query' is specific and the resource is well-defined. It differentiates from sibling tools like portal_solana_query_instructions and portal_solana_get_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'DON'T USE' sections, along with common user asks. It clearly states when to choose this tool over convenience tools and when to avoid it, making selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_substrate_get_analyticsAInspect
Analytics snapshot for Substrate or Polkadot activity in an indexed window, with event, call, and extrinsic counts plus top event and call names.
COMMON USER ASKS:
Polkadot activity snapshot
Big picture for Polkadot activity
How is Polkadot doing?
FIRST CHOICE FOR:
Polkadot activity analytics in an indexed window
how Polkadot is doing in an indexed window
analytics snapshot for Polkadot or another Substrate network in an indexed window
WHEN TO USE:
You want Polkadot activity analytics in a selected indexed window.
You want to ask "how is Polkadot doing in this indexed window?" and get an analytics answer rather than just network freshness metadata.
You want a quick Substrate network snapshot or health check.
You want top pallet events and calls rather than raw rows.
You want to know how a Substrate network is doing in the selected indexed window.
DON'T USE:
You need full raw event or call records.
EXAMPLES:
Polkadot activity snapshot: {"network":"polkadot","timeframe":"1h"}
Big picture for Polkadot activity: {"network":"polkadot","timeframe":"1h"}
How is Polkadot doing?: {"network":"polkadot","timeframe":"6h"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | No | Substrate network name (default: polkadot) | polkadot |
| to_block | No | Ending block number | |
| timeframe | No | Time range like '1h', '6h', or '24h'. Default: '1h' | |
| from_block | No | Starting block number (use this OR timeframe) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| section_limit | No | Max rows to keep in ranked event and call sections | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (headline metrics only), 'compact' (core sections), 'full' (full dashboard payload) | full |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions the 'indexed window' scope, indicating the tool returns aggregated snapshots over already-indexed data rather than live raw records. It also notes that the default is 'complete requested-window analysis' via the schema's mode field, but the description itself does not elaborate on potential limitations or error scenarios, keeping it from a top score.
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 well-structured with headers and a clear front-loaded first sentence, but it suffers from redundancy—phrases like 'Polkadot activity analytics in an indexed window' and 'how is Polkadot doing' appear multiple times across 'COMMON USER ASKS', 'FIRST CHOICE FOR', and 'WHEN TO USE.' It could be trimmed significantly without losing message 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?
Given 9 parameters, no annotations, and no output schema, the description does a solid job outlining the tool's purpose and expected outputs ('event, call, and extrinsic counts plus top event and call names'). It also clarifies the indexed-window constraint and provides usage examples. However, it does not describe edge cases or exact response structure, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 9 parameters with individual descriptions (100% coverage), so the baseline is 3. The description adds example payloads (e.g., {"network":"polkadot","timeframe":"1h"}) and contextual hints like 'top event and call names' matching section_limit, but it does not introduce new parameter meanings 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 opens with 'Analytics snapshot for Substrate or Polkadot activity in an indexed window, with event, call, and extrinsic counts plus top event and call names,' which is a specific verb+resource+scope statement. It clearly differentiates from raw query siblings like portal_substrate_query_events and portal_substrate_query_calls by emphasizing aggregated counts and top names.
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 includes explicit 'WHEN TO USE' and 'DON'T USE' sections, stating when to use the tool (e.g., 'quick Substrate network snapshot or health check') and when to avoid it ('You need full raw event or call records'). This provides direct decision guidance relative to the sibling query tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_substrate_query_callsAInspect
Query raw Substrate or Polkadot calls with pallet/call-name filters and optional child-call, emitted-event, or extrinsic context.
COMMON USER ASKS:
Recent Balances calls
Polkadot calls with emitted events
FIRST CHOICE FOR:
raw Substrate or Polkadot call rows, especially when you want the events emitted by those calls
WHEN TO USE:
You need raw call records on a Substrate network.
You want pallet call activity like Balances.transfer_keep_alive or Ethereum.transact.
You want calls plus the events emitted by those calls.
DON'T USE:
You want events or aggregate analytics rather than call rows.
EXAMPLES:
Recent Balances calls: {"network":"polkadot","timeframe":"1h","call_names":["Balances.transfer_keep_alive"],"limit":20}
Polkadot calls with emitted events: {"network":"polkadot","timeframe":"1h","call_names":["ParaInherent.enter"],"include_events":true,"limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max calls to return | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Substrate network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g. '1h', '24h'). Alternative to from_block/to_block. | |
| call_names | No | Optional qualified call names like Timestamp.set or Balances.transfer_keep_alive | |
| from_block | No | Starting block number | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| include_stack | No | Attach the parent call stack for each matching call | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| include_events | No | Attach events emitted directly by each matching call | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested subcalls, events, and extrinsic context in a smaller inline shape. | |
| include_subcalls | No | Attach direct descendant calls inline for each matching call | |
| include_extrinsic | No | Attach the parent extrinsic inline for each matching call |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns raw call rows and optionally attaches events, subcalls, stack, or extrinsic context. However, it does not mention pagination behavior (cursor, limit default) or the default response format, which are relevant behavioral traits for an agent using the 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 structured with clear headers (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES). The opening sentence is a concise summary, and each section delivers actionable info without fluff. Examples are compact and illustrate parameter usage efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 15 parameters and no output schema or annotations, the description covers primary use cases, distinguishes from sibling tools, and provides two concrete examples. It does not fully specify return shape or pagination, but given the schema covers limit/cursor/response_format, the description is sufficiently complete for practical selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value with examples showing how to combine parameters (e.g., network, timeframe, call_names, include_events, limit) and introduces the concept of 'pallet/call-name filters' that maps to the call_names parameter. This goes beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb+resource: 'Query raw Substrate or Polkadot calls with pallet/call-name filters and optional child-call, emitted-event, or extrinsic context.' This clearly distinguishes it from siblings like portal_substrate_query_events (events) and portal_solana_query_instructions (different network) by focusing on raw call rows.
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 includes explicit WHEN TO USE and DON'T USE sections, with concrete criteria like 'You need raw call records' vs. 'You want events or aggregate analytics rather than call rows.' It also provides common user asks and examples, giving clear direction on when this tool is appropriate compared to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portal_substrate_query_eventsAInspect
Query raw Substrate or Polkadot event rows with pallet/event-name filters and optional parent call or extrinsic context.
COMMON USER ASKS:
Balances.Transfer events on Polkadot
FIRST CHOICE FOR:
raw Substrate or Polkadot event rows with optional parent call or extrinsic context
WHEN TO USE:
You need raw event records on a Substrate network.
You want pallet-level event activity like Balances.Transfer or Contracts.ContractEmitted.
You want event rows first, even if the network is a Polkadot-family chain.
DON'T USE:
You want calls or aggregate analytics rather than event rows.
EXAMPLES:
Balances.Transfer events on Polkadot: {"network":"polkadot","timeframe":"1h","event_names":["Balances.Transfer"],"limit":20}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events to return | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Substrate network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g. '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number | |
| event_names | No | Optional qualified event names like Balances.Transfer or System.ExtrinsicSuccess | |
| include_call | No | Attach the emitting call inline when the event has call context | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| include_stack | No | Attach the parent call stack when the event has nested call context | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested extrinsic or call context in a smaller inline shape. | |
| include_extrinsic | No | Attach the parent extrinsic inline for each matching event |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral transparency burden. It communicates the tool returns raw event rows, supports optional parent call/extrinsic context, and uses a compact-by-default response format (via schema). However, it does not explicitly state read-only behavior, pagination, rate limits, or data freshness expectations, which would be useful given zero annotation coverage. The example helps show behavior in practice.
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 well-structured with clear headings and bullet points. The opening sentence is front-loaded with the core purpose. The COMMON USER ASKS, WHEN TO USE, DON'T USE, and EXAMPLES sections are concise and each sentence earns its place. It avoids redundancy and unnecessary detail.
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 (14 parameters, no required fields, no output schema, no annotations), the description provides strong usage context and a representative example. However, it doesn't describe the shape of event row results or clarify what 'raw' means in terms of decoded data, which would improve completeness. Still, the example and usage guidance are strong enough for reliable tool selection.
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 parameters are already well-documented. The description adds value with a concrete example showing parameter combination (network, timeframe, event_names, limit) and a common user ask using event_names format (Balances.Transfer). This clarifies how qualified event names work and how to structure a query, going beyond individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query raw Substrate or Polkadot event rows with pallet/event-name filters and optional parent call or extrinsic context.' This is a specific verb+resource with scope. It also distinguishes itself from siblings by noting it's the 'FIRST CHOICE FOR raw event rows' and explicitly says 'DON'T USE' for calls or aggregate analytics, differentiating from portal_substrate_query_calls and portal_substrate_get_analytics.
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 'WHEN TO USE' section provides three explicit scenarios (raw event records, pallet-level event activity, event rows first). The 'DON'T USE' section explicitly excludes calls and aggregate analytics, giving clear when-not-to-use guidance. The 'FIRST CHOICE FOR' section further reinforces the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
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
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
- AlicenseAqualityBmaintenanceThin MCP wrapper around the SQD Portal API for blockchain data queries across multiple networks including EVM, Solana, Bitcoin, Substrate, and Hyperliquid. Provides 25 public tools for discovery, cross-chain queries, and chain-specific operations.281MIT
- Alicense-qualityCmaintenanceEnables querying on-chain data (balances, transactions, token transfers, blocks) across 20+ EVM chains through natural language.0MIT
- Flicense-qualityDmaintenanceProvides unified access to real-time and historical Solana ecosystem data through 40+ API endpoints, enabling LLM agents to query tokens, wallets, trades, and DeFi metrics.
- AlicenseAqualityCmaintenanceProvides read-only access to Solana on-chain data, enabling natural language queries for wallet balances, token holdings, prices, transactions, and more via MCP-compatible clients.8MIT
Your Connectors
Sign in to create a connector for this server.