SQD
OfficialThe SQD Portal MCP Server is a thin wrapper around the SQD Portal API that lets you query blockchain data across multiple networks without indexing chains yourself. Responses include structured metadata (answer, display, next_steps) designed for MCP clients and LLMs.
Discovery & Network Info
List/search networks across EVM, Solana, Bitcoin, Substrate, and Hyperliquid
Check indexing status, freshness, and available tables for any network
Resolve entity names (token symbols like USDC/WETH, contract aliases, pool IDs) into query-ready filters
Cross-Chain Convenience
Recent activity feed with chronological paging
Wallet summaries — inbound/outbound flows, top counterparties, largest movements
Time-series charts with bucket intervals and compare-previous windows
EVM
Query raw transactions, logs (with inline decoding), and ERC-20 token transfers
Find contract deployments and get contract activity summaries
Network analytics (top contracts, overview metrics) and OHLC candles from Uniswap v2/v3/v4, Aerodrome DEX events
Solana
Query raw transactions and instructions (with program ID, discriminator filters)
Network analytics: throughput, fees, top programs
Bitcoin
Query raw transactions with inline inputs/outputs
Network analytics: block cadence, fees, SegWit/Taproot adoption
Substrate / Polkadot
Query raw events and calls with pallet/name filters
Analytics snapshots for indexed historical windows
Hyperliquid
Query raw fills by trader, coin, direction, or fee token
Analytics: top traders, volume, fees, PnL
OHLC candles with VWAP and volume; advanced replica command queries (orders, cancels)
Debug / Advanced
Query raw block records for EVM, Solana, or Bitcoin
Resolve timestamps to block/slot numbers for manual range queries
Allows querying Bitcoin blockchain transactions and network analytics.
Provides tools for querying Ethereum blockchain data including transactions, logs, token transfers, contract deployment and activity, network analytics, and OHLC price candles.
Provides tools for querying the Optimism network (EVM-based) including transactions, logs, token transfers, contract analytics, and OHLC prices.
Allows querying Solana blockchain transactions, instructions, and network analytics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SQDGet wallet summary for 0xabc on Ethereum"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
28public tools3advanced/debug toolspublic params use
networkdiscovery filters use
vmno 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_networksportal_get_network_infoportal_get_headportal_resolve_entity
Cross-chain convenience:
portal_get_recent_activityportal_get_wallet_summaryportal_get_time_series
EVM:
portal_evm_query_transactionsportal_evm_query_logsportal_evm_query_tracesportal_evm_query_token_transfersportal_evm_get_contract_deploymentportal_evm_get_contract_activityportal_evm_get_analyticsportal_evm_get_ohlc
Solana:
portal_solana_query_transactionsportal_solana_query_instructionsportal_solana_get_analytics
Bitcoin:
portal_bitcoin_query_transactionsportal_bitcoin_get_analytics
Substrate:
portal_substrate_query_eventsportal_substrate_query_callsportal_substrate_get_analytics
Hyperliquid:
portal_hyperliquid_query_fillsportal_hyperliquid_get_analyticsportal_hyperliquid_get_ohlc
Tron:
portal_tron_query_transactionsportal_tron_query_logs
Advanced/debug:
portal_debug_query_blocksportal_debug_resolve_time_to_blockportal_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:
answerdisplaynext_stepsinvestigation_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=1to the endpoint, for examplehttps://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=0opts 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-walletinvestigate-contractinvestigate-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:
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=1turns the beta on for this connection only. On Claude Desktop you can instead installsqd.mcpbfrom the latest release and switch on its "SQD Explorer (beta)" setting.Start a new chat and enable the SQD connector for it.
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 buildRun
stdio:
npm startHTTP:
npm run start:httpDeveloper discovery
The server exposes a structured tool-selection guide for client builders:
MCP resource
sqd://toolsreturns grouped tool metadata, examples, starting points, and integration notes.MCP resource
sqd://tools/{name}returns the guide entry for one tool, for examplesqd://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@sqdOpen 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@sqdOpen a new Claude Code session after installing so the SQD MCP tools are loaded.
Grok
Grok chat can use SQD as a custom connector:
Open
grok.com/connectors.Choose New Connector, then Custom.
Enter
https://portal.sqd.dev/mcpas the MCP server URL.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/portalChatGPT
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_infoorportal_get_headfirst.If the question is broad, start with
portal_get_recent_activity,portal_get_wallet_summary, orportal_get_time_seriesbefore 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, or30 minutes ago.Use
portal_evm_get_ohlcandportal_hyperliquid_get_ohlconly 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
/toolsand/tools.jsonroutes return404.Set
MCP_CURSOR_SECRETon 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./healthreportsversionandcommit, the git commit the image was built from, and every tool result repeats both in_server. Docker Hub tags:latest,X.Y.Z, andX.Ycome only from av*release tag;edgeandsha-<commit>come from everymainpush. Pin a version tag in production./readyis200only after the dataset catalog has loaded once and the latest Portal probe succeeded withinMCP_READY_MAX_AGE_MS; otherwise it is503with areasonandRetry-After. Point orchestrator readiness checks at/readyand liveness checks at/health. The Docker image'sHEALTHCHECKuses/ready.The server binds
127.0.0.1unlessMCP_BINDsays otherwise, and every route checks theHostheader (andOrigin, 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 withoutOriginalways pass the origin check. A non-loopback bind must setMCP_ALLOWED_HOSTSandMCP_ALLOWED_ORIGINS; if either is missing the server logs a startup error and serves without that check. The Docker image setsMCP_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 withinMCP_REQUEST_TIMEOUT_MS, idle keep-alive withinMCP_KEEP_ALIVE_TIMEOUT_MS, and MCP bodies aboveMCP_MAX_BODY_BYTESare refused with413before parsing (411for a chunked body with no length).
Useful environment variables:
MCP_CURSOR_SECRETthe 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_TOOLSETScomma-separated toolsets to serve (discovery,convenience,evm,solana,bitcoin,substrate,hyperliquid,tron,debug;allordefaultfor everything). Unknown names are ignored with a startup error. Wins overMCP_TOOLS. Default: all nine, the full 31-tool catalog.MCP_TOOLScomma-separated exact tool names to serve whenMCP_TOOLSETSis unset.Per connection,
?toolsets=evmon the endpoint URL or anX-MCP-Toolsets: evmheader 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, orcustom) onmcp_tool_client_calls_total.MCP_BINDinterface to listen on, default127.0.0.1(0.0.0.0in the Docker image)MCP_ALLOWED_HOSTScomma-separated hostnames accepted inHost(port ignored) on top of loopback;*disables the check. Required for a non-loopback bind.MCP_ALLOWED_ORIGINScomma-separated hostnames accepted inOriginon top of loopback;*disables the check. Required for a non-loopback bind.MCP_REQUEST_TIMEOUT_MS,MCP_HEADERS_TIMEOUT_MS,MCP_KEEP_ALIVE_TIMEOUT_MSrequest timing bounds, defaults120000,30000,65000MCP_MAX_BODY_BYTESMCP request body cap, default1048576MCP_READY_PROBE_INTERVAL_MSandMCP_READY_MAX_AGE_MSreadiness probe cadence and freshness, defaults30000and90000MCP_APP_ENABLEDto offer the beta SQD Explorer to compatible hosts, default off. Acceptstrueor1. Per-connection?app=1and?app=0override it.MCP_TOOL_WEIGHT_BUDGETto bound the combined cost of active tool calls, default32. 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_QUEUEto bound queued tool calls, default64MCP_TOOL_QUEUE_TIMEOUT_MSto bound tool admission wait time, default5000MCP_TOOL_CLIENT_WEIGHT_SHAREpercent of the weight budget one caller (one connection, identified by a hashed address) may hold at once, default50; never below the heaviest single tool so every tool stays schedulable.MCP_TOOL_CLIENT_MAX_QUEUEbounds one caller's queued calls, default16. A caller over its share gets the retryableoverloadedresult withreason: client_sharewhile others keep flowing.MCP_TRUST_PROXYset to1(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 ofX-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_PREFIXESa comma-separated list of address prefixes that count as your proxies, matched against the start of the peer address (for example203.0.113.or2606: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_MSthreshold for one JSON line on stderr per slow tool call with admission wait and execution timings and the bounded client family, default5000.
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_MODEone ofoff(default),shadow, orenforce.MCP_GUARDRAIL_<CLASS>_<LIMIT>sets one ceiling, where<CLASS>isLOOKUP,RAW_QUERY,SUMMARY, orANALYTICS, and<LIMIT>isMAX_SCAN_BLOCKS,MAX_WINDOW_SECONDS, orMAX_UPSTREAM_BYTES. For exampleMCP_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_completebecomesfalseand 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-httpOTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4318One 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
traceparenton 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_metavalue wins, because it is the more specific claim about which turn this call belongs to.Each Portal request carries a
traceparentnaming 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_idandspan_idwhile tracing is on, so a log event and its span can be looked up from each other./healthreports 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
Available Tools
28 toolsportal_bitcoin_get_analyticsAnalyze Bitcoin activityARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | No | Network name (default: bitcoin-mainnet) | bitcoin-mainnet |
| to_block | No | Ending block number | |
| timeframe | No | Time range: '1h' (~6 blocks), '6h' (~36 blocks), '24h' (~144 blocks). Default: '1h' | |
| from_block | No | Starting block number (use this OR timeframe) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (high-level metrics only), 'compact' (core sections, lighter payload), 'full' (complete analytics). | full |
| include_address_activity | No | Include unique address count and output value (requires extra queries, slower) |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 transactionsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (default: bitcoin-mainnet). Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_inputs | No | Attach transaction inputs inline | |
| include_outputs | No | Attach transaction outputs inline | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps inline inputs and outputs in a smaller shape when requested. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 recordsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | User wallet addresses (0x-prefixed, lowercase) | |
| limit | No | Max actions to return | |
| cursor | No | Continuation cursor from a previous response | |
| status | No | Filter by action status | |
| network | No | Network name (default: 'hyperliquid-replica-cmds'). Optional when continuing with cursor. | hyperliquid-replica-cmds |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| action_type | No | Action types to filter | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| vault_address | No | Vault addresses (0x-prefixed, lowercase) | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 blocksARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max blocks to return (default: 20). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| field_preset | No | Field preset for EVM datasets: 'minimal' (number+timestamp+gas), 'standard' (+hash+miner+size), 'full' (all block fields). Ignored for Solana/Bitcoin. | standard |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_l2_fields | No | Include L2-specific fields (auto-detected for L2 chains) |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 blockARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Network name or alias | |
| timestamp | Yes | Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago" |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| limit | No | Number of top contracts to return (default: 10, max: 100) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (supports short names: 'ethereum', 'polygon', 'base', etc.). Optional when continuing with cursor. | |
| timeframe | No | Optional natural time window like '1h' or '24h' | |
| num_blocks | No | Number of recent blocks to analyze when timeframe is omitted (default: 50, max: 10000) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_details | No | Include sample transaction hashes for each contract |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | Yes | Network name or alias | |
| timeframe | No | Analysis period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'. | 1000 |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_events | No | Include event log summary | |
| contract_address | Yes | Contract address to analyze |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 deploymentARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | EVM network name or alias, e.g. base, ethereum, arbitrum. | |
| contract | No | Contract address or a supported well-known alias/name, e.g. "bayc" or "bored apes" on Ethereum. | |
| to_block | No | Optional ending block. Defaults to the indexed head. | |
| timeframe | No | Optional recent time window to search, e.g. "24h" or "7d". | |
| from_block | No | Optional starting block. Provide this for older contracts when the deployment is not recent. | |
| scan_order | No | Scan latest first for recent deployments, or earliest first when you provide a historical from_block. | latest |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "7d ago". | |
| max_scan_blocks | No | Safety cap for historical deployment scans. Default: scan the requested window up to 1,000,000 blocks. | |
| contract_address | No | Contract address whose deployment transaction should be located. | |
| search_depth_blocks | No | When no explicit range is given, search this many recent blocks backward from the indexed head. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context 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.
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.
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.
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.
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.
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 historyARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| fee | No | Optional Uniswap v4 LP fee in hundredths of a bip, e.g. 3000 for 0.30%. | |
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor from a previous candle page | |
| source | No | Which event source to build candles from. Prefer swap-derived sources for factual trade prices and volumes. Uniswap v4 uses PoolManager Swap events filtered by pool_id, not a per-pool contract address. | uniswap_v3_swap |
| network | No | EVM network name (default: base-mainnet) | base-mainnet |
| pool_id | No | Uniswap v4 pool id (bytes32). Optional when you provide the full v4 pool key instead. | |
| duration | No | How much recent history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes". | 1h |
| interval | No | Candle interval. auto uses chart-friendly defaults like 1h→5m and 24h→1h. | auto |
| price_in | No | Choose which token the displayed price should be expressed in. auto picks the more human-readable quote side. | auto |
| base_token | No | Legacy orientation input. Prefer price_in instead. | |
| pool_address | No | Pool/pair contract address for address-keyed sources like Uniswap v3, Slipstream, or Sync-derived CPMM pools. | |
| tick_spacing | No | Optional Uniswap v4 tick spacing. Required with the rest of the pool key when deriving pool_id. | |
| hooks_address | No | Optional Uniswap v4 hooks contract address. Defaults to the zero address when omitted. | |
| token0_symbol | No | Optional token0 symbol label for summaries | |
| token1_symbol | No | Optional token1 symbol label for summaries | |
| token0_address | No | Optional token0 address to infer known decimals | |
| token1_address | No | Optional token1 address to infer known decimals | |
| token0_decimals | No | Optional token0 decimals for human-readable prices | |
| token1_decimals | No | Optional token1 decimals for human-readable prices | |
| currency0_address | No | Optional Uniswap v4 currency0 address. Use with currency1_address, fee, and tick_spacing to derive pool_id factually. | |
| currency1_address | No | Optional Uniswap v4 currency1 address. Use with currency0_address, fee, and tick_spacing to derive pool_id factually. | |
| recent_trades_limit | No | Maximum number of recent trades to return in the trade tape. | |
| pool_manager_address | No | Uniswap v4 PoolManager address. Optional on networks with a built-in official Uniswap deployment mapping. | |
| include_recent_trades | No | Include a recent trade tape for swap-derived sources when factual per-trade amounts are available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 eventsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Common event alias or topic0 hash. Examples: "transfer", "approval", "swap", "sync", "deposit", "withdrawal". Merges with topic0. | |
| limit | No | Max logs to return (default: 20, max: 200). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| decode | No | Decode known log signatures inline when topics/data are available | |
| topic0 | No | Event signatures (topic0). E.g., Transfer = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef | |
| topic1 | No | Topic1 filter (often: from address in Transfer, indexed parameter 1) | |
| topic2 | No | Topic2 filter (often: to address in Transfer, indexed parameter 2) | |
| topic3 | No | Topic3 filter (indexed parameter 3, chain-specific) | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number. RECOMMENDED: <10k blocks for fast (<1s) responses. Larger ranges may be slow or timeout. | |
| addresses | No | Contract addresses to filter (e.g., ['0xUSDC...', '0xDAI...']). IMPORTANT: Always include this or topics for fast queries. | |
| timeframe | No | Natural time range such as '5m', '1h', '24h', '7d', or 'past 30 minutes'. Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| scan_order | No | Which side of the block window to scan first. Use earliest for first-event questions. | latest |
| field_preset | No | Field preset: 'minimal' (address+topic0+block, ~80% smaller), 'standard' (all topics+timestamp), 'full' (includes raw data hex, largest). Use 'minimal' to reduce context usage. | standard |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| token_symbols | No | Token symbols to resolve via open token-list data and merge into addresses, e.g. ["USDC"]. | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| max_scan_blocks | No | 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. | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline transaction context is requested. Use 'summary' for counting or categorizing. | |
| include_transaction | No | Include parent transaction data | |
| include_transaction_logs | No | Include all logs from parent transactions | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use addresses for deterministic single-contract filters. | |
| include_transaction_traces | No | Include traces for parent transactions |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 transfersARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transfers | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number. RECOMMENDED: <10k blocks for fast responses. | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to block numbers. | |
| from_block | No | Starting block number | |
| scan_order | No | Which side of the block window to scan first. Use earliest for first-transfer questions. | latest |
| to_addresses | No | Recipient addresses | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| token_symbols | No | Token symbols to resolve via open token-list data, e.g. ["USDC"]. Merges with token_addresses. | |
| from_addresses | No | Sender addresses | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| token_addresses | No | Token contract addresses | |
| include_token_info | No | Include token metadata (symbol, decimals) inline. Avoids separate token metadata lookups. | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use token_addresses for deterministic single-contract filters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 transactionsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions (default: 20, max: 200). Note: Lower default for MCP to reduce context usage. | |
| cursor | No | Continuation cursor from a previous response | |
| method | No | FILTER: Common EVM method alias or 4-byte sighash. Examples: "transfer", "approve", "transferFrom", "deposit", "withdraw". Merges with sighash. | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| sighash | No | FILTER: Function sighash (4-byte hex, e.g., '0xa9059cbb' for transfer). Optional if limit <=100. | |
| order_by | No | Optional ranking for top-N questions. Use value_desc, gas_used_desc, or effective_gas_price_desc. | chronological |
| to_block | No | Ending block number. RECOMMENDED: <5k blocks for fast (<500ms) responses. Larger ranges may be slow. | |
| timeframe | No | 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). | |
| from_block | No | Starting block number (use this OR timeframe). Large ranges OK with low limit (<=100). | |
| last_nonce | No | Maximum nonce | |
| scan_order | No | Which side of the block window to scan first. Normal previews default to latest; transaction_type searches default to earliest, so "first tx type 0x1 from block N" scans forward from from_block. | |
| first_nonce | No | Minimum nonce | |
| aggregate_by | No | Optional bounded aggregation for top sender/receiver questions. Returns ranked address rows instead of raw transactions. | |
| field_preset | No | Field preset: 'minimal' (from/to/value+block, ~70% smaller), 'standard' (hash+gas+timestamp), 'full' (includes input data hex, largest). Use 'minimal' to reduce context usage. | standard |
| include_logs | No | Include logs emitted by transactions | |
| min_gas_used | No | FILTER/RANKING: Minimum receipt gasUsed. Accepts decimal or hex string. | |
| to_addresses | No | FILTER: Recipient addresses (typically contracts being called, or wallets receiving ETH). Optional if limit <=100. | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| min_value_wei | No | FILTER/RANKING: Minimum native token value in wei. Accepts decimal or hex string. | |
| finalized_only | No | Only query finalized blocks | |
| from_addresses | No | FILTER: Sender addresses (wallets or contracts that initiated the transaction). Optional if limit <=100. | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_traces | No | Include traces for transactions | |
| max_scan_blocks | No | Safety cap for first/last/ranked client-side scans. Default: min(window, 10000 blocks). | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline logs, traces, or state diffs are requested. Use 'summary' for counting or profiling. | |
| aggregate_metric | No | Metric used with aggregate_by. count ranks by tx count; value by total native value; gas_used by total gas used; effective_gas_price by max effective gas price. | count |
| to_token_symbols | No | Resolve token symbols via open token-list data and merge them into to_addresses, e.g. transfer/approve calls to USDC. | |
| transaction_type | No | FILTER: EVM transaction type. Accepts decimal or hex strings such as 0, 1, 2, "0x0", "0x1", "0x2". Applied client-side while streaming Portal results; use with scan_order="earliest" and from_block to find the first typed transaction. | |
| contract_creation | No | FILTER: true returns contract-creation transactions; false excludes them. Useful for "first contract creation from this wallet". | |
| include_l2_fields | No | Include L2-specific fields | |
| from_token_symbols | No | Resolve token symbols via open token-list data and merge them into from_addresses. Rare, but useful for token-contract-originated transactions. | |
| transaction_status | No | FILTER: Transaction receipt status. Use "success"/1 or "failed"/0 for failed/reverted transaction searches. | |
| include_state_diffs | No | Include state diffs caused by transactions | |
| max_token_symbol_matches | No | Maximum token-list matches to include per token symbol. Use from_addresses/to_addresses for deterministic single-contract filters. | |
| min_effective_gas_price_wei | No | FILTER/RANKING: Minimum effectiveGasPrice in wei. Accepts decimal or hex string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 blockARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Block type | latest |
| network | Yes | Network name or alias |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 statusARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Network name or alias |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name (supports short names: 'polygon', 'base', 'ethereum', 'arbitrum', etc.). Optional when continuing with cursor. | |
| timeframe | No | Time period or block count. Examples: '100' (default), '1h', '6h', '24h', '7d', '3d'. | 100 |
| to_addresses | No | Filter by recipient addresses | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_addresses | No | Filter by sender addresses | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| metric | Yes | Metric to aggregate over time | |
| address | No | Optional: Filter to specific contract address for contract-specific trends | |
| network | Yes | Network name (supports short names: 'ethereum', 'polygon', 'base', etc.) | |
| duration | No | Total time period to analyze. Defaults to "6h" for interactive use. Explicit longer windows like "24h" or "7d" are supported but can take longer. Accepts compact durations like "30m" or natural phrases like "past 30 minutes". | 6h |
| group_by | No | Optional grouping mode. contract is currently supported only for EVM transaction_count | none |
| interval | Yes | Time bucket interval (5m, 15m, 1h, 6h, 1d) | |
| group_limit | No | Maximum number of contract groups when group_by=contract | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "24h ago". | |
| compare_previous | No | Compare the selected window against the immediately previous window |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor from a previous response | |
| address | No | Wallet address to analyze. Optional when continuing with cursor. | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| timeframe | No | Look-back period as timeframe or block count. Examples: '1h', '24h', '7d', '3d', '1000'. | 1000 |
| include_nfts | No | Include NFT transfers (ERC721/1155) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_tokens | No | Include ERC20 token transfers | |
| limit_per_type | No | Max items per category (txs, tokens, nfts) | |
| response_format | No | Response format: defaults to 'compact' for a readable wallet investigation. Use 'summary' for headline flow only or 'full' for all returned activity rows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 tradingARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter by asset symbols (e.g., ["BTC", "ETH"]) | |
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor for ranked analytics sections | |
| network | No | Network name (default: 'hyperliquid-fills') | hyperliquid-fills |
| timeframe | No | Time range: '1h', '6h', '24h'. Default: '1h' | 1h |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| section_limit | No | Per-section page size for ranked sections. Default: 6 | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (smallest snapshot), 'compact' (chat-sized ranked sections, default), 'full' (complete analytics). | compact |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 pricesARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Asset symbol to build candles for (for example: "BTC", "ETH", "SOL"). Optional when continuing with cursor. | |
| user | No | Optional trader wallet address (0x-prefixed, lowercase) | |
| cursor | No | Continuation cursor from a previous candle page | |
| network | No | Network name (default: 'hyperliquid-fills') | hyperliquid-fills |
| duration | No | How much recent trading history to cover. Accepts compact durations like "1h" or natural phrases like "past 30 minutes". | 1h |
| interval | No | Candle interval. Use auto for chart-friendly defaults: 1h→5m, 6h→15m, 12h→30m, 24h→1h. | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 tradesARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Trade direction: "Open Long", "Close Long", "Open Short", "Close Short" | |
| coin | No | Asset symbols (e.g., "ETH", "BTC", "SOL") | |
| user | No | Trader wallet addresses (0x-prefixed, lowercase) | |
| cloid | No | Client order IDs (0x-prefixed hex) | |
| limit | No | Max fills to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| builder | No | Builder addresses (0x-prefixed, lowercase) | |
| network | No | Network name (default: 'hyperliquid-fills'). Optional when continuing with cursor. | hyperliquid-fills |
| to_block | No | Ending block number | |
| fee_token | No | Fee token symbols | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number (use this OR timeframe) | |
| include_pnl | No | Include closedPnl and startPosition fields | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Use 'summary' for aggregate stats or 'full' when you truly need every fill field. | |
| include_builder_info | No | Include builder and builderFee fields |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 networksARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| vm | No | Filter by VM family | |
| limit | No | Max results to return (default: 25, max: 100) | |
| query | No | Search by name, alias, or chain ID | |
| cursor | No | Continuation cursor from a previous network catalog page | |
| network_type | No | Filter by network type | |
| real_time_only | No | Only show networks with a real-time indexed head |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 contractARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Entity kind to resolve: token, contract alias/address, pool identifier, protocol name, or Hyperliquid coin/ticker. | token |
| limit | No | Maximum matches to return. | |
| query | Yes | Entity string to resolve, e.g. "USDC", "bayc", "uniswap", "BTC", or "0x...". | |
| network | No | Network name or alias when the entity is network-scoped, e.g. "base", "ethereum", "arbitrum-one", or "hyperliquid-fills". |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| cursor | No | Continuation cursor for paginating top_programs | |
| network | No | Network name (default: solana-mainnet) | solana-mainnet |
| timeframe | No | Time range. Accepts compact durations like '15m' or natural phrases like 'past 30 minutes'. Optional; defaults to a 1h analysis window. | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| program_limit | No | Max top-program rows to return per page when include_programs is enabled | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| response_format | No | Response format: 'summary' (high-level metrics), 'compact' (core sections), 'full' (complete analytics). | full |
| include_programs | No | Include top programs by instruction count (requires an extra instruction scan and is slower) | |
| include_compute_units | No | Include average compute-unit stats across the full range (disabled by default for speed) |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| a0 | No | Account at index 0. You can pass a single string or an array. | |
| a1 | No | Account at index 1. You can pass a single string or an array. | |
| a2 | No | Account at index 2. You can pass a single string or an array. | |
| a3 | No | Account at index 3. You can pass a single string or an array. | |
| a4 | No | Account at index 4. You can pass a single string or an array. | |
| a5 | No | Account at index 5. You can pass a single string or an array. | |
| a6 | No | Account at index 6. You can pass a single string or an array. | |
| a7 | No | Account at index 7. You can pass a single string or an array. | |
| a8 | No | Account at index 8. You can pass a single string or an array. | |
| a9 | No | Account at index 9. You can pass a single string or an array. | |
| d1 | No | 1-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d2 | No | 2-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d4 | No | 4-byte discriminator filter (0x-prefixed hex). You can pass a single string or an array. | |
| d8 | No | 8-byte discriminator filter - Anchor (0x-prefixed hex). You can pass a single string or an array. | |
| a10 | No | Account at index 10. You can pass a single string or an array. | |
| a11 | No | Account at index 11. You can pass a single string or an array. | |
| a12 | No | Account at index 12. You can pass a single string or an array. | |
| a13 | No | Account at index 13. You can pass a single string or an array. | |
| a14 | No | Account at index 14. You can pass a single string or an array. | |
| a15 | No | Account at index 15. You can pass a single string or an array. | |
| limit | No | Max instructions | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending slot number. Keep ranges reasonable for performance. | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. Solana slots are ~400ms. | |
| from_block | No | Starting slot number (use this OR timeframe) | |
| program_id | No | Program IDs. You can pass a single string or an array. | |
| include_logs | No | Include program logs | |
| is_committed | No | Only committed transactions | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized slots | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| mentions_account | No | Accounts mentioned anywhere in the instruction. You can pass a single string or an array. | |
| include_transaction | No | Include transaction data | |
| transaction_fee_payer | No | Fee payer filter. You can pass a single string or an array. | |
| include_inner_instructions | No | Include inner (CPI) instructions | |
| include_transaction_balances | No | Include SOL balance changes | |
| include_transaction_instructions | No | Include all instructions from the parent transaction (sibling instructions) | |
| include_transaction_token_balances | No | Include token balance changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 transactionsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max transactions to return (default: 50, max: 200) | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending slot number | |
| fee_payer | No | Fee payer addresses | |
| timeframe | No | Time range (e.g., '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting slot number (use this OR timeframe) | |
| include_logs | No | Include program logs | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| finalized_only | No | Only query finalized slots | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "1h ago". | |
| include_rewards | No | Include block rewards (validator staking rewards). Filter by pubkey using mentions_account. | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output, or stays 'full' when inline instruction, balance, log, or reward context is requested. Use 'summary' for aggregate stats. | |
| include_balances | No | Include SOL balance changes | |
| mentions_account | No | Accounts mentioned anywhere in the transaction | |
| include_instructions | No | Include instruction data | |
| include_token_balances | No | Include SPL token balance changes |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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"}
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution depth. Defaults to complete requested-window analysis; the optional fast value is only for explicitly bounded previews. | deep |
| network | No | Substrate network name (default: polkadot) | polkadot |
| to_block | No | Ending block number | |
| timeframe | No | Time range like '1h', '6h', or '24h'. Default: '1h' | |
| from_block | No | Starting block number (use this OR timeframe) | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| section_limit | No | Max rows to keep in ranked event and call sections | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: 'summary' (headline metrics only), 'compact' (core sections), 'full' (full dashboard payload) | full |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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 callsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max calls to return | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Substrate network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g. '1h', '24h'). Alternative to from_block/to_block. | |
| call_names | No | Optional qualified call names like Timestamp.set or Balances.transfer_keep_alive | |
| from_block | No | Starting block number | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| include_stack | No | Attach the parent call stack for each matching call | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| include_events | No | Attach events emitted directly by each matching call | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested subcalls, events, and extrinsic context in a smaller inline shape. | |
| include_subcalls | No | Attach direct descendant calls inline for each matching call | |
| include_extrinsic | No | Attach the parent extrinsic inline for each matching call |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context 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.
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.
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.
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.
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.
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 eventsARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events to return | |
| cursor | No | Continuation cursor from a previous response | |
| network | No | Substrate network name or alias. Optional when continuing with cursor. | |
| to_block | No | Ending block number | |
| timeframe | No | Time range (e.g. '1h', '24h'). Alternative to from_block/to_block. | |
| from_block | No | Starting block number | |
| event_names | No | Optional qualified event names like Balances.Transfer or System.ExtrinsicSuccess | |
| include_call | No | Attach the emitting call inline when the event has call context | |
| to_timestamp | No | Ending timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "now". | |
| include_stack | No | Attach the parent call stack when the event has nested call context | |
| finalized_only | No | Only query finalized blocks | |
| from_timestamp | No | Starting timestamp. Accepts Unix seconds, Unix milliseconds, ISO datetime, or relative input like "6h ago". | |
| response_format | No | Response format: defaults to 'compact' for chat-friendly output. Compact mode keeps requested extrinsic or call context in a smaller inline shape. | |
| include_extrinsic | No | Attach the parent extrinsic inline for each matching event |
Output Schema
| Name | Required | Description |
|---|---|---|
| _ui | No | Optional chart, table, and follow-up presentation metadata. |
| _llm | No | Hints that help an AI client locate the primary evidence. |
| _meta | No | Network, block range, timing, and row-count metadata. |
| error | No | Structured failure details when the tool cannot complete the request. |
| items | No | Primary result rows when the tool returns a list. |
| value | No | Primary result when the tool returns a scalar value. |
| answer | No | Concise answer grounded in the returned blockchain data. |
| _notice | No | Important limitation or truncation notice. |
| display | No | Plain-language labels for presenting the result. |
| _notices | No | Important limitations or truncation notices. |
| _summary | No | Human-readable summary of the result. |
| _coverage | No | Completeness of the requested window and result set. |
| _evidence | No | Replayable arguments, exact-data digest, row count, and completeness receipt. |
| _ordering | No | Ordering guarantees for the returned data. |
| _execution | No | Bounded execution and scan details. |
| _freshness | No | Freshness and finality information for the returned data. |
| next_steps | No | Safe follow-up actions and continuation guidance. |
| _pagination | No | Pagination state and an optional continuation cursor. |
| investigation | No | Evidence paths, useful pivots, and result limitations. |
| pipes_handoff | No | Optional SQD Pipes guidance for custom data needs. |
| _tool_contract | No | Tool identity, intent, and supported blockchain families. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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.
28 tool updates
v0.8.3- Changed
portal_bitcoin_get_analytics1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_bitcoin_query_transactions1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_debug_hyperliquid_query_replica_commands1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_debug_query_blocks1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_debug_resolve_time_to_block1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_get_analytics1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_get_contract_activity1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_get_contract_deployment1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_get_ohlc1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_query_logs1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_query_token_transfers1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_evm_query_transactions1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_get_head1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_get_network_info1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_get_recent_activity1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_get_time_series1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_get_wallet_summary1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_hyperliquid_get_analytics1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_hyperliquid_get_ohlc1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_hyperliquid_query_fills1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_list_networks1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_resolve_entity1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_solana_get_analytics1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_solana_query_instructions1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_solana_query_transactions1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_substrate_get_analytics1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_substrate_query_calls1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
portal_substrate_query_events1 field changed- added
Output schema / properties / _evidenceAdded value: +{ + "additionalProperties": {}, + "description": "Replayable arguments, exact-data digest, row count, and completeness receipt.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
28 tool updates
v0.8.2- Changed
portal_bitcoin_get_analytics7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "string", - "number" -] - changed
Output 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" +}
- Changed
portal_bitcoin_query_transactions7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_debug_hyperliquid_query_replica_commands7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_debug_query_blocks7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_debug_resolve_time_to_block5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_evm_get_analytics7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_evm_get_contract_activity7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "string", - "number" -] - changed
Output 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" +}
- Changed
portal_evm_get_contract_deployment7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_evm_get_ohlc7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / fee / maximumAdded value: +9007199254740991 - added
Input schema / properties / fee / minimumAdded value: +-9007199254740991 - added
Input schema / properties / tick_spacing / maximumAdded value: +9007199254740991 - added
Input schema / properties / tick_spacing / minimumAdded value: +-9007199254740991 - changed
Output 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" +}
- Changed
portal_evm_query_logs9 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / max_scan_blocksAdded 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" +} - changed
Input schema / properties / timeframe / descriptionPrevious 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." - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_evm_query_token_transfers7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_evm_query_transactions16 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / min_effective_gas_price_wei / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / min_effective_gas_price_wei / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / min_gas_used / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / min_gas_used / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / min_value_wei / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / min_value_wei / typeRemoved value: -[ - "string", - "number" -] - changed
Input schema / properties / timeframe / descriptionPrevious 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)." - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / transaction_type / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / transaction_type / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_get_head3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output 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" +}
- Changed
portal_get_network_info3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output 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" +}
- Changed
portal_get_recent_activity7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_get_time_series7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_get_wallet_summary7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "string", - "number" -] - changed
Output 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" +}
- Changed
portal_hyperliquid_get_analytics7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "string", - "number" -] - changed
Output 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" +}
- Changed
portal_hyperliquid_get_ohlc3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output 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" +}
- Changed
portal_hyperliquid_query_fills7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_list_networks5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / cursorAdded value: +{ + "description": "Continuation cursor from a previous network catalog page", + "type": "string" +} - changed
Input schema / properties / vm / enumPrevious value: -[ - "evm", - "solana", - "bitcoin", - "substrate", - "hyperliquid" -]New value: +[ + "evm", + "tron", + "solana", + "bitcoin", + "substrate", + "hyperliquid" +] - changed
Output 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" +}
- Changed
portal_resolve_entity3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output 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" +}
- Changed
portal_solana_get_analytics7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "string", - "number" -] - changed
Output 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" +}
- Changed
portal_solana_query_instructions7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_solana_query_transactions7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_substrate_get_analytics7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_substrate_query_calls7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
- Changed
portal_substrate_query_events7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / from_timestamp / typeRemoved value: -[ - "number", - "string" -] - added
Input schema / properties / to_timestamp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / to_timestamp / typeRemoved value: -[ - "number", - "string" -] - changed
Output 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" +}
28 tool updates
v0.7.9- First observed
portal_bitcoin_get_analytics - First observed
portal_bitcoin_query_transactions - First observed
portal_debug_hyperliquid_query_replica_commands - First observed
portal_debug_query_blocks - First observed
portal_debug_resolve_time_to_block - First observed
portal_evm_get_analytics - First observed
portal_evm_get_contract_activity - First observed
portal_evm_get_contract_deployment - First observed
portal_evm_get_ohlc - First observed
portal_evm_query_logs - First observed
portal_evm_query_token_transfers - First observed
portal_evm_query_transactions - First observed
portal_get_head - First observed
portal_get_network_info - First observed
portal_get_recent_activity - First observed
portal_get_time_series - First observed
portal_get_wallet_summary - First observed
portal_hyperliquid_get_analytics - First observed
portal_hyperliquid_get_ohlc - First observed
portal_hyperliquid_query_fills - First observed
portal_list_networks - First observed
portal_resolve_entity - First observed
portal_solana_get_analytics - First observed
portal_solana_query_instructions - First observed
portal_solana_query_transactions - First observed
portal_substrate_get_analytics - First observed
portal_substrate_query_calls - First observed
portal_substrate_query_events
TDQS
Scored across 28 tools
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.
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.
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.
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
Related MCP Connectors
Solana MCP for wallets, trades, markets, PnL, transfers, onchain data, signable swaps and API tools.
Hosted MCP gateway for Web3 infra discovery across 20+ networks via one endpoint.
Free read-only crypto whale-tracking & market-data MCP tools across 14 chains. No auth.
Production-grade MCP gateway delivering 8 real-time AI tools with instant x402 micropayments settled in USDC on Base Mainnet or SPL-USDC on Solana. Features Basescan contract auditing, wallet analytics, headless browser scraping, and pre-scraped oracle data feeds.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server with 43 tools for blockchain data — token lookups, wallet balances, live chain queries across 10+ networks, and full API documentation search.27120 npmApache 2.0
- AlicenseNot gradedqualityCmaintenance250+ 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.2MIT
- AlicenseBqualityBmaintenanceComprehensive 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.5330 npm1MIT

Surf MCP Serverofficial
AlicenseAqualityBmaintenanceEnables access to 86 crypto data endpoints from the Surf API, including market data, wallets, social sentiment, on-chain queries, and more, through dynamically generated MCP tools.1526 npm8MIT