Skip to main content
Glama

SQD Portal MCP Server

SQD Portal MCP server

An MCP server that answers blockchain questions from SQD Portal data: transactions, logs, traces, token transfers, wallets, analytics, time series, and candles across EVM, Solana, Bitcoin, Substrate, Hyperliquid, and Tron networks, with an optional in-host Explorer.

The server does not index chains itself. It validates input, plans bounded Portal queries, and returns results with coverage, freshness, pagination, and evidence metadata so an assistant can say exactly what it saw. No SQD account, API key, or client credential is required.

It speaks the stateless MCP 2026-07-28 protocol over HTTP and stdio and keeps the SDK-managed legacy negotiation path for clients still rolling out that revision. Release notes are in CHANGELOG.md. See CONTRIBUTING.md to work on the code and SECURITY.md to report a vulnerability.

Current public surface

  • 28 public tools

  • 3 advanced/debug tools

  • public params use network

  • discovery filters use vm

  • no legacy tool aliases in v0.8.x

Raw query tools default to compact responses. Ask for response_format: "full" only when you need the larger payload.

Entity questions can use portal_resolve_entity first. It resolves EVM token symbols/addresses, EVM contract aliases, pool identifiers, protocol names, and Hyperliquid coin names into query-ready filters while keeping ambiguous matches explicit.

Token symbol resolution and token metadata come from open token-list data, not baked-in token address constants. Responses include explicit notices when token-list data is unavailable, stale, or unsupported for a network.

Wallet questions should start with portal_get_wallet_summary. It returns fund_flow by default, including inbound/outbound movement, asset flows, counterparties, largest observed movements, and next evidence pivots before raw-tool drill-down.

Related MCP server: aipaygen-mcp

Tool groups

Discovery:

  • portal_list_networks

  • portal_get_network_info

  • portal_get_head

  • portal_resolve_entity

Cross-chain convenience:

  • portal_get_recent_activity

  • portal_get_wallet_summary

  • portal_get_time_series

EVM:

  • portal_evm_query_transactions

  • portal_evm_query_logs

  • portal_evm_query_traces

  • portal_evm_query_token_transfers

  • portal_evm_get_contract_deployment

  • portal_evm_get_contract_activity

  • portal_evm_get_analytics

  • portal_evm_get_ohlc

Solana:

  • portal_solana_query_transactions

  • portal_solana_query_instructions

  • portal_solana_get_analytics

Bitcoin:

  • portal_bitcoin_query_transactions

  • portal_bitcoin_get_analytics

Substrate:

  • portal_substrate_query_events

  • portal_substrate_query_calls

  • portal_substrate_get_analytics

Hyperliquid:

  • portal_hyperliquid_query_fills

  • portal_hyperliquid_get_analytics

  • portal_hyperliquid_get_ohlc

Tron:

  • portal_tron_query_transactions

  • portal_tron_query_logs

Advanced/debug:

  • portal_debug_query_blocks

  • portal_debug_resolve_time_to_block

  • portal_debug_hyperliquid_query_replica_commands

These groups are also the toolsets (discovery, convenience, evm, solana, bitcoin, substrate, hyperliquid, tron, debug). A deployment can trim the catalog with MCP_TOOLSETS or MCP_TOOLS, and an HTTP connection can narrow it further with ?toolsets= or an X-MCP-Toolsets header; see the HTTP deployment notes. With nothing configured the full 31-tool surface is served, and the hosted endpoint keeps that default.

Supported data

  • EVM networks indexed by Portal, including Base, Ethereum, Optimism, Arbitrum, Monad, Hyperliquid EVM, and many others

  • Tron native transactions (TRX transfers, TRC-10 transfers, contract calls with inline logs and internal transactions) and TVM event logs such as TRC-20 transfers, with Base58 or hex addresses, exact TRX amounts, and the parent transaction hash on every log; the bundled SQD plugin skill documents the raw Stream API for anything beyond that

  • Solana mainnet

  • Bitcoin mainnet

  • Hyperliquid fills and replica commands

  • Substrate networks indexed by Portal

Substrate support is currently historical only. It does not have a real-time tail.

Response shape

Most tools return the same envelope in MCP structuredContent and in a compact JSON text fallback for older clients. The envelope contains a normal result body plus shared metadata such as:

  • answer

  • display

  • next_steps

  • investigation

  • _freshness

  • _coverage

  • _pagination

  • _ordering

investigation is a compact evidence guide for agents: it identifies the primary result path, bounded window, useful pivot fields such as addresses or transaction hashes, follow-up filters, and limitations before a result is treated as complete. Successful material results also carry an _evidence receipt with canonical arguments, a deterministic digest, row reconciliation, source windows, and either exact or semantic replay semantics. Exact receipts pin their evidence window. Semantic receipts disclose that rerunning a moving relative window can return a newer snapshot.

When a response uses estimated, partial, sampled, capped, or paginated data, the top-level answer and metadata disclose it. _pagination.has_more is true exactly when next_cursor is present, and _coverage states whether the requested window was read through (window_complete) and whether the response holds every matching row (result_complete). Safe pagination follow-ups include executable tool-call metadata with explicit cursor arguments; suggestions that cannot be reconstructed safely are marked non-executable.

Chart-oriented tools also return chart and table descriptors so MCP clients or LLMs can render them without reverse-engineering the payload.

SQD Explorer (beta)

SQD Explorer is an MCP App that renders tool results inside hosts that support MCP Apps. It is in beta and off by default. A default deployment answers with structuredContent and compact JSON text only, and no tool result asks a host to open a UI. There are two ways to opt in:

  • One connection: add ?app=1 to the endpoint, for example https://portal.sqd.dev/mcp?app=1. Use this to try the beta without changing anything for other users.

  • Whole deployment: set MCP_APP_ENABLED=true. A connection can still override it in either direction, so ?app=0 opts a single client back out.

The app resource stays registered either way, so a host can read it directly without anyone opting in.

When it is enabled, compatible hosts receive an inline card sized to its content and a full-screen workspace for 21 data tools: metrics led by the primary number, multi-series and signed-value charts, price candles with linked volume and a fixed readout, ranked and timeline panels that show ten rows with a Show all control, evidence tables that page ten rows with search across every row, explorer links for addresses, hashes, and blocks, chain logos and names from SQD network metadata, continuation controls, current-session history, and JSON or CSV export through the host. Pointer and keyboard inspection expose exact plotted values. Missing buckets remain visible as gaps, identifiers stay unshortened, and any local row cap is separate from server completeness. Failed follow-ups keep the last good result under the error. The app is self-contained and does not use persistent browser storage; its only browser-side requests are chain logo images from cdn.subsquid.io and sqd.dev, the two origins declared in the resource CSP. Hosts without MCP App support receive the same structuredContent and compact JSON text fallback, so the underlying answer never depends on the UI. docs/explorer-design.md records the design rules the app follows.

Three MCP prompts provide reproducible starting points without adding tools:

  • investigate-wallet

  • investigate-contract

  • investigate-market

For a chart-first demo, ask: Show BTC price action and trading volume on Hyperliquid for the past hour, using five-minute candles. Explain whether the final candle is closed. The result opens the SQD Explorer with a candle chart, volume, an evidence table, requested and indexed time bounds, and a receipt. Replay the returned requested_window_start_timestamp and requested_window_end_exclusive as fixed from_timestamp and to_timestamp inputs when you need a stable verification run.

Try it in Claude

The hosted endpoint has the Explorer off, so a new user opts their own connection in:

  1. In claude.ai or Claude Desktop, open Settings → Connectors → Add custom connector, enter https://portal.sqd.dev/mcp?app=1, and choose no authentication. The ?app=1 turns the beta on for this connection only. On Claude Desktop you can instead install sqd.mcpb from the latest release and switch on its "SQD Explorer (beta)" setting.

  2. Start a new chat and enable the SQD connector for it.

  3. Ask a data question. Any of these lands on a tool that carries the Explorer:

    • What has this wallet been doing on Base lately? with an address (wallet summary)

    • Show me recent activity on Ethereum (recent activity)

    • Chart hourly transaction counts on Base for the last day (time series)

The result renders as an inline card instead of a block of text; open the card for the full-screen workspace. Only the 21 data tools carry the Explorer. A catalogue question such as Which networks do you support? calls portal_list_networks and answers in plain text, which is expected rather than a failure.

Install

npm install
npm run build

Run

stdio:

npm start

HTTP:

npm run start:http

Developer discovery

The server exposes a structured tool-selection guide for client builders:

  • MCP resource sqd://tools returns grouped tool metadata, examples, starting points, and integration notes.

  • MCP resource sqd://tools/{name} returns the guide entry for one tool, for example sqd://tools/portal_get_time_series.

Tool and resource discovery stays on the MCP protocol itself. The server does not maintain a duplicate HTTP catalog.

Codex plugin

The Codex plugin wrapper lives in plugins/portal and defaults to the hosted MCP endpoint at https://portal.sqd.dev/mcp.

Install it from this repo-local marketplace:

codex plugin marketplace add .
codex plugin add portal@sqd

Open a new Codex thread after installing. First-use prompts include Hyperliquid BTC perp fills, recent Base transaction volume, and the latest USDC transfers on Base.

Claude Code plugin

The Claude Code plugin uses the same hosted MCP endpoint and the same public selector:

claude plugin marketplace add subsquid-labs/portal-mcp-server
claude plugin install portal@sqd

Open a new Claude Code session after installing so the SQD MCP tools are loaded.

Grok

Grok chat can use SQD as a custom connector:

  1. Open grok.com/connectors.

  2. Choose New Connector, then Custom.

  3. Enter https://portal.sqd.dev/mcp as the MCP server URL.

  4. Leave authentication unset.

Grok Build reads Claude Code plugins directly, so it uses the same package:

grok plugin install --trust subsquid-labs/portal-mcp-server#plugins/portal

ChatGPT

In a workspace with custom MCP apps enabled, open Settings → Apps → Create, enter https://portal.sqd.dev/mcp, choose no authentication, scan the tools, and create the draft app. The server is read-only and does not require user credentials.

Claude Desktop

Download sqd.mcpb from the latest release and open it: Claude Desktop installs the bundle with one click and lists the 31 tools. The bundle carries the server, its production dependencies, and one optional setting, "SQD Explorer (beta)", which is off by default. It needs Node 22 or newer on the machine.

Manual fallback, from a local clone after npm run build, add an entry like this to claude_desktop_config.json:

{
  "mcpServers": {
    "SQD": {
      "command": "node",
      "args": ["/absolute/path/to/sqd-portal-mcp-server/dist/index.js"]
    }
  }
}

Usage notes

  • If you do not know the exact network name, start with portal_list_networks.

  • If you need recent indexed state, use portal_get_network_info or portal_get_head first.

  • If the question is broad, start with portal_get_recent_activity, portal_get_wallet_summary, or portal_get_time_series before dropping to raw queries.

  • Time windows accept compact and natural wording such as 30m, past 30 minutes, in the past 1h, in last 38 mins, last hour, or 30 minutes ago.

  • Use portal_evm_get_ohlc and portal_hyperliquid_get_ohlc only when you actually need candle-shaped output.

  • For large or exploratory queries, prefer response_format: "compact" unless you need the full record shape.

HTTP Deployment Notes

HTTP mode exposes MCP at / and /mcp, liveness at /health, and readiness at /ready. The hosted service exposes the same versioned health response at https://portal.sqd.dev/mcp/health.

  • MCP and health endpoints do not require authentication.

  • Tool and resource discovery use the MCP protocol; retired /tools and /tools.json routes return 404.

  • Set MCP_CURSOR_SECRET on any deployment running more than one process, so a cursor one instance issues is accepted by the next. Unset, each process signs with its own random key, and a cursor stops working across a restart or a load-balanced hop.

  • /health reports version and commit, the git commit the image was built from, and every tool result repeats both in _server. Docker Hub tags: latest, X.Y.Z, and X.Y come only from a v* release tag; edge and sha-<commit> come from every main push. Pin a version tag in production.

  • /ready is 200 only after the dataset catalog has loaded once and the latest Portal probe succeeded within MCP_READY_MAX_AGE_MS; otherwise it is 503 with a reason and Retry-After. Point orchestrator readiness checks at /ready and liveness checks at /health. The Docker image's HEALTHCHECK uses /ready.

  • The server binds 127.0.0.1 unless MCP_BIND says otherwise, and every route checks the Host header (and Origin, when a browser sends one) against an allowlist, so a DNS-rebound page cannot reach a local instance. Loopback hosts and origins always pass; requests without Origin always pass the origin check. A non-loopback bind must set MCP_ALLOWED_HOSTS and MCP_ALLOWED_ORIGINS; if either is missing the server logs a startup error and serves without that check. The Docker image sets MCP_BIND=0.0.0.0, so set both variables in the deployment, or * behind a proxy that already validates them.

  • Every request is bounded: headers within MCP_HEADERS_TIMEOUT_MS, the whole request within MCP_REQUEST_TIMEOUT_MS, idle keep-alive within MCP_KEEP_ALIVE_TIMEOUT_MS, and MCP bodies above MCP_MAX_BODY_BYTES are refused with 413 before parsing (411 for a chunked body with no length).

Useful environment variables:

  • MCP_CURSOR_SECRET the key pagination cursors are signed with. Set it on any deployment running more than one process. Unset, each process signs with its own random key, so a cursor issued by one instance is rejected by the next and clients lose their place across a restart or a load-balanced hop. It is also what stops a caller minting a cursor for a window the tool would never have offered.

  • MCP_TOOLSETS comma-separated toolsets to serve (discovery, convenience, evm, solana, bitcoin, substrate, hyperliquid, tron, debug; all or default for everything). Unknown names are ignored with a startup error. Wins over MCP_TOOLS. Default: all nine, the full 31-tool catalog.

  • MCP_TOOLS comma-separated exact tool names to serve when MCP_TOOLSETS is unset.

  • Per connection, ?toolsets=evm on the endpoint URL or an X-MCP-Toolsets: evm header narrows the deployment's set for that connection only; it can never add a toolset. Prompts that reference a tool outside the active set are not offered. The active set is a bounded label (all, one toolset name, or custom) on mcp_tool_client_calls_total.

  • MCP_BIND interface to listen on, default 127.0.0.1 (0.0.0.0 in the Docker image)

  • MCP_ALLOWED_HOSTS comma-separated hostnames accepted in Host (port ignored) on top of loopback; * disables the check. Required for a non-loopback bind.

  • MCP_ALLOWED_ORIGINS comma-separated hostnames accepted in Origin on top of loopback; * disables the check. Required for a non-loopback bind.

  • MCP_REQUEST_TIMEOUT_MS, MCP_HEADERS_TIMEOUT_MS, MCP_KEEP_ALIVE_TIMEOUT_MS request timing bounds, defaults 120000, 30000, 65000

  • MCP_MAX_BODY_BYTES MCP request body cap, default 1048576

  • MCP_READY_PROBE_INTERVAL_MS and MCP_READY_MAX_AGE_MS readiness probe cadence and freshness, defaults 30000 and 90000

  • MCP_APP_ENABLED to offer the beta SQD Explorer to compatible hosts, default off. Accepts true or 1. Per-connection ?app=1 and ?app=0 override it.

  • MCP_TOOL_WEIGHT_BUDGET to bound the combined cost of active tool calls, default 32. Measured profiles allow up to 32 lookups, 4 raw or summary calls, or 2 analytics calls at once while queued work remains cancellation-aware.

  • MCP_TOOL_MAX_QUEUE to bound queued tool calls, default 64

  • MCP_TOOL_QUEUE_TIMEOUT_MS to bound tool admission wait time, default 5000

  • MCP_TOOL_CLIENT_WEIGHT_SHARE percent of the weight budget one caller (one connection, identified by a hashed address) may hold at once, default 50; never below the heaviest single tool so every tool stays schedulable. MCP_TOOL_CLIENT_MAX_QUEUE bounds one caller's queued calls, default 16. A caller over its share gets the retryable overloaded result with reason: client_share while others keep flowing.

  • MCP_TRUST_PROXY set to 1 (or to the number of proxies in front of the server) to key fairness on the address those proxies observed instead of the socket address. The header is read only when the immediate peer is itself a trusted proxy, and the hop is counted from the right of X-Forwarded-For, because a caller can write anything to the left of it. The address is hashed and never stored or labelled.

  • MCP_TRUSTED_PROXY_PREFIXES a comma-separated list of address prefixes that count as your proxies, matched against the start of the peer address (for example 203.0.113. or 2606:4700:). Setting it replaces the default rather than adding to it, so include loopback or your private range if a co-located proxy also reaches the server. With it unset, loopback and private ranges are trusted, which is where a co-located proxy sits; on a shared private network that means any host on that network can present a forwarded address, so name your proxies explicitly there.

  • MCP_SLOW_REQUEST_MS threshold for one JSON line on stderr per slow tool call with admission wait and execution timings and the bounded client family, default 5000.

Cost guardrails

Every scan bound in the server is compiled in and set per tool: a filtered trace scan stops at 5,000 blocks, a contract-deployment search at 1,000,000. Guardrails add a second ceiling above those that a deployment sets from the environment, so an endpoint under load can be turned down without a new image.

  • MCP_GUARDRAIL_MODE one of off (default), shadow, or enforce.

  • MCP_GUARDRAIL_<CLASS>_<LIMIT> sets one ceiling, where <CLASS> is LOOKUP, RAW_QUERY, SUMMARY, or ANALYTICS, and <LIMIT> is MAX_SCAN_BLOCKS, MAX_WINDOW_SECONDS, or MAX_UPSTREAM_BYTES. For example MCP_GUARDRAIL_RAW_QUERY_MAX_SCAN_BLOCKS=50000.

There are no numeric defaults. A class with nothing set has no extra ceiling, so off and enforce with nothing configured are the same server. The only way a guardrail changes behaviour is if you set a number.

shadow evaluates every ceiling and records what enforcing would have done, without changing a single response. enforce acts:

  • A scan over its ceiling stops at the ceiling and reports what it covered through the same partial-coverage path a scan that hits its compiled bound already uses, so _coverage.result_complete becomes false and the response names the blocks it searched. It never claims a complete answer it did not get.

  • A query window over its ceiling is refused before anything is fetched, with the cap named in the error and the next steps, because there is no partial result to return for a request that was never allowed to start.

Four counters, all with bounded labels: mcp_guardrail_admitted_total{class}, mcp_guardrail_would_block_total{class,limit}, mcp_guardrail_blocked_total{class,limit}, and mcp_guardrail_fail_open_total{reason}.

Recommended rollout. Set the ceilings you are considering and run shadow for a week. Read mcp_guardrail_would_block_total: it is exactly the set of real requests the ceiling would have cut. If that set is larger than you expected, the ceiling is wrong, not the traffic. Move to enforce once it is the size you intended.

Traces

Metrics say how often and how long; a trace says where the time went inside one call. Traces are off unless you set OTEL_EXPORTER_OTLP_ENDPOINT. With it unset nothing here is imported, allocated, or sent, and the OpenTelemetry packages need not be installed at all.

The SDK is not a dependency of this package. It and its exporter pull about 74 packages against a published tarball of roughly 3.4MB, and almost nobody running this over stdio wants any of it, so they are declared as optional peers. To turn traces on, install them alongside the server and point it at your collector:

npm i @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-http
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4318

One tool call is one tree:

mcp.request                       (HTTP only: method, transport)
└─ tools/call portal_evm_query_logs
   ├─ mcp.admission               (the wait for a slot)
   ├─ portal.fetch                (one per attempt: dataset, status, bytes, resend count)
   ├─ portal.fetch
   └─ mcp.format_result           (hashing the answer for the evidence receipt)

OTEL_* variables are read by the OpenTelemetry SDK itself, so sampling, headers, batching, and protocol are configured the standard way. The rest:

  • A traceparent on the HTTP request, or in the tool call's _meta, makes the call part of the caller's trace rather than starting a new one. The _meta value wins, because it is the more specific claim about which turn this call belongs to.

  • Each Portal request carries a traceparent naming its own fetch span, so a Portal-side trace can join this one. Nothing is added when tracing is off.

  • The JSON log lines carry trace_id and span_id while tracing is on, so a log event and its span can be looked up from each other.

  • /health reports whether tracing is configured, whether it started, and whether argument capture is on.

Span attributes carry no arguments, addresses, hashes, cursors, or free text. They are the tool name, its work class, the dataset, bounded counts, and a bounded outcome. A span leaves the process for a collector the query itself never reaches, so the rule is the one the metric labels follow, and stricter than the logs, which at least stay on your own stderr. MCP_OTEL_INCLUDE_ARGS=1 adds the raw tool arguments to the tool span. It is off by default and unsafe for production: a tool argument is routinely a wallet address, and often a user's own words.

Tests

npm run test:offline builds, lints, typechecks, runs the unit tests, and runs every suite that needs no Portal access. npm run test:live runs the Portal-backed suites. RELEASE_ASSURANCE.md summarises what a release verifies, and scripts/README.md lists every suite.

License

MIT

Available Tools

28 tools
portal_bitcoin_get_analyticsAnalyze Bitcoin activityA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
networkNoNetwork name (default: bitcoin-mainnet)bitcoin-mainnet
to_blockNoEnding block number
timeframeNoTime range: '1h' (~6 blocks), '6h' (~36 blocks), '24h' (~144 blocks). Default: '1h'
from_blockNoStarting block number (use this OR timeframe)
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago".
response_formatNoResponse format: 'summary' (high-level metrics only), 'compact' (core sections, lighter payload), 'full' (complete analytics).full
include_address_activityNoInclude unique address count and output value (requires extra queries, slower)

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds behavioral context by specifying the tool returns aggregated network-level analytics (not raw data) and by naming the covered metric families: block cadence, fees, SegWit/Taproot adoption, and activity metrics. It does not disclose cost/rate-limit behavior, but with annotations and output schema present this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with headings and is front-loaded with the core one-line summary. The WHEN TO USE and DON'T USE sections are useful. However, COMMON USER ASKS and FIRST CHOICE FOR largely repeat the WHEN TO USE content, so not every section earns its place; still compact overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with zero required params, output schema, and read-only annotations, the description is nearly complete: it gives a common ask, a concrete example, selection criteria, and an explicit don't-use rule. The only small gaps are the unexplained mode parameter and the lack of a named sibling tool for raw transactions, but those are minor against the schema's coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 example {'network':'bitcoin-mainnet','timeframe':'1h'} demonstrates a valid minimal invocation and adds a little beyond the schema. However, it does not clarify the meaning of mode ('fast' vs 'deep'), whose schema description is a placeholder, so the description doesn't fully compensate where schema help is weakest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a clear verb+resource: 'Get the big picture for Bitcoin block, fee, and address activity over a recent or explicit window.' This explicitly names the domain (Bitcoin analytics, not raw transactions) and the object (block/fee/address activity), and the WHEN TO USE section further specifies metrics like block cadence, SegWit/Taproot adoption. This sufficiently differentiates it from sibling raw-transaction tools such as portal_bitcoin_query_transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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, making selection criteria explicit. It lists four when-to-use cases (network snapshot, block cadence/fees/adoption/activity metrics) and an explicit exclusion: 'You need raw transactions rather than network analytics,' which routes away from the transaction-querying sibling. This is more than clear context; it gives direct routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_bitcoin_query_transactionsFind Bitcoin transactionsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return (default: 50, max: 200)
cursorNoContinuation cursor from a previous response
networkNoNetwork name (default: bitcoin-mainnet). Optional when continuing with cursor.
to_blockNoEnding block number
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting block number
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_inputsNoAttach transaction inputs inline
include_outputsNoAttach transaction outputs inline
response_formatNoResponse format: defaults to 'compact' for chat-friendly output. Compact mode keeps inline inputs and outputs in a smaller shape when requested.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context by mentioning raw transaction records, optional inline inputs/outputs, and the UTXO envelope, which informs the agent about the response shape without relying solely on schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear section labels and immediately front-loads the main purpose. Some redundancy exists between COMMON USER ASKS and EXAMPLES, but overall it remains concise and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter read-only query tool with full schema descriptions and an output schema, the description covers the key use cases, exclusions, and example invocations. It does not discuss cursor pagination or all time-filter options, but those are documented in the schema, so the description remains sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds value through examples combining network, timeframe, limit, include_inputs, and include_outputs, but it does not go beyond what the schema already documents for other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Query raw Bitcoin transactions' with optional inline inputs and outputs. It distinguishes itself from sibling tools by specifying Bitcoin network raw transaction records and the UTXO envelope, making it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 give explicit guidance on when to use the tool versus when to avoid it, such as for wallet/network summaries. It does not name specific sibling tools, but points clearly toward the relevant alternative use cases.

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_commandsInspect Hyperliquid command recordsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoUser wallet addresses (0x-prefixed, lowercase)
limitNoMax actions to return
cursorNoContinuation cursor from a previous response
statusNoFilter by action status
networkNoNetwork name (default: 'hyperliquid-replica-cmds'). Optional when continuing with cursor.hyperliquid-replica-cmds
to_blockNoEnding block number
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting block number (use this OR timeframe)
action_typeNoAction types to filter
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
vault_addressNoVault addresses (0x-prefixed, lowercase)
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'ADVANCED' warning and clarifies that this returns raw order-action events rather than fills/analytics, but it does not disclose additional behavioral traits such as rate limits, data freshness, or pagination behavior. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with headers, a common user ask, when/don't-use guidance, and one concrete example. Every section adds value and the most important routing information is front-loaded. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter tool with no required parameters, the schema carries the full parameter documentation and an output schema exists. The description adds enough context for tool selection and a working example for invocation. It could have elaborated more on cursor/time-filter interaction, but that is a minor gap given the schema's completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 13 parameters. The description's example shows a reasonable combination of network, timeframe, and limit, but it does not add parameter semantics beyond what the schema provides. Baseline 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 Hyperliquid replica-command actions such as orders, cancels, and leverage updates.' It also explicitly contrasts itself with fills and analytics, so an agent can distinguish it from sibling tools like portal_hyperliquid_query_fills without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 give clear routing: use it when debugging replica-command records or needing raw order-action events; avoid it when public trading activity or fills/analytics are the better fit. This is explicit, practical guidance that names the alternative categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_debug_query_blocksInspect raw blocksA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax blocks to return (default: 20). Note: Lower default for MCP to reduce context usage.
cursorNoContinuation cursor from a previous response
networkNoNetwork name or alias. Optional when continuing with cursor.
to_blockNoEnding block number
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting block number (use this OR timeframe)
field_presetNoField preset for EVM datasets: 'minimal' (number+timestamp+gas), 'standard' (+hash+miner+size), 'full' (all block fields). Ignored for Solana/Bitcoin.standard
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_l2_fieldsNoInclude L2-specific fields (auto-detected for L2 chains)

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true and destructive=false, low'ering the bar. The description adds useful behavioral context: it is an ADVANCED debugging tool, queries raw block records, and covers multiple chains. It also clarifies the result is block records rather than transaction-level or summmary data, which is behavioral and return-type information beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into labeled sections, front-loaded with the ADVANCED warning and core purpose. Common asks, when-to-use, don't-use, and examples each earn their place without fluf. It is longer than average but structured so an agent can scan quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, zero required, 100% schema coverage, and an output schema, the description supplies the missing selection-level context: when to choose this debugging tool over all siblings, what raw blocks are, and how to build a typical query. An agent has enough to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter semantics are already well documented. The description adds an example ('Recent Base blocks: {"network":"base-mainnet","timeframe":"1h","limit":5}') that demonstrates how typical parameters combine, and it names the three block-chain contexts. This is meaningful added value above the schema, though it does not need to restate every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action and resource: 'Query raw block records directly for EVM, Solana, or Bitcoin.' It differentiates from sibling tools by emphasizing raw block records rather than transactions, logs, or summaries, which is a meaningful distinction. The title 'Inspect raw blocks' reinforces this without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

WHEN TO USE and DON'T USE sections provide explicit guidance. It says to use when debugging Portal coverage or block-level fields and to avoid when answering normal end-user questions, routing the agent toward recent activity, time series, or raw transaction tools instead. This is exemplary alternative-selection guidance.

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_blockMatch a time to a blockA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesNetwork name or alias
timestampYesUnix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago"

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds useful behavioral context: it resolves to the 'nearest indexed block or slot' and can help inspect 'exact versus estimated' resolution, which goes beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with labeled sections for common uses, when to use, when not to use, and examples. The purpose is front-loaded in the first sentence, and every section contributes actionable guidance without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with a 100% described schema, annotations, and an output schema, the description provides complete enough guidance. It explains when to use the tool, when to avoid it, and includes concrete call examples that an agent can immediately adapt.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented. The description still adds value with concrete examples mapping 'base-mainnet' and 'polkadot' to the network parameter and showing both relative ('1h ago') and ISO timestamp formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a specific operation: 'Resolve a timestamp to the nearest indexed block or slot.' This clearly distinguishes the tool from sibling query tools such as portal_debug_query_blocks or portal_get_time_series. Examples for Base and Polkadot reinforce the exact scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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, which is strong guidance. It tells the agent not to use this for simple time-based queries because 'most public tools already accept natural timestamps directly,' but it does not name a specific sibling tool as the recommended alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_evm_get_analyticsAnalyze Ethereum and Base activityA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
limitNoNumber of top contracts to return (default: 10, max: 100)
cursorNoContinuation cursor from a previous response
networkNoNetwork name (supports short names: 'ethereum', 'polygon', 'base', etc.). Optional when continuing with cursor.
timeframeNoOptional natural time window like '1h' or '24h'
num_blocksNoNumber of recent blocks to analyze when timeframe is omitted (default: 50, max: 10000)
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_detailsNoInclude sample transaction hashes for each contract

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, so the description only needs to add behavioral expectations. It does: 'ranked contracts', 'compact overview metrics', and 'analytics-style network overview instead of a raw record list' tell the agent what kind of aggregated output to expect. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is organized into scannable sections and front-loaded with the core summary. It loses a point because 'big picture' is repeated across the summary, FIRST CHOICE FOR, and WHEN TO USE, and the COMMON USER ASKS/FIRST CHOICE sections overlap.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 100% schema coverage, an output schema, zero required parameters, and read-only annotations, the only missing context is when to choose this tool and what a call looks like—both provided. The example plus exclusions make it complete for an agent to select and invoke.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schemas carry parameter definitions. The description adds value by giving a complete worked example ('Top contracts on Base: network=base-mainnet, timeframe=1h, limit=10') that demonstrates short network names and natural timeframes, which is extra usage meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The one-line summary names a specific resource ('network-wide EVM activity'), a specific artifact ('ranked contracts and compact overview metrics'), and an explicit contrast with 'raw record list'. This clearly separates it from transaction/query/log siblings like portal_evm_query_transactions and from other chains' analytics tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The WHEN TO USE section lists concrete conditions, and the DON'T USE section gives an explicit exclusion for chart-bucket/time-series requests. It doesn't name a specific sibling alternative (e.g., portal_get_time_series or portal_evm_get_ohlc), so it stops just short of the strongest possible 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_contract_activityReview smart contract activityA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
networkYesNetwork name or alias
timeframeNoAnalysis period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'.1000
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_eventsNoInclude event log summary
contract_addressYesContract address to analyze

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds value beyond that by disclosing the tool's aggregate behavior: it returns a summary with unique callers, interaction volume, and optional event activity rather than raw records. This sets accurate expectations about output shape and analytic nature. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition uses a clear lead sentence followed by scannable labeled sections (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES), with the core purpose front-loaded. It is longer than minimal, and COMMON USER ASKS partially overlaps with FIRST CHOICE FOR, but each section earns its place by making routing and invocation faster for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, an output schema, and rich annotations, the description is thorough: it covers intended use cases, exclusions, and provides a concrete example with the required parameters. The main gaps are tool-level context about mode semantics (fast vs deep) and timeframe block-count behavior, but these are already documented in the parameter schema descriptions, so the description need not repeat them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description's example call {'network':'base-mainnet','contract_address':'0xabc...','timeframe':'24h'} reinforces realistic usage and that timeframe accepts formats like '24h' (already documented in the schema). It also maps 'optional event activity' to include_events. This is marginal added value on top of complete schema descriptions, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Summarize what one specific contract has been doing lately, including recent interactions, unique callers, and optional event activity.' It names the unit of analysis (one specific contract) and what distinguishes it from siblings (a contract-level summary, not raw records). The DON'T USE section explicitly steers away from raw logs and transactions, which differentiates it 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The WHEN TO USE section lists three concrete conditions (contract-level answer, contract-centric summary instead of raw records, top callers and interaction volume) and the DON'T USE section lists two exclusions (raw logs/transactions, general network activity without a specific contract). These conditions map cleanly onto sibling alternatives: query_logs/query_transactions for raw records and get_recent_activity for general network activity. The guidance is explicit and decision-ready.

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_deploymentFind a contract deploymentA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesEVM network name or alias, e.g. base, ethereum, arbitrum.
contractNoContract address or a supported well-known alias/name, e.g. "bayc" or "bored apes" on Ethereum.
to_blockNoOptional ending block. Defaults to the indexed head.
timeframeNoOptional recent time window to search, e.g. "24h" or "7d".
from_blockNoOptional starting block. Provide this for older contracts when the deployment is not recent.
scan_orderNoScan latest first for recent deployments, or earliest first when you provide a historical from_block.latest
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "7d ago".
max_scan_blocksNoSafety cap for historical deployment scans. Default: scan the requested window up to 1,000,000 blocks.
contract_addressNoContract address whose deployment transaction should be located.
search_depth_blocksNoWhen no explicit range is given, search this many recent blocks backward from the indexed head.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context beyond that: the search is bounded to a window, it returns the create trace and parent transaction, and it notes that old contracts without a block/time hint are not suitable. This is useful context without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but is well-structured into clear sections (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES) and front-loads the core purpose in the first sentence. Some redundancy exists between 'COMMON USER ASKS' and 'FIRST CHOICE FOR,' so it is not maximally concise, but every section contributes useful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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, multiple ways to specify the contract/range), the description is complete: it covers use cases, exclusions, parameter semantics, examples, and the critical constraint about providing block/time hints for older contracts. The output schema exists, so not describing return values is acceptable. An agent can correctly select and invoke this tool with the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, providing a baseline of 3. The description adds real value above the schema by explaining parameter relationships and usage patterns, such as using from_block for older contracts, search_depth_blocks when no explicit range is given, and contract aliases like 'bored apes'. The three examples illustrate valid, concrete parameter combinations that the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Locate the create trace and parent transaction that deployed a specific EVM contract address within a bounded window.' This clearly distinguishes it from sibling tools like contract activity or transaction queries, and the 'DON'T USE' section reinforces that it is for deployment lookup rather than general activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 give explicit conditions and exclusions, such as not using it for all post-deployment activity and requiring from_block/from_timestamp for older contracts. It clearly describes the deployment-lookup use case but does not name a specific sibling alternative (e.g., portal_evm_get_contract_activity) by tool name, so it falls just short of fully explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_evm_get_ohlcChart token price historyA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
feeNoOptional Uniswap v4 LP fee in hundredths of a bip, e.g. 3000 for 0.30%.
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
cursorNoContinuation cursor from a previous candle page
sourceNoWhich 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
networkNoEVM network name (default: base-mainnet)base-mainnet
pool_idNoUniswap v4 pool id (bytes32). Optional when you provide the full v4 pool key instead.
durationNoHow much recent history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes".1h
intervalNoCandle interval. auto uses chart-friendly defaults like 1h→5m and 24h→1h.auto
price_inNoChoose which token the displayed price should be expressed in. auto picks the more human-readable quote side.auto
base_tokenNoLegacy orientation input. Prefer price_in instead.
pool_addressNoPool/pair contract address for address-keyed sources like Uniswap v3, Slipstream, or Sync-derived CPMM pools.
tick_spacingNoOptional Uniswap v4 tick spacing. Required with the rest of the pool key when deriving pool_id.
hooks_addressNoOptional Uniswap v4 hooks contract address. Defaults to the zero address when omitted.
token0_symbolNoOptional token0 symbol label for summaries
token1_symbolNoOptional token1 symbol label for summaries
token0_addressNoOptional token0 address to infer known decimals
token1_addressNoOptional token1 address to infer known decimals
token0_decimalsNoOptional token0 decimals for human-readable prices
token1_decimalsNoOptional token1 decimals for human-readable prices
currency0_addressNoOptional Uniswap v4 currency0 address. Use with currency1_address, fee, and tick_spacing to derive pool_id factually.
currency1_addressNoOptional Uniswap v4 currency1 address. Use with currency0_address, fee, and tick_spacing to derive pool_id factually.
recent_trades_limitNoMaximum number of recent trades to return in the trade tape.
pool_manager_addressNoUniswap v4 PoolManager address. Optional on networks with a built-in official Uniswap deployment mapping.
include_recent_tradesNoInclude a recent trade tape for swap-derived sources when factual per-trade amounts are available.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral context beyond annotations: it explains the output includes both OHLC candles and a trade tape, that prices come from event-derived sources, and that v4 candles are built from PoolManager Swap events. This goes beyond simple read-only labeling without being exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but it is well-organized into labeled sections and front-loaded with the core purpose. The COMMON USER ASKS and EXAMPLES are somewhat redundant with the parameter list and source enum, but they serve as practical invocation templates and are not wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 24 parameters, 5 enums, an output schema, and a broad sibling family, this description is highly complete. It covers supported sources, usage boundaries, common wording variants, and concrete JSON examples. Nothing an agent needs to decide whether and how to call this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 24 parameters. The description's examples demonstrate realistic parameter combinations, but the prose does not add new semantic meaning beyond the schema. This meets the baseline of 3 without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Build chart-ready EVM OHLC candles plus a recent trade tape') and names the exact event sources it supports (Uniswap v2/v3/v4, Aerodrome Slipstream). It clearly differentiates this tool from siblings like portal_hyperliquid_get_ohlc and portal_get_time_series by specifying EVM DEX-derived candle data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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, along with concrete COMMON USER ASKS and EXAMPLES. It tells the agent when candle charts are appropriate and when to avoid this tool in favor of scalar metrics or simple activity charts, giving 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_query_logsFind smart contract eventsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
eventNoCommon event alias or topic0 hash. Examples: "transfer", "approval", "swap", "sync", "deposit", "withdrawal". Merges with topic0.
limitNoMax logs to return (default: 20, max: 200). Note: Lower default for MCP to reduce context usage.
cursorNoContinuation cursor from a previous response
decodeNoDecode known log signatures inline when topics/data are available
topic0NoEvent signatures (topic0). E.g., Transfer = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
topic1NoTopic1 filter (often: from address in Transfer, indexed parameter 1)
topic2NoTopic2 filter (often: to address in Transfer, indexed parameter 2)
topic3NoTopic3 filter (indexed parameter 3, chain-specific)
networkNoNetwork name or alias. Optional when continuing with cursor.
to_blockNoEnding block number. RECOMMENDED: <10k blocks for fast (<1s) responses. Larger ranges may be slow or timeout.
addressesNoContract addresses to filter (e.g., ['0xUSDC...', '0xDAI...']). IMPORTANT: Always include this or topics for fast queries.
timeframeNoNatural time range such as '5m', '1h', '24h', '7d', or 'past 30 minutes'. Alternative to from_block/to_block.
from_blockNoStarting block number (use this OR timeframe)
scan_orderNoWhich side of the block window to scan first. Use earliest for first-event questions.latest
field_presetNoField 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_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
token_symbolsNoToken symbols to resolve via open token-list data and merge into addresses, e.g. ["USDC"].
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
max_scan_blocksNoMaximum blocks to inspect for bounded earliest/latest scans. Sparse latest searches default to 25,000 blocks to stay within MCP request timeouts; raise only when deeper coverage is worth the added latency.
response_formatNoResponse format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline transaction context is requested. Use 'summary' for counting or categorizing.
include_transactionNoInclude parent transaction data
include_transaction_logsNoInclude all logs from parent transactions
max_token_symbol_matchesNoMaximum token-list matches to include per token symbol. Use addresses for deterministic single-contract filters.
include_transaction_tracesNoInclude traces for parent transactions

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds meaningful behavioral context not carried by annotations: performance caveats for ranges >10k blocks, sparse scan defaults of 25,000 blocks to respect MCP timeouts, context-size effects of field_preset='minimal', and response_format defaulting to 'compact'. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized with clear headers (COMMON USER ASKS, FIRST CHOICE FOR, WHEN TO USE, DON'T USE, EXAMPLES) and a front-loaded summary sentence. There is some overlap between FIRST CHOICE FOR and WHEN TO USE, but each section contributes distinct selection or invocation guidance, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 25-parameter tool with 0 required parameters and an existing output schema, the description covers selection criteria, alternatives, examples, performance caveats, pagination/context usage hints, and decode behavior. The description plus schema and output schema leave no significant gap an agent needs to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds concrete parameter combinations in EXAMPLES (scan_order='latest', limit=1, decode=true, include_transaction=true) and explains non-obvious behavior for max_scan_blocks, field_preset, and response_format that supplements the schema descriptions. This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 logs with address/topic filters, common event aliases, earliest/latest scanning, and optional inline decoding.' It clearly differentiates from siblings by explicitly stating token transfers are better handled by the token-transfer tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

WHEN TO USE lists five concrete conditions (filtered event logs, decoded log hints, first/last matching event, common event names, latest ERC721/pass mints). DON'T USE names the exact alternative tool (token-transfer) and the condition that should route an agent away, making selection unambiguous.

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_transfersFind token transfersA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transfers
cursorNoContinuation cursor from a previous response
networkNoNetwork name or alias. Optional when continuing with cursor.
to_blockNoEnding block number. RECOMMENDED: <10k blocks for fast responses.
timeframeNoTime range (e.g., '1h', '24h'). Alternative to block numbers.
from_blockNoStarting block number
scan_orderNoWhich side of the block window to scan first. Use earliest for first-transfer questions.latest
to_addressesNoRecipient addresses
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
token_symbolsNoToken symbols to resolve via open token-list data, e.g. ["USDC"]. Merges with token_addresses.
from_addressesNoSender addresses
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
token_addressesNoToken contract addresses
include_token_infoNoInclude token metadata (symbol, decimals) inline. Avoids separate token metadata lookups.
max_token_symbol_matchesNoMaximum token-list matches to include per token symbol. Use token_addresses for deterministic single-contract filters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by framing this as the fastest/easiest raw transfer query, supporting earliest/latest scan order for 'first matching transfer' questions, and hiding the Transfer topic-hash burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is substantial but tightly organized under COMMON USER ASKS, WHEN TO USE, DON'T USE, and EXAMPLES. The core statement is front-loaded, and every section earns its place; the examples replace lengthy explanations with exact invocations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with full schema coverage, readable annotations, and an output schema, this description supplies the missing operational understanding: when to prefer it, when to avoid it, and exactly how to invoke it with realistic examples. Nothing an agent needs to correctly select and call the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the baseline is 3, and the schema already documents all 15 parameters. The description meaningfully adds on top by showing concrete payload examples that combine network, timeframe, token_symbols, limit, and scan_order for 'Recent USDC transfers' and 'First recent USDC transfer'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 token-transfer activity on EVM') and immediately distinguishes the tool by removing the need to know Transfer event signatures. The common asks and the DON'T USE section clearly separate it from the sibling log-querying tools, so an agent knows exactly what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated WHEN TO USE list provides concrete decision conditions, such as 'did USDC move?' and tracing suspicious/stolen/bridged movement. The DON'T USE section explicitly routes 'arbitrary event logs beyond token transfers' to the logs tool, giving unambiguous guidance on when not to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_evm_query_transactionsFind Ethereum and Base transactionsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions (default: 20, max: 200). Note: Lower default for MCP to reduce context usage.
cursorNoContinuation cursor from a previous response
methodNoFILTER: Common EVM method alias or 4-byte sighash. Examples: "transfer", "approve", "transferFrom", "deposit", "withdraw". Merges with sighash.
networkNoNetwork name or alias. Optional when continuing with cursor.
sighashNoFILTER: Function sighash (4-byte hex, e.g., '0xa9059cbb' for transfer). Optional if limit <=100.
order_byNoOptional ranking for top-N questions. Use value_desc, gas_used_desc, or effective_gas_price_desc.chronological
to_blockNoEnding block number. RECOMMENDED: <5k blocks for fast (<500ms) responses. Larger ranges may be slow.
timeframeNoNatural time range such as '5m', '1h', '24h', '7d', or 'past 30 minutes'. Alternative to from_block/to_block. Large ranges are allowed with a low limit (<=100).
from_blockNoStarting block number (use this OR timeframe). Large ranges OK with low limit (<=100).
last_nonceNoMaximum nonce
scan_orderNoWhich 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_nonceNoMinimum nonce
aggregate_byNoOptional bounded aggregation for top sender/receiver questions. Returns ranked address rows instead of raw transactions.
field_presetNoField 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_logsNoInclude logs emitted by transactions
min_gas_usedNoFILTER/RANKING: Minimum receipt gasUsed. Accepts decimal or hex string.
to_addressesNoFILTER: Recipient addresses (typically contracts being called, or wallets receiving ETH). Optional if limit <=100.
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
min_value_weiNoFILTER/RANKING: Minimum native token value in wei. Accepts decimal or hex string.
finalized_onlyNoOnly query finalized blocks
from_addressesNoFILTER: Sender addresses (wallets or contracts that initiated the transaction). Optional if limit <=100.
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_tracesNoInclude traces for transactions
max_scan_blocksNoSafety cap for first/last/ranked client-side scans. Default: min(window, 10000 blocks).
response_formatNoResponse 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_metricNoMetric 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_symbolsNoResolve token symbols via open token-list data and merge them into to_addresses, e.g. transfer/approve calls to USDC.
transaction_typeNoFILTER: 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_creationNoFILTER: true returns contract-creation transactions; false excludes them. Useful for "first contract creation from this wallet".
include_l2_fieldsNoInclude L2-specific fields
from_token_symbolsNoResolve token symbols via open token-list data and merge them into from_addresses. Rare, but useful for token-contract-originated transactions.
transaction_statusNoFILTER: Transaction receipt status. Use "success"/1 or "failed"/0 for failed/reverted transaction searches.
include_state_diffsNoInclude state diffs caused by transactions
max_token_symbol_matchesNoMaximum token-list matches to include per token symbol. Use from_addresses/to_addresses for deterministic single-contract filters.
min_effective_gas_price_weiNoFILTER/RANKING: Minimum effectiveGasPrice in wei. Accepts decimal or hex string.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, non-destructive behavior, so the description does not need to repeat that. It adds useful behavior context beyond annotations: client-side filtering/scanning behavior ('Applied client-side while streaming Portal results'), aggregation that returns ranked address rows instead of raw transactions, token-list resolution, and field presets that shrink response size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although long, the description is tightly structured with COMMON USER ASKS, WHEN TO USE, DON'T USE, and EXAMPLES, and the core action is stated in the first sentence. For a tool with 35 parameters, the length is justified; no section is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers representative use cases, important parameter interactions, response-size tradeoffs, and exclusions, and it is backed by an output schema for return-value details. An agent has enough context to choose this tool and construct a valid first query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents every parameter, so the baseline is 3. The description adds value by demonstrating parameter combinations in examples (e.g., transaction_type + scan_order + from_block for 'first typed TX' and aggregate_by + aggregate_metric for top senders) and explaining method aliases and token symbols, which are non-obvious semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line names a specific verb and resource ('Query raw EVM transactions') and immediately scopes the tool to transaction-level investigations with optional logs, traces, and state-diff context. The WHEN TO USE/DON'T USE sections distinguish it from convenience tools like recent-activity feeds, so an agent can tell it apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'WHEN TO USE' bullets list concrete triggers (raw fields, first matching transaction, top-N rankings, token-symbol calls) and a 'DON'T USE' exclusion for quick recents or wallet summaries. This makes the choice boundary clear without needing to inspect sibling schemas.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_get_headGet the latest blockA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoBlock typelatest
networkYesNetwork name or alias

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint=true and destructiveHint=false, the description adds useful behavioral context by noting this returns the *indexed* head, not a live chain-tip or status indicator. It further clarifies limitations through the DON'T USE section, which is valuable beyond the annotation fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with short, purposeful sections and every snippet adds information: scope, common asks, when to use, when not to use, and examples. It is efficient despite being longer than average because no redundant content is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with an output schema and read-only annotations, the description covers accepted inputs, selection of latest vs finalized, examples, and missuse cases. Nothing essential is missing for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes further by showing concrete example payloads for 'latest' vs 'finalized' and calling out the typical use case of preceding a block-range query, making the parameters' real meaning clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 just the latest indexed head block or slot for a network.' It clearly distinguishes this lightweight head lookup from network status, table availability, and other sibling query tools via the COMMON USER ASKS and DON'T USE sections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit WHEN TO USE bullets, a FIRST CHOICE FOR statement, and a DON'T USE exclusion. This gives an agent clear decision rules for calling this tool instead of using it for status or table-inspection tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_get_network_infoCheck network statusA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
networkYesNetwork name or alias

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context by spelling out what the tool reports (indexing freshness, lag, heads, available tables, capabilities) and giving an example, which helps the agent understand expected semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and front-loaded intent. There is minor redundancy between FIRST CHOICE FOR and WHEN TO USE, but overall every section contributes useful guidance without excessive verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a single required parameter, a complete input schema, and an output schema, the description provides sufficient context for correct invocation. It covers common asks, when to use, when not to use, and includes a concrete example, making it complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for the single 'network' parameter, so the baseline is 3. The description adds concrete value with a user-ask example ('Is Base caught up?') and a JSON example using 'base-mainnet', demonstrating the expected parameter format and alias usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's purpose: answering 'is this network caught up?' by providing indexing freshness, lag, heads, and available tables for one network. It distinguishes itself from siblings by emphasizing 'one network' and explicitly noting it is not for getting only the latest block/slot, which separates it from portal_get_head.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

WHEN TO USE and DON'T USE sections provide clear usage context and exclusions, such as avoiding this tool when only the latest block or slot number is needed. However, it does not explicitly name the alternative sibling tool, so the guidance stops short of fully explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_get_recent_activityView recent blockchain activityA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return (max: 200)
cursorNoContinuation cursor from a previous response
networkNoNetwork name (supports short names: 'polygon', 'base', 'ethereum', 'arbitrum', etc.). Optional when continuing with cursor.
timeframeNoTime period or block count. Examples: '100' (default), '1h', '6h', '24h', '7d', '3d'.100
to_addressesNoFilter by recipient addresses
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_addressesNoFilter by sender addresses
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint=true and destructiveHint=false. The description adds behavioral detail beyond that: chronological paging, 'newest activity first', 'bounded recent evidence timeline', and investigation pivots. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and a strong front-loaded summary. There is son.what overlap between COMMON USER ASKS, FIRST CHOICE FOR, and WHEN TO USE, but each section still adds usable direction and the extra length is justified by the tool's broad cross-network scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, full parameter coverage, and safety annotations, the description is complete. It covers use caxses, exclusions, examples, paging behavior, and how to decide when to use this tool instead of raw query tools. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds value through concrete exaxamples such as network values like 'base-mainnet' and 'hyperliquid-fils' and realistic parameter combos. These clarify exact accepted network identifiers beyond the schema's brief description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a simple recent-activity feed across EVM, Solana, Bitcoain, or Hyperliquid.' It clearly distinguishes itself from raw VM-specific query tools by positioning itself as a first-pass feed and investigation starting point. This makes its role unambiguous against the large sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides FIRST CHOICE FOR, WHEN TO USE, and DON'T USE sections. It tells the agent when to reach for this tool, when not to, and points generally to raw query tools for logs/chain-specific fields and chart tools for time-series needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_get_time_seriesChart blockchain activityA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
metricYesMetric to aggregate over time
addressNoOptional: Filter to specific contract address for contract-specific trends
networkYesNetwork name (supports short names: 'ethereum', 'polygon', 'base', etc.)
durationNoTotal 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_byNoOptional grouping mode. contract is currently supported only for EVM transaction_countnone
intervalYesTime bucket interval (5m, 15m, 1h, 6h, 1d)
group_limitNoMaximum number of contract groups when group_by=contract
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "24h ago".
compare_previousNoCompare the selected window against the immediately previous window

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the safety profile (readOnlyHint=true, destructiveHint=false), lowering the bar. The description adds useful behavioral detail: defaulting to a 6h interactive window, compare-previous windows, and grouped contract trends. It does not cover output format, but an output schema is present, so that gap is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear headers and a logical flow, but it is somewhat lengthy. Each section arguably earns its place, and the front-loaded purpose sentence gives immediate orientation. Slight redundancy between 'FIRST CHOICE FOR' and 'WHEN TO USE' prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with 3 required params, the description covers common use cases, exclusions, examples, and behavioral defaults. Since an output schema exists, return-value details are not required. The description, combined with the rich schema and annotations, gives an agent everything needed to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes beyond the schema by providing two concrete JSON examples that demonstrate realistic parameter combinations, including network shorthand, interval buckets, duration defaults, and compare_previous. This practical grounding helps agents assemble correct calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource combination—'Build simple activity charts and other time-series views'—making the core action and resource unmistakable. It also distinguishes itself from sibling tools by explicitly excluding DEX pool candles and OHLC output, which separates it from portal_evm_get_ohlc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides 'WHEN TO USE', 'DON'T USE', and 'FIRST CHOICE FOR' sections, giving clear selection guidance. The 'DON'T USE' clause explicitly excludes raw record lists and OHLC candles, effectively routing agents toward alternatives like portal_get_recent_activity or portal_evm_get_ohlc without naming them directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_get_wallet_summaryReview wallet activityA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
cursorNoContinuation cursor from a previous response
addressNoWallet address to analyze. Optional when continuing with cursor.
networkNoNetwork name or alias. Optional when continuing with cursor.
timeframeNoLook-back period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'.1000
include_nftsNoInclude NFT transfers (ERC721/1155)
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_tokensNoInclude ERC20 token transfers
limit_per_typeNoMax items per category (txs, tokens, nfts)
response_formatNoResponse format: defaults to 'compact' for a readable wallet investigation. Use 'summary' for headline flow only or 'full' for all returned activity rows.

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds behavioral context about returning a high-level summary with inbound/outbound flow, top counterparties, evidence pivots, and follow-up filters rather than every raw transaction. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer but well-structured with labeled sections, front-loaded summary, and examples. Some redundancy exists between 'FIRST CHOICE FOR' and 'WHEN TO USE', but the organization makes it easy to scan and the detail is justified for a complex wallet-analysis tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, annotations are present, and there are no required params, the description covers all needed selection and invocation context: purpose, common asks, when to use, when not to use, and concrete examples. Nothing essential is missing for an agent to select and call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema_description_coverage is 100%, so the schema already documents all 11 parameters. The description's examples show sample values for network, address, and timeframe, but do not add new semantic meaning beyond what the parameter descriptions already state. This is the baseline for fully-covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as a wallet activity and fund-flow summarizer, listing specific outputs like shared overview, asset movement, counterparties, and evidence pivots. This differentiates it from sibling query/analytics tools that return raw records or network metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description has explicit WHEN TO USE and DON'T USE sections, specifying suspicious-wallet triage, stol-en-funds paths, and incident addresses, and excluding raw-record extraction. It does not explicitly name an alternative tool for raw records, but the exclusion is clear enough for an agent to infer a query tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_hyperliquid_get_analyticsAnalyze Hyperliquid tradingA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoFilter by asset symbols (e.g., ["BTC", "ETH"])
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
cursorNoContinuation cursor for ranked analytics sections
networkNoNetwork name (default: 'hyperliquid-fills')hyperliquid-fills
timeframeNoTime range: '1h', '6h', '24h'. Default: '1h'1h
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
section_limitNoPer-section page size for ranked sections. Default: 6
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago".
response_formatNoResponse format: 'summary' (smallest snapshot), 'compact' (chat-sized ranked sections, default), 'full' (complete analytics).compact

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful behavioral context by noting the tool returns grouped aggregate analytics without requiring raw fill stitching, which goes beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear headings and front-loaded purpose. The two examples are redundant since they use identical JSON, but the overall size is appropriate and each section serves a distinct purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, an output schema, and safety annotations, the description provides enough context for an agent to select and invoke the tool correctly. It covers the main use cases, exclusions, and gives concrete example inputs, though a note about pagination or cursor usage would add further completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 9 parameters. The description's examples reinforce the network and timeframe parameters but do not add significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get big-picture Hyperliquid fill analytics including top traders, volume by coin, fees, and PnL. It clearly distinguishes itself from sibling tools by explicitly excluding individual fill records and OHLC candles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 explicitly state the intended use cases and exclusions. It names alternatives such as individual fill records and OHLC candles, making the routing decision straightforward for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_hyperliquid_get_ohlcChart Hyperliquid pricesA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoAsset symbol to build candles for (for example: "BTC", "ETH", "SOL"). Optional when continuing with cursor.
userNoOptional trader wallet address (0x-prefixed, lowercase)
cursorNoContinuation cursor from a previous candle page
networkNoNetwork name (default: 'hyperliquid-fills')hyperliquid-fills
durationNoHow much recent trading history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes".1h
intervalNoCandle interval. Use auto for chart-friendly defaults: 1h→5m, 6h→15m, 12h→30m, 24h→1h.auto

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide safety context (readOnlyHint=true, destructiveHint=false), so the description only needs to add behavioral value. It does so by explaining that candles are derived from fills, are chart-ready, use fixed buckets and auto intervals, and include volume and VWAP. Minor details like pagination and the optional user scope are left to the schema, which is acceptable given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clearly labeled sections: common asks, when to use, when not to use, and an example. It is front-loaded with the core purpose and every section earns its place without unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only OHLC tool with full schema coverage, an output schema, and explicit usage guidance, the description is complete. It includes an example payload, clear exclusions, and the source of the data, so an agent has enough context 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds conceptual context (chart-ready, fixed buckets, auto intervals) and a concrete example, but it does not add parameter-level meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Build chart-ready Hyperliquid trade OHLC candles with fixed buckets and auto intervals." It clearly states the output type, source data, and scoping, and the DON'T USE section distinguishes it from scalar time-series and raw fills, so an agent can separate it from siblings like 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.

Usage Guidelines4/5

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 give clear selection criteria: use for per-coin Hyperliquid candles with chart-ready OHLC/volume/VWAP, avoid for raw fills or scalar buckets. However, it does not name the specific alternative tools to use in those excluded cases, so it falls just short of the highest bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_hyperliquid_query_fillsFind Hyperliquid tradesA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoTrade direction: "Open Long", "Close Long", "Open Short", "Close Short"
coinNoAsset symbols (e.g., "ETH", "BTC", "SOL")
userNoTrader wallet addresses (0x-prefixed, lowercase)
cloidNoClient order IDs (0x-prefixed hex)
limitNoMax fills to return (default: 50, max: 200)
cursorNoContinuation cursor from a previous response
builderNoBuilder addresses (0x-prefixed, lowercase)
networkNoNetwork name (default: 'hyperliquid-fills'). Optional when continuing with cursor.hyperliquid-fills
to_blockNoEnding block number
fee_tokenNoFee token symbols
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting block number (use this OR timeframe)
include_pnlNoInclude closedPnl and startPosition fields
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
response_formatNoResponse format: defaults to 'compact' for chat-friendly output. Use 'summary' for aggregate stats or 'full' when you truly need every fill field.
include_builder_infoNoInclude builder and builderFee fields

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds the 'raw individual' nature of the data, but doesn't disclose other behavioral traits such as pagination via cursor, potential large result sizes, or any rate limits. Given the annotations cover the safety profile, this is an adequate but not rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with short labeled sections (COMMON USER ASKS, WHEN TO USE, DON'T USE, EXAMPLES). It front-loads the core purpose and every sentence earns its place. No repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 18 parameters, all are documented in the schema (100% coverage), an output schema exists, and the description provides selection criteria, exclusions, and an example. The description is complete enough for an agent to decide when to use it and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds value by showing a real invocation example ("Recent BTC fills": network, timeframe, coin, limit) and by listing the filtering dimensions (trader, coin, direction, builder, fee token) that map directly to schema parameters. This helps an agent construct calls correctly beyond what the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: "Query raw individual Hyperliquid fills" and lists the specific context fields (trader, coin, fee, PnL, builder). It clearly distinguishes this tool from siblings like portal_hyperliquid_get_analytics and portal_hyperliquid_get_ohlc by emphasizing raw fill rows versus aggregates/candles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description has explicit WHEN TO USE and DON'T USE sections, naming concrete conditions (need raw fills, filter by trader/coin/direction) and exclusions (big picture, top traders, grouped aggregates, candles). It also provides a concrete example for a common user ask, leaving no ambiguity about when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_list_networksFind blockchain networksA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
vmNoFilter by VM family
limitNoMax results to return (default: 25, max: 100)
queryNoSearch by name, alias, or chain ID
cursorNoContinuation cursor from a previous network catalog page
network_typeNoFilter by network type
real_time_onlyNoOnly show networks with a real-time indexed head

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context about the tool being a lookup/filter catalog, but does not disclose additional behavioral details such as pagination behavior, result ordering, or how network availability is determined beyond what the schema and annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but every section earns its place: common asks, first-choice guidance, when to use, when not to use, and examples. The front-loaded summary sentence immediately conveys the tool's scope, and the formatting makes the guidance scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup tool with an output schema, the description covers the essential decision space: what the tool finds, which filters matter, and when it should not be used. The presence of an output schema relieves the description from explaining return values, and the examples cover representative parameter combinations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all six parameters. The description adds value through concrete usage examples mapping common asks to parameter combinations (e.g., Base-like networks via query, Solana mainnets via vm and network_type), which helps an agent infer how to construct effective calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: find the correct network or chain name across multiple families. It also distinguishes itself from the surrounding data-querying siblings by being the catalog/discovery tool, explicitly labeled as the first choice before other queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear WHEN TO USE guidance is provided, including concrete scenarios like uncertainty about network names and filtering by VM, network type, or availability. The DON'T USE section gives an exclusion but does not name an alternative sibling tool such as portal_get_network_info or portal_get_head, so the routing is slightly less explicit than it could be.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_resolve_entityFind a token or contractA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoEntity kind to resolve: token, contract alias/address, pool identifier, protocol name, or Hyperliquid coin/ticker.token
limitNoMaximum matches to return.
queryYesEntity string to resolve, e.g. "USDC", "bayc", "uniswap", "BTC", or "0x...".
networkNoNetwork name or alias when the entity is network-scoped, e.g. "base", "ethereum", "arbitrum-one", or "hyperliquid-fills".

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral depth beyond those annotations: ambiguity is kept explicit, the tool checks which token-list addresses a symbol maps to, and it provides source-backed addresses rather than recalled constants. This is useful context but does not fully detail edge cases like no-match behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well organized with labeled sections: a one-line summary, common asks, first-choice uses, when to use, don't use, and examples. The most important scoping information is front-loaded, and the examples are compact and directly actionable. No content is wasted or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values need not be described. Given the four parameters and one required field, the description covers purpose, usage conditions, exclusions, and concrete invocation examples. An agent has everything needed to select and call this tool correctly without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 providing concrete example payloads (e.g., {"network":"base-mainnet","kind":"token","query":"USDC","limit":10}) that illustrate valid combinations of kind, query, network, and limit. This goes beyond the schema's per-field descriptions by showing realistic usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 then enumerates clear example asks (USDC, WETH, BAYC) and explicitly positions itself as the pre-query resolution step, distinguishing it from the sibling query and analytics tools that consume resolved identifiers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes dedicated 'FIRST CHOICE FOR', 'WHEN TO USE', and 'DON'T USE' sections. It states when to use the tool (token symbols, contract names, disambiguation) and when not to use it (when an exact address or filter is already available). This gives an agent explicit decision criteria and exclusions, exceeding the minimum requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_solana_get_analyticsAnalyze Solana activityA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
cursorNoContinuation cursor for paginating top_programs
networkNoNetwork name (default: solana-mainnet)solana-mainnet
timeframeNoTime range. Accepts compact durations like '15m' or natural phrases like 'past 30 minutes'. Optional; defaults to a 1h analysis window.
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
program_limitNoMax top-program rows to return per page when include_programs is enabled
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
response_formatNoResponse format: 'summary' (high-level metrics), 'compact' (core sections), 'full' (complete analytics).full
include_programsNoInclude top programs by instruction count (requires an extra instruction scan and is slower)
include_compute_unitsNoInclude average compute-unit stats across the full range (disabled by default for speed)

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds scope context about what analytics are included and excludes raw records, but does not add behavioral detail such as performance costs, pagination caveats, or response behavior. Schema descriptions carry the extra behavior notes like 'slower' for include_programs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and front-loaded content, using headings like COMMON USER ASKS and EXAMPLES to make it scannable. It is slightly repetitive in emphasizing 'big picture' and 'right now' across multiple sections, but the overall layout is efficient and purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with ​​10 optional parameters, rich schema descriptions, an output schema, and annotations, the description gives enough context for an agent to decide when to call it and how to form example requests. It covers common asks, when to use, when not to use, and includes concrete examples, so nothing critical is missin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is ​​3. The description adds value beyond the schema by providing concrete example payloads and tying common user asks to parameter combinations, such as {'network':'solana-mainnet','timeframe':'1h','include_programs':true} for top-program usage. It does not explain every param, but the schema already does that thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 establishes what the tool does and its scope, and the 'DON'T USE' note separates it from raw-record and chart-bucket tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 conditions like 'network health snapshot' and 'rather than raw records.' However, it does not explicitly name the alternative sibling tools (e.g., portal_solana_query_transactions or portal_solana_query_instructions), only the categories of tasks they handle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_solana_query_instructionsFind Solana program activityA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
a0NoAccount at index 0. You can pass a single string or an array.
a1NoAccount at index 1. You can pass a single string or an array.
a2NoAccount at index 2. You can pass a single string or an array.
a3NoAccount at index 3. You can pass a single string or an array.
a4NoAccount at index 4. You can pass a single string or an array.
a5NoAccount at index 5. You can pass a single string or an array.
a6NoAccount at index 6. You can pass a single string or an array.
a7NoAccount at index 7. You can pass a single string or an array.
a8NoAccount at index 8. You can pass a single string or an array.
a9NoAccount at index 9. You can pass a single string or an array.
d1No1-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array.
d2No2-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array.
d4No4-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array.
d8No8-byte discriminator filter - Anchor (0x-prefixed hex). You can pass a single string or an array.
a10NoAccount at index 10. You can pass a single string or an array.
a11NoAccount at index 11. You can pass a single string or an array.
a12NoAccount at index 12. You can pass a single string or an array.
a13NoAccount at index 13. You can pass a single string or an array.
a14NoAccount at index 14. You can pass a single string or an array.
a15NoAccount at index 15. You can pass a single string or an array.
limitNoMax instructions
cursorNoContinuation cursor from a previous response
networkNoNetwork name or alias. Optional when continuing with cursor.
to_blockNoEnding slot number. Keep ranges reasonable for performance.
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block. Solana slots are ~400ms.
from_blockNoStarting slot number (use this OR timeframe)
program_idNoProgram IDs. You can pass a single string or an array.
include_logsNoInclude program logs
is_committedNoOnly committed transactions
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
finalized_onlyNoOnly query finalized slots
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
mentions_accountNoAccounts mentioned anywhere in the instruction. You can pass a single string or an array.
include_transactionNoInclude transaction data
transaction_fee_payerNoFee payer filter. You can pass a single string or an array.
include_inner_instructionsNoInclude inner (CPI) instructions
include_transaction_balancesNoInclude SOL balance changes
include_transaction_instructionsNoInclude all instructions from the parent transaction (sibling instructions)
include_transaction_token_balancesNoInclude token balance changes

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, and the description is consistent with that. It adds useful context that results are raw instructions and can include Anchor discriminators, but it does not disclose pagination behavior or caveats about finality/performance beyond what the schema fields already note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with COMMON USER ASKS, WHEN TO USE, DON'T USE, and EXAMPLES sections. It is front-loaded with the core query statement and every section adds selection or invocation guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 39-parameter schema with complete per-parameter descriptions, the presence of an output schema, and safety annotations, the description supplies enough orientation. It could be stronger with an explicit pointer to the transaction-level sibling and an account-filter example, but it is not lacking critical usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries most parameter documentation. The description adds value with a concrete Token Program example that demonstrates the expected formats for network, timeframe, program_id (as an array), and limit, and it points users at relevant high-value filters such as program_id and discriminator parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific action and resource: 'Query raw Solana instructions' with program/account filters, and the WHEN/DON'T USE sections make it clear this is instruction-level activity as opposed to transaction-level activity. This distinguishes it cleanly from the sibling portal_solana_query_transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 give explicit conditions (program-level/account-level instruction activity vs. transaction-level activity) and a concrete example. It stops short of naming the sibling query tool explicitly, so the routing guidance is clear but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_solana_query_transactionsFind Solana transactionsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return (default: 50, max: 200)
cursorNoContinuation cursor from a previous response
networkNoNetwork name or alias. Optional when continuing with cursor.
to_blockNoEnding slot number
fee_payerNoFee payer addresses
timeframeNoTime range (e.g., '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting slot number (use this OR timeframe)
include_logsNoInclude program logs
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
finalized_onlyNoOnly query finalized slots
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago".
include_rewardsNoInclude block rewards (validator staking rewards). Filter by pubkey using mentions_account.
response_formatNoResponse 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_balancesNoInclude SOL balance changes
mentions_accountNoAccounts mentioned anywhere in the transaction
include_instructionsNoInclude instruction data
include_token_balancesNoInclude SPL token balance changes

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the 'raw' scope and optional context fields, but does not describe behavior such as pagination, response_format defaults, or limitations. It is adequate but does not go beyond what the schema and annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with scannable sections, front-loaded purpose, and useful examples. The typo in 'DON'T' and slight redundancy in COMMON USER ASKS are minor; overall every section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter tool with no required parameters, the examples and high-level categories provide useful orientation, and the output schema covers return values. However, the documented 'Filter by program' flow is not actually supported by the schema, and there is no guidance on block-vs-timefilter selection, leaving real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, and the description does group include_* flags into meaningful context. However, the examples prominently use program_id for 'Filter by program' while program_id is not present in the input schema. An agent following the example could make an invalid call, which is a significant semantic flaw.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Query raw Solana transactions' with optional balances, rewards, logs, and instruction context. It clearly distinguishes this from convenience or recent-activity tools and from non-Solana network siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 give clear selection criteria: choose this for raw Solana transaction records or Solana-specific filters, not for recent activity or a compact network summary. It does not name the exact sibling tool such as portal_get_recent_activity, so it stops slightly short of strongest routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_substrate_get_analyticsAnalyze Polkadot activityA
Read-only

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"}

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoExecution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews.deep
networkNoSubstrate network name (default: polkadot)polkadot
to_blockNoEnding block number
timeframeNoTime range like '1h', '6h', or '24h'. Default: '1h'
from_blockNoStarting block number (use this OR timeframe)
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
section_limitNoMax rows to keep in ranked event and call sections
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago".
response_formatNoResponse format: 'summary' (headline metrics only), 'compact' (core sections), 'full' (full dashboard payload)full

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the result is an aggregated snapshot with counts and top names, and that it is suited for quick health checks, but it does not disclose further behavior such as indexing lag or window limitations. This is adequate but not especially rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into scannable sections and the main sentence is front-loaded. However, several WHEN TO USE bullets are near-duplicates, and the DON'T USE section introduces confusion by repeating a WHEN TO USE item, adding noise rather than clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter schema coverage, the description does not need to explain return values or parameter details. It provides common asks, examples, and clear selection signals; the main gap is the meaningless DON'T USE section, which does not prevent correct tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to re-explain parameters. The examples reinforce common usage with network and timeframe, but they do not add meaning beyond the input schema for fields like mode, response_format, or block ranges.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence clearly states the tool's function: an analytics snapshot for Substrate or Polkadot activity in an indexed window, with event, call, and extrinsic counts plus top event and call names. This distinguishes it from raw-data sibling tools like portal_substrate_query_events and portal_substrate_query_calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

WHEN TO USE and FIRST CHOICE FOR sections provide explicit conditions, and the contrasts against raw rows and network freshness metadata help an agent choose this tool over alternatives. However, the DON'T USE section is malformed and repeats a WHEN TO USE bullet, so no genuine exclusion is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_substrate_query_callsFind Polkadot callsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax calls to return
cursorNoContinuation cursor from a previous response
networkNoSubstrate network name or alias. Optional when continuing with cursor.
to_blockNoEnding block number
timeframeNoTime range (e.g. '1h', '24h'). Alternative to from_block/to_block.
call_namesNoOptional qualified call names like Timestamp.set or Balances.transfer_keep_alive
from_blockNoStarting block number
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
include_stackNoAttach the parent call stack for each matching call
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago".
include_eventsNoAttach events emitted directly by each matching call
response_formatNoResponse format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested subcalls, events, and extrinsic context in a smaller inline shape.
include_subcallsNoAttach direct descendant calls inline for each matching call
include_extrinsicNoAttach the parent extrinsic inline for each matching call

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context by emphasizing that results are raw call rows, that it can include emitted events, subcalls, and extrensic context, and that it is not for aggregate analytics. It does not contradict any annotations and gives agents a clear sense of what the response represents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than a single sentence but is well-structured with helpful sections and front-loaded purpose. Some repetition exists across 'COMMON USER ASKS', 'FIRST CHOICE FOR', and 'WHEN TO USE', but each section serves a different routing question, and the examples earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter query tool with an output schema and safe-read annotations, the description is highly complete. It covers what the tool returns, when to use it, when not to use it, and provides working examples for common requests. The output schema covers return values, so the description does not need to enumerate response fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 15 parameters. The description adds value by grouping parameters into conceptual categories ('child-call, emitted-event, or extrensic context') and providing concrete JSON examples with call_names like 'Balances.transfer_keep_alive' and include_events, which clarifies realistic usage beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 Substrate or Polkadot calls with pallet/call-Name filters and optional child-call, emitted-event, or extrensic context.' This clearly distinguishes it from related tools like portal_substrate_query_events or analytics tools, and the title 'Find Polkadot calls' aligns with this purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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. It tells agents to use this tool for raw call records or call-plus-events needs, and explicitly says not to use it when wanting events or aggregate analytics, making the choice versus siblings like portal_substrate_query_events and portal_substrate_get_analytics straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

portal_substrate_query_eventsFind Polkadot eventsA
Read-only

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax events to return
cursorNoContinuation cursor from a previous response
networkNoSubstrate network name or alias. Optional when continuing with cursor.
to_blockNoEnding block number
timeframeNoTime range (e.g. '1h', '24h'). Alternative to from_block/to_block.
from_blockNoStarting block number
event_namesNoOptional qualified event names like Balances.Transfer or System.ExtrinsicSuccess
include_callNoAttach the emitting call inline when the event has call context
to_timestampNoEnding timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now".
include_stackNoAttach the parent call stack when the event has nested call context
finalized_onlyNoOnly query finalized blocks
from_timestampNoStarting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago".
response_formatNoResponse format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested extrinsic or call context in a smaller inline shape.
include_extrinsicNoAttach the parent extrinsic inline for each matching event

Output Schema

ParametersJSON Schema
NameRequiredDescription
_uiNoOptional chart, table, and follow-up presentation metadata.
_llmNoHints that help an AI client locate the primary evidence.
_metaNoNetwork, block range, timing, and row-count metadata.
errorNoStructured failure details when the tool cannot complete the request.
itemsNoPrimary result rows when the tool returns a list.
valueNoPrimary result when the tool returns a scalar value.
answerNoConcise answer grounded in the returned blockchain data.
_noticeNoImportant limitation or truncation notice.
displayNoPlain-language labels for presenting the result.
_noticesNoImportant limitations or truncation notices.
_summaryNoHuman-readable summary of the result.
_coverageNoCompleteness of the requested window and result set.
_evidenceNoReplayable arguments, exact-data digest, row count, and completeness receipt.
_orderingNoOrdering guarantees for the returned data.
_executionNoBounded execution and scan details.
_freshnessNoFreshness and finality information for the returned data.
next_stepsNoSafe follow-up actions and continuation guidance.
_paginationNoPagination state and an optional continuation cursor.
investigationNoEvidence paths, useful pivots, and result limitations.
pipes_handoffNoOptional SQD Pipes guidance for custom data needs.
_tool_contractNoTool identity, intent, and supported blockchain families.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it returns raw rows, supports pallet/event-name filtering, and can attach parent call or extrinsic context. This helps an agent understand the shape of the query and results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear sections and front-loaded purpose. There is some redundancy—'FIRST CHOICE FOR' largely repeats the opening sentence—but the WHEN TO USE, DON'T USE, and EXAMPLE sections each earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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, output schema present, many siblings), the description is complete for selection and invocation. It covers what the tool does, when to choose it over alternatives, when not to use it, and provides a concrete parameterized example. The output schema handles return-value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 14 parameters. The description adds a helpful example mapping a common ask to parameters (network, timeframe, event_names, limit) and highlights the key filter concept, but it does not meaningfully extend the detailed schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 Substrate or Polkadot event rows with pallet/event-name filters and optional parent call or extrinsic context.' It clearly distinguishes itself from sibling tools by emphasizing 'raw event rows' and 'pallet-level event activity' as opposed to calls or analytics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 when event rows are the right output and explicitly warns against using this tool for 'calls or aggregate analytics,' which maps directly to sibling tools like portal_substrate_query_calls and portal_substrate_get_analytics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 28 tool updatesv0.8.3
    • Changedportal_bitcoin_get_analytics1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_bitcoin_query_transactions1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_hyperliquid_query_replica_commands1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_query_blocks1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_resolve_time_to_block1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_analytics1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_contract_activity1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_contract_deployment1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_ohlc1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_logs1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_token_transfers1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_transactions1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_head1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_network_info1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_recent_activity1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_time_series1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_wallet_summary1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_get_analytics1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_get_ohlc1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_query_fills1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_list_networks1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_resolve_entity1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_get_analytics1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_query_instructions1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_query_transactions1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_get_analytics1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_query_calls1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_query_events1 field changed
      • addedOutput schema / properties / _evidence
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  2. 28 tool updatesv0.8.2
    • Changedportal_bitcoin_get_analytics7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_bitcoin_query_transactions7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_hyperliquid_query_replica_commands7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_query_blocks7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_debug_resolve_time_to_block5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_analytics7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_contract_activity7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_contract_deployment7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_get_ohlc7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / fee / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / fee / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / tick_spacing / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / tick_spacing / minimum
        Added value: +-9007199254740991
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_logs9 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / max_scan_blocks
        Added value: +{
        +  "description": "Maximum blocks to inspect for bounded earliest/latest scans. Sparse latest searches default to 25,000 blocks to stay within MCP request timeouts; raise only when deeper coverage is worth the added latency.",
        +  "maximum": 250000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / timeframe / description
        Previous value: -"Time range (e.g., '24h', '7d'). Alternative to from_block/to_block. Supported: 1h, 6h, 12h, 24h, 3d, 7d, 14d, 30d"New value: +"Natural time range such as '5m', '1h', '24h', '7d', or 'past 30 minutes'. Alternative to from_block/to_block."
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_token_transfers7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_evm_query_transactions16 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / min_effective_gas_price_wei / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / min_effective_gas_price_wei / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / min_gas_used / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / min_gas_used / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / min_value_wei / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / min_value_wei / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedInput schema / properties / timeframe / description
        Previous value: -"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)."New value: +"Natural time range such as '5m', '1h', '24h', '7d', or 'past 30 minutes'. Alternative to from_block/to_block. Large ranges are allowed with a low limit (<=100)."
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / transaction_type / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / transaction_type / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_head3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_network_info3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_recent_activity7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_time_series7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_get_wallet_summary7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_get_analytics7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_get_ohlc3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_hyperliquid_query_fills7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_list_networks5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Continuation cursor from a previous network catalog page",
        +  "type": "string"
        +}
      • changedInput schema / properties / vm / enum
        Previous value: -[
        -  "evm",
        -  "solana",
        -  "bitcoin",
        -  "substrate",
        -  "hyperliquid"
        -]New value: +[
        +  "evm",
        +  "tron",
        +  "solana",
        +  "bitcoin",
        +  "substrate",
        +  "hyperliquid"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_resolve_entity3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_get_analytics7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_query_instructions7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_solana_query_transactions7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_get_analytics7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_query_calls7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedportal_substrate_query_events7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / from_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / to_timestamp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / to_timestamp / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "_coverage": {
        +      "description": "Completeness of the requested window and result set."
        +    },
        +    "_execution": {
        +      "additionalProperties": {},
        +      "description": "Bounded execution and scan details.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_freshness": {
        +      "description": "Freshness and finality information for the returned data."
        +    },
        +    "_llm": {
        +      "description": "Hints that help an AI client locate the primary evidence."
        +    },
        +    "_meta": {
        +      "additionalProperties": {},
        +      "description": "Network, block range, timing, and row-count metadata.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_notice": {
        +      "description": "Important limitation or truncation notice.",
        +      "type": "string"
        +    },
        +    "_notices": {
        +      "description": "Important limitations or truncation notices.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "_ordering": {
        +      "description": "Ordering guarantees for the returned data."
        +    },
        +    "_pagination": {
        +      "additionalProperties": {},
        +      "description": "Pagination state and an optional continuation cursor.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_summary": {
        +      "description": "Human-readable summary of the result.",
        +      "type": "string"
        +    },
        +    "_tool_contract": {
        +      "additionalProperties": {},
        +      "description": "Tool identity, intent, and supported blockchain families.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "_ui": {
        +      "description": "Optional chart, table, and follow-up presentation metadata."
        +    },
        +    "answer": {
        +      "description": "Concise answer grounded in the returned blockchain data.",
        +      "type": "string"
        +    },
        +    "display": {
        +      "additionalProperties": {},
        +      "description": "Plain-language labels for presenting the result.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": {},
        +      "description": "Structured failure details when the tool cannot complete the request.",
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "origin": {
        +          "type": "string"
        +        },
        +        "retry_after_ms": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        },
        +        "suggestions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "origin",
        +        "summary",
        +        "retryable",
        +        "suggestions"
        +      ],
        +      "type": "object"
        +    },
        +    "investigation": {
        +      "additionalProperties": {},
        +      "description": "Evidence paths, useful pivots, and result limitations.",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "items": {
        +      "description": "Primary result rows when the tool returns a list.",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "next_steps": {
        +      "additionalProperties": {},
        +      "description": "Safe follow-up actions and continuation guidance.",
        +      "properties": {
        +        "actions": {
        +          "items": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "continuation": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "custom_data": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "actions"
        +      ],
        +      "type": "object"
        +    },
        +    "pipes_handoff": {
        +      "description": "Optional SQD Pipes guidance for custom data needs."
        +    },
        +    "value": {
        +      "description": "Primary result when the tool returns a scalar value."
        +    }
        +  },
        +  "type": "object"
        +}
  3. 28 tool updatesv0.7.9
    • First observedportal_bitcoin_get_analytics
    • First observedportal_bitcoin_query_transactions
    • First observedportal_debug_hyperliquid_query_replica_commands
    • First observedportal_debug_query_blocks
    • First observedportal_debug_resolve_time_to_block
    • First observedportal_evm_get_analytics
    • First observedportal_evm_get_contract_activity
    • First observedportal_evm_get_contract_deployment
    • First observedportal_evm_get_ohlc
    • First observedportal_evm_query_logs
    • First observedportal_evm_query_token_transfers
    • First observedportal_evm_query_transactions
    • First observedportal_get_head
    • First observedportal_get_network_info
    • First observedportal_get_recent_activity
    • First observedportal_get_time_series
    • First observedportal_get_wallet_summary
    • First observedportal_hyperliquid_get_analytics
    • First observedportal_hyperliquid_get_ohlc
    • First observedportal_hyperliquid_query_fills
    • First observedportal_list_networks
    • First observedportal_resolve_entity
    • First observedportal_solana_get_analytics
    • First observedportal_solana_query_instructions
    • First observedportal_solana_query_transactions
    • First observedportal_substrate_get_analytics
    • First observedportal_substrate_query_calls
    • First observedportal_substrate_query_events

TDQS

A4.2/5.0

Scored across 28 tools

Disambiguation5/5

Each tool carves out a distinct resource and action, from raw VM-specific queries to analytics, OHLC, wallet summaries, and network metadata. Potentially similar pairs like evm_query_logs vs evm_query_token_transfers and get_recent_activity vs query_transactions are clearly separated by WHEN/DON'T USE guidance and example payloads. An agent can reliably choose the correct tool.

Naming Consistency5/5

All tools share the portal_ prefix and use lower_snake_case consistently. Raw record access follows a query_<resource> pattern, summaries and candles follow get_<resource>, and advanced tooling is clearly marked with debug_, so the naming convention is predictable across all five supported chain families.

Tool Count4/5

28 tools is on the high side and exceeds the usual 3-15 sweet spo, but the broad multi-chain scope—EVMs, Solana, Bitcoin, Substrate, and Hyperliquid—plus separate raw query, analytics, OHLC, and debug layers makes the count defensible. It is slightly heavy but does not feel bloated because each tool has a distinct role.

Completeness4/5

The surface covers network discovery and freshness, entity resolution, recent activity, wallet summaries, time series, raw queries for transactions/logs/instructions/events/calls/fills, analytics, OHLC candles, and debug block/time tooling. Minor gaps exist, such as no dedicated Solana token-transfer convenience tool and no general Substrate block query, but agents can work around these with the existing raw query tools.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    250+ AI-powered MCP tools: research, write, code, translate, scrape, sentiment, vision, RAG, agent memory, marketplace, trading signals, and more. 15 models across 7 providers. Pay-per-use via API key or x402 USDC micropayments.
    2
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Comprehensive MCP server for the Sui blockchain with 53 tools covering wallets, DeFi (Cetus, DeepBook), SuiNS, staking, validators, Move introspection, and full RPC. Enables natural language interaction with the entire Sui ecosystem.
    53
    30 npm
    1
    MIT