Skip to main content
Glama

Server Details

MCP server for Blockscout

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
blockscout/mcp-server
GitHub Stars
44
Server Listing
Blockscout MCP Server

Available Tools

16 tools
direct_api_callDirect Blockscout API CallA
Read-only
Inspect

Call a raw Blockscout API endpoint for advanced or chain-specific data.

Before the first call to this tool in a session, read
`blockscout-mcp://skill/SKILL.md` (the operating rules), then
`blockscout-mcp://skill/references/blockscout-api-index.md` (the authoritative
index of callable endpoints); skip both reads only if this skill content is
already in context. Recalled Blockscout API knowledge is not a substitute:
endpoint paths, parameters, and response shapes vary across Blockscout
versions and per-chain deployments.

Supports POST requests with a JSON body for endpoints like JSON RPC.

**SUPPORTS PAGINATION**: If response includes 'pagination' field,
use the provided next_call to get additional pages (GET only).
ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe pagination cursor from a previous response to get the next page of results.
methodNoHTTP method used for the upstream call. Use POST with json_body.GET
chain_idYesThe ID of the blockchain
json_bodyNoJSON request body for POST requests.
session_idNoOpaque session identifier.
query_paramsNoOptional query parameters forwarded to the Blockscout API.
endpoint_pathYesThe Blockscout API path to call (e.g., '/api/v2/stats'); do not include query strings — pass all query parameters via query_params to avoid double-encoding.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it requires reading skill files as a prerequisite, explains pagination mechanics via the 'pagination' field and next_call (GET only), supports POST for JSON RPC, and warns that endpoint paths/parameters vary per chain. This is rich, non-obvious behavior that helps correct invocation and expectations.

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

Conciseness4/5

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

The description is moderately long (4 sentences plus a pagination note) but every sentence carries necessary information: purpose, prerequisite reads, POST support, and pagination. It is front-loaded with the purpose and structurally clear, though slightly dense. A tight, perfectly minimal version might be a 5, but this is appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's complexity (7 params, generic raw access, many siblings) and the presence of an output schema, the description covers all critical aspects: purpose, prerequisites, method flexibility, pagination, and cross-version variability. It leaves no major gap for the agent to safely use the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description itself does not add new parameter semantics beyond what the schema already provides (e.g., endpoint_path's no-query-string rule, cursor pagination, POST with json_body are all in the schema descriptions). It neither compensates nor undercuts.

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

Purpose5/5

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

The description opens with 'Call a raw Blockscout API endpoint for advanced or chain-specific data'—a specific verb and resource. The word 'raw' clearly distinguishes this generic tool from the specialized sibling tools, and 'advanced or chain-specific data' signals that it covers cases beyond the specialized tools.

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

Usage Guidelines4/5

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

The description gives clear context: 'for advanced or chain-specific data' implies use when specialized tools are insufficient. It also mandates reading skill files before first use, which is a strong usage guideline. However, it does not explicitly name alternatives or state 'use this instead of X', so it gets a 4 rather than a 5.

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

get_address_by_ens_nameGet Address by ENS NameA
Read-only
Inspect

Useful for when you need to convert an ENS domain name (e.g. "blockscout.eth") to its corresponding Ethereum address.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesENS domain name to resolve
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds that it 'convert's an ENS name, but does not disclose additional behavioral details such as error handling for invalid names or reliance on external data. Given the annotation coverage, a score of 3 is appropriate.

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

Conciseness5/5

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

The description is a single, focused sentence that immediately conveys the tool's purpose with no extraneous content. It is front-loaded and well-structured.

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

Completeness5/5

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

For a simple lookup tool with full schema coverage, clear annotations, and an output schema, the description is complete. It does not need to explain return values because the output schema exists, and the one-sentence description adequately covers the tool's function.

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

Parameters4/5

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

The schema already describes both parameters with 100% coverage, so the baseline is 3. The description provides a concrete example 'blockscout.eth' which clarifies the expected format of the 'name' parameter, adding value beyond the schema. No additional information is given for session_id, but it is a generic opaque identifier.

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

Purpose5/5

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

The description clearly states the tool converts an ENS domain name to its corresponding Ethereum address, using a specific verb and resource. The example 'blockscout.eth' adds concrete context, and it is distinct from sibling tools which focus on blocks, transactions, or tokens.

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

Usage Guidelines4/5

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

The description says 'Useful for when you need to convert an ENS domain name' which clearly indicates the appropriate context. It does not explicitly mention alternatives or exclusions, but no other sibling tool serves this purpose, so the guidance is sufficient.

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

get_address_infoGet Address InformationA
Read-only
Inspect
Get comprehensive information about an address, including:
- Address existence check
- Native token (ETH) balance (provided as is, without adjusting by decimals)
- First transaction details (block number and timestamp) for age calculation
- ENS name association (if any)
- Contract status (whether the address is a contract, whether it is verified)
- Proxy contract information (if applicable): determines if a smart contract is a proxy contract (which forwards calls to implementation contracts), including proxy type and implementation addresses
- Token details (if the contract is a token): name, symbol, decimals, total supply, etc.
Essential for address analysis, contract investigation, token research, and DeFi protocol analysis.
ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesAddress to get information about
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds substantial behavioral context beyond those annotations: it states ETH balance is 'provided as is, without adjusting by decimals,' explains that first transaction details are used for age calculation, and details how proxy contract detection works. This gives the agent insight into the tool's behavior and output semantics beyond the safety profile.

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

Conciseness4/5

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

The description is well-structured with a clear opening line followed by bullet points, making it easy to scan. Each bullet adds a specific capability detail. The final sentence about use cases is slightly promotional but still provides useful context. It is appropriately sized for a tool with this many features, though it could be trimmed without losing value.

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

Completeness4/5

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

Given the tool's complexity and the presence of an output schema, the description covers all major facets of the tool: existence, balances, transactions, ENS, contract/proxy status, and token details. It doesn't explain error handling or edge cases, but the output schema and annotations (openWorldHint) fill some gaps. The description is sufficiently complete for an agent to understand the tool's scope.

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

Parameters3/5

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

Schema description coverage is 100% — all three parameters (address, chain_id, session_id) have descriptions in the schema. The description does not add additional parameter-level meaning beyond what the schema provides (e.g., no format examples, no explanation of chain_id values). Per the rubric, baseline 3 is appropriate when schema covers parameters fully.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Get comprehensive information about an address') and enumerates the exact data points returned (existence, ETH balance, first transaction, ENS, contract status, proxy info, token details). This distinguishes it from sibling tools like get_address_by_ens_name (which resolves ENS to address) and get_tokens_by_address (which lists tokens held by an address).

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: 'Essential for address analysis, contract investigation, token research, and DeFi protocol analysis.' While it doesn't explicitly name alternatives or exclusions, the use cases imply when this comprehensive tool is appropriate vs. more specialized sibling tools. No misleading guidance.

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

get_block_infoGet Block InformationA
Read-only
Inspect

Get block information like timestamp, gas used, burnt fees, transaction count etc. Can optionally include the list of transaction hashes contained in the block. Transaction hashes are omitted by default; request them only when you truly need them, because on high-traffic chains the list may exhaust the context.

ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.
number_or_hashYesBlock number or hash
include_transactionsNoIf true, includes a list of transaction hashes from the block.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, so safety is covered. The description adds value by disclosing that transaction hashes are omitted by default and warning about the potential context impact on high-traffic chains, which are behavioral details not present in annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and includes the critical caution about transaction hashes. Every sentence earns its place with no wasted words.

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

Completeness5/5

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

Given the presence of an output schema and strong annotations, the description covers the core functionality, lists representative return fields, and highlights the one notable behavioral caveat. No important aspect is left unexplained.

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

Parameters4/5

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

The schema already describes all parameters fully, so the baseline is 3. The description adds meaningful context for include_transactions, explaining the cost/benefit beyond the schema's simple boolean description, which improves the semantic understanding.

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

Purpose5/5

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

The description clearly states the tool retrieves block information and lists specific data fields (timestamp, gas used, burnt fees, transaction count). This distinguishes it from siblings like get_block_number, which targets a single piece of data.

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

Usage Guidelines4/5

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

It gives explicit guidance on when to set include_transactions to true, noting the default is omitted and advising to request only when truly needed to avoid context exhaustion. It does not mention alternative tools, but the guidance is clear and actionable.

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

get_block_numberGet Block NumberA
Read-only
Inspect
Retrieves the block number and timestamp for a specific date/time or the latest block.
Use when you need a block height for a specific point in time (e.g., "block at 2024-01-01")
or the current chain tip. If `datetime` is provided, finds the block immediately
preceding that time. If omitted, returns the latest indexed block.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
datetimeNoThe date and time (ISO 8601 format, e.g. 2025-05-22T23:00:00.00Z) to find the block for. If omitted, returns the latest block.
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral nuance beyond the read-only annotation, such as 'finds the block immediately preceding that time' and 'returns the latest indexed block,' implying possible indexing delay. It clarifies the return includes timestamp as well as number. 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.

Conciseness5/5

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

The description is three sentences with no filler. It front-loads the purpose, then usage, then conditional behavior, each sentence adding value. It is appropriately sized for a simple tool.

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

Completeness5/5

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

For a tool with an output schema, the description covers the essential aspects: purpose, usage, and datetime behavior. It clarifies the 'latest' case as 'latest indexed block,' which is important context. With all parameters documented in the schema, the description is complete for this simple tool.

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

Parameters4/5

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

The schema already describes all three parameters, providing a baseline of 3. The description enriches the datetime parameter by specifying it finds the block immediately preceding the given time and that omitting it returns the latest indexed block. This adds semantic value beyond the schema's 'to find the block for.'

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

Purpose5/5

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

The description clearly states the tool retrieves block number and timestamp either for a given datetime or the latest block. It uses specific verb 'Retrieves' and resource 'block number and timestamp,' distinguishing it from sibling get_block_info which likely returns block details. The tool's purpose is unambiguous.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool: when needing a block height for a specific point in time or the current chain tip. It doesn't explicitly name alternatives or when-not-to-use, but the use case is clearly defined. The distinction between providing or omitting datetime is explained.

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

get_chains_listGet List of ChainsA
Read-only
Inspect

Get supported blockchain chains with their chain IDs.

Ethereum Mainnet is `chain_id` `1`; use this tool to resolve any other chain.
Use this when another tool needs a supported `chain_id` and only the chain name,
ecosystem, or native currency is known. Prefer a narrow `query` to avoid returning
the full registry to the agent. Do not rely on partial numeric chain ID queries such
as `1`, because matching is substring-based and may return many chains.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional case-insensitive substring filter applied to chain name, chain ID, native currency, and ecosystem. Prefer narrow text terms over partial numeric chain IDs because matching is substring-based.
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, non-destructive), the description discloses important behavior: substring-based matching and the possibility of returning many chains for partial numeric IDs. This helps the agent anticipate results and adjust query strategy, adding value beyond what annotations provide.

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

Conciseness5/5

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

The description is concise, with four sentences, and front-loads the purpose. Every sentence contributes useful information: purpose, context, usage hints, and a specific warning. No wasted words.

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

Completeness5/5

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

The tool is simple with two optional parameters, an output schema exists, and annotations are rich. The description covers the core purpose, usage timing, and key behavioral caveat (substring matching). There is no significant missing context that the agent needs for correct invocation.

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

Parameters3/5

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

The schema already covers both parameters with detailed descriptions (e.g., query is case-insensitive substring across fields, session_id is opaque). The description reinforces but does not add significant new semantics beyond the schema. Since schema coverage is 100%, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool 'Get supported blockchain chains with their chain IDs' with a specific verb and resource. It also distinguishes its purpose by noting that Ethereum Mainnet is chain_id 1 and that this tool resolves other chains, setting it apart from sibling tools.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool: when another tool needs a supported chain_id and only the chain name, ecosystem, or native currency is known. It also provides guidance to prefer a narrow query and warns against partial numeric chain ID queries due to substring matching, which is actionable and prevents misuse.

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

get_contract_abiGet Contract ABIA
Read-only
Inspect

Get smart contract ABI (Application Binary Interface). An ABI defines all functions, events, their parameters, and return types. The ABI is required to format function calls or interpret contract data.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesSmart contract address
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict them. However, the description does not disclose additional behavioral traits such as availability for unverified contracts or potential errors, so it adds limited behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is two concise sentences. The first states the action, and the second explains the concept of an ABI and its purpose. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a simple read-only getter with a complete schema, annotations, and an output schema, the description adequately covers the tool's purpose and context. It explains what an ABI is and why it's needed, making it complete for agent orientation.

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

Parameters3/5

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

The input schema covers 100% of parameters with descriptions (address, chain_id, session_id), so the baseline is 3. The description adds no additional parameter-level meaning beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states the tool retrieves a smart contract ABI and explains what an ABI defines, giving a specific verb and resource. It does not explicitly distinguish from sibling tools like inspect_contract_code or read_contract, but the purpose is unambiguous.

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

Usage Guidelines4/5

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

The description indicates the ABI is required to format function calls or interpret contract data, implying when the tool is needed. It does not mention alternatives or exclusions, but the context is clear.

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

get_tokens_by_addressGet Tokens by AddressA
Read-only
Inspect
Get comprehensive ERC20 token holdings for an address with enriched metadata and market data.
Returns detailed token information including contract details (name, symbol, decimals), market metrics (exchange rate, market cap, volume), holders count, and actual balance (provided as is, without adjusting by decimals).
Essential for portfolio analysis, wallet auditing, and DeFi position tracking.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe pagination cursor from a previous response to get the next page of results.
addressYesWallet address
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing that the balance is returned without decimal adjustment and that pagination requires using the next_call in the response. These are specific behavioral traits beyond the annotations, aiding the agent in handling responses correctly.

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

Conciseness5/5

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

The description is concise at four sentences, front-loads the primary purpose, then details return contents, use cases, and pagination. Each sentence adds distinct value with no redundancy or verbose language, making it efficient for an agent to parse.

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

Completeness4/5

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

Given the presence of an output schema and rich annotations, the description covers essential behavioral context: it notes the raw balance, pagination handling, and typical use cases. While session_id is not mentioned in the description, the schema fully documents it, so no critical gaps exist. The description is adequate for safe and effective tool invocation.

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

Parameters3/5

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

All four parameters are fully described in the input schema, including cursor, address, chain_id, and session_id. The description reiterates address usage and pagination but introduces no new parameter semantics beyond the schema. Per guidelines, high schema coverage (100%) sets a baseline of 3, and the description does not elevate it.

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

Purpose5/5

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

The description clearly states the tool retrieves ERC20 token holdings for a specific address, with enriched metadata and market data. It distinguishes itself from sibling tools like get_token_transfers_by_address (transfers) and nft_tokens_by_address (NFTs) by focusing on current holdings and holdings details. The action verb 'Get' and specific resource 'ERC20 token holdings' make the purpose unambiguous.

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

Usage Guidelines4/5

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

The description explicitly identifies primary use cases: portfolio analysis, wallet auditing, and DeFi position tracking. However, it does not mention alternatives or when not to use this tool. The context is clear but lacks explicit exclusions, fitting the 'clear context, no exclusions' tier.

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

get_token_transfers_by_addressGet Token Transfers by AddressA
Read-only
Inspect
Get ERC-20 token transfers for an address within a specific time range.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoAn ERC-20 token contract address to restrict results to a single token. If omitted, returns transfers of all tokens.
age_toNoEnd date and time (e.g 2025-05-22T22:30:00.00Z). Adding this bounds the upper end of the date range started by `age_from`; if omitted, transfers up to the current time are returned.
cursorNoThe pagination cursor from a previous response to get the next page of results.
addressYesAddress which either transfer initiator or transfer receiver
age_fromYesStart date and time (e.g 2025-05-22T23:00:00.00Z). Alone, returns all ERC-20 transfers to/from the address since this date.
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable context about pagination behavior (using next_call when the 'pagination' field appears) and the time-range constraint, going beyond what annotations provide.

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

Conciseness5/5

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

The description is two concise sentences with the critical pagination instruction prominently bolded. It is well-structured and contains no redundant information.

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

Completeness4/5

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

With 7 parameters and an output schema, the description covers the core purpose and pagination behavior, while annotations handle safety. The main gap is lack of usage guidance relative to sibling tools, but overall the description is sufficiently complete for a read-only list tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters clearly. The description adds a small note about pagination linking to the cursor parameter, but otherwise does not deepen understanding beyond the schema.

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

Purpose4/5

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

The description clearly states it retrieves ERC-20 token transfers for an address within a specified time range, using a specific verb and resource. It is implicitly distinct from siblings like get_transactions_by_address and get_tokens_by_address, but does not explicitly call out those alternatives.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus similar alternatives (e.g., get_transactions_by_address, get_tokens_by_address). It does not mention exclusions, prerequisites, or typical use cases.

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

get_transaction_infoGet Transaction InformationA
Read-only
Inspect
Get comprehensive transaction information.
Unlike standard eth_getTransactionByHash, this tool returns enriched data including decoded input parameters, detailed token transfers with token metadata, transaction fee breakdown (priority fees, burnt fees) and categorized transaction types.
By default, the raw transaction input is omitted if a decoded version is available to save context; request it with `include_raw_input=True` only when you truly need the raw hex data.
Essential for transaction analysis, debugging smart contract interactions, tracking DeFi operations.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.
transaction_hashYesTransaction hash
include_raw_inputNoIf true, includes the raw transaction input data.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: raw input is omitted by default to save context, and include_raw_input=True is needed to retrieve it. This goes beyond the annotations and helps the agent understand the tool's default behavior and trade-offs.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the core purpose, and every sentence provides distinct value: what it does, how it differs, default behavior, and use cases. No fluff or repetition.

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

Completeness5/5

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

The tool has an output schema, so return values need not be explained. The description covers purpose, comparison to alternatives, default behavior, and appropriate use cases. Given the annotations and schema, the description is complete and leaves no critical gaps.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the rationale behind include_raw_input (saving context) and advising when to use it ('only when you truly need the raw hex data'). This context is not present in the schema and helps the agent decide on parameter values.

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

Purpose5/5

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

The description clearly states the tool 'Get comprehensive transaction information' and immediately specifies what that means: enriched data including decoded input, token transfers, fee breakdowns, and categorized types. It differentiates the tool from the standard eth_getTransactionByHash and, by focusing on a single transaction, implies distinction from list-oriented siblings like get_transactions_by_address.

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

Usage Guidelines4/5

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

The description provides explicit use cases: 'Essential for transaction analysis, debugging smart contract interactions, tracking DeFi operations.' It does not explicitly name sibling alternatives or say when not to use, but the context and comparison to eth_getTransactionByHash give clear guidance. The absence of explicit exclusions keeps it from a 5.

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

get_transactions_by_addressGet Transactions by AddressA
Read-only
Inspect
Retrieves native currency transfers and smart contract interactions (calls, internal txs) for an address.
**EXCLUDES TOKEN TRANSFERS**: Filters out direct token balance changes (ERC-20, etc.). You'll see calls *to* token contracts, but not the `Transfer` events. For token history, use `get_token_transfers_by_address`.
A single tx can have multiple records from internal calls.
Requires an `age_from` date to scope results for performance and relevance.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
age_toNoEnd date and time (e.g 2025-05-22T22:30:00.00Z). Adding this bounds the upper end of the date range started by `age_from`.
cursorNoThe pagination cursor from a previous response to get the next page of results.
addressYesAddress which either sender or receiver of the transaction
methodsNoA method signature to filter transactions by (e.g 0x304e6ade). Filters the (optionally date-bounded) results to a specific method signature.
age_fromYesStart date and time (e.g 2025-05-22T23:00:00.00Z). Alone, returns all transactions to/from the address since this date.
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint/destructiveHint annotations, the description adds critical behavioral details: token transfers are filtered out, a single transaction can produce multiple records due to internal calls, the age_from requirement for performance, and pagination behavior. This goes beyond the structured annotations and provides valuable context without contradiction.

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

Conciseness5/5

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

The description is compact yet highly informative, using bold header-like cues for key exclusions and pagination. Every sentence serves a purpose: scope, exclusions, multi-record caveat, required input, and pagination. No filler or redundancy.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, output schema present) and the rich annotations, the description covers all essential behaviors: what is retrieved, what is excluded, multi-record behavior, required field, and pagination instructions. It is fully adequate for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters with detailed descriptions. The tool description adds minimal extra value for parameter understanding, only reinforcing the age_from requirement and pagination via cursor/next_call. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool retrieves native currency transfers and smart contract interactions for an address, with an explicit exclusion of token transfers. It distinguishes itself from the sibling tool get_token_transfers_by_address by naming that alternative for token history, so the purpose is specific and well-scoped.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: for token history, use get_token_transfers_by_address instead, and requires an age_from date to scope results. It also explains pagination usage with the 'pagination' field and next_call, providing clear context for when and how to use the tool.

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

inspect_contract_codeInspect Contract CodeA
Read-only
Inspect

Inspects a verified contract's source code or metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesThe address of the smart contract.
chain_idYesThe ID of the blockchain.
file_nameNoThe name of the source file to inspect. If omitted, returns contract metadata and the list of source files.
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds a 'verified' constraint, implying the contract must be verified to succeed. It does not mention behavior for unverified contracts or error cases, but this is acceptable given annotation coverage.

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

Conciseness5/5

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

A single, front-loaded sentence containing all essential information with no redundant words. Perfectly concise.

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

Completeness4/5

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

With full schema coverage, output schema, and safety annotations, the description sufficiently covers the tool's purpose. It could have benefited from a brief note about when to use this vs. get_contract_abi, but the core context is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the description need not elaborate parameters. The phrase 'or metadata' hints at the file_name optionality, but no additional semantic value is added beyond schema.

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

Purpose5/5

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

The description states a specific verb ('Inspects') and resource ('verified contract's source code or metadata'), clearly distinguishing it from siblings like get_contract_abi (which fetches ABI) and read_contract (which executes calls). The mention of 'verified' adds a key qualifier.

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

Usage Guidelines3/5

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

Usage is implied: use when needing source code or metadata of a verified contract. However, it does not explicitly contrast with sibling tools like get_contract_abi or read_contract, nor does it provide when-not-to-use guidance.

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

lookup_token_by_symbolLookup Token by SymbolA
Read-only
Inspect

Search for token addresses by symbol or name. Returns multiple potential matches based on symbol or token name similarity. Only the first 7 matches from the Blockscout API are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesToken symbol or name to search for
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint true, destructiveHint false), the description adds important behavioral details: matches are based on symbol/name similarity, multiple potential matches may be returned, and only the first 7 from the Blockscout API are included. This provides useful context about the fuzzy matching and result truncation behavior.

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

Conciseness5/5

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

The description is three concise sentences, each serving a purpose: what it does, the nature of results, and the limit. It is front-loaded with the action and contains no filler or repetition.

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

Completeness4/5

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

Given the output schema and annotations, the description covers key contextual gaps: the fuzzy matching behavior and the 7-match limit. It does not explicitly state behavior for no matches, but that is likely covered by the output schema. Overall, it is sufficiently complete for a search tool with a structured response.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds semantic value by explaining that the search uses 'symbol or token name similarity' and returns 'potential matches', indicating fuzzy matching rather than exact lookup. This goes beyond the schema's simple 'Token symbol or name to search for'.

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

Purpose5/5

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

The description states 'Search for token addresses by symbol or name' with a specific verb and resource, and clarifies it returns multiple potential matches. It is clearly distinguished from siblings like get_tokens_by_address by focusing on symbol/name lookup rather than address-based queries.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: when you need to find token addresses from a symbol or name. It notes that results are based on similarity and only the first 7 matches are returned, helping set expectations. However, it does not explicitly name alternatives or exclusions, though the purpose makes the use case obvious.

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

nft_tokens_by_addressGet NFT Tokens by AddressA
Read-only
Inspect
Retrieve NFT tokens (ERC-721, ERC-404, ERC-1155) owned by an address, grouped by collection.
Provides collection details (type, address, name, symbol, total supply, holder count) and individual token instance data (ID, name, description, external URL, metadata attributes).
Essential for a detailed overview of an address's digital collectibles and their associated collection data.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe pagination cursor from a previous response to get the next page of results.
addressYesNFT owner address
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context: grouping by collection, providing collection details and token instance data, and explicit pagination instructions ('If response includes 'pagination' field, use the provided next_call'). This goes beyond annotations without contradicting them.

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

Conciseness5/5

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

Four sentences, front-loaded with the core action, then details and pagination note. Every sentence contributes value; no fluff or repetition. The structure is scannable and efficient.

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

Completeness5/5

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

Given the output schema exists, the description needn't restate return values. It explains the collection grouping, included fields (type, address, name, symbol, total supply, holder count, token instance data), and pagination behavior. Complete for a read-only NFT query tool.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter already described (e.g., cursor is 'pagination cursor from previous response'). The description reinforces the cursor usage but doesn't add new meaning beyond the schema. Baseline of 3 is appropriate because the schema carries the semantic load.

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

Purpose5/5

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

The description clearly states the tool retrieves NFT tokens (ERC-721, ERC-404, ERC-1155) owned by an address, grouped by collection. The verb 'Retrieve' and specific resource distinguish it from sibling tools like get_tokens_by_address (which likely handles fungible tokens) and get_token_transfers_by_address.

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

Usage Guidelines4/5

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

The description says it's 'Essential for a detailed overview of an address's digital collectibles and their associated collection data,' implying use for NFT-focused queries. It does not explicitly mention alternatives or exclusions, but the standard list and context differentiate it from siblings. Clear context but no explicit when-not-to-use.

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

read_contractRead from ContractA
Read-only
Inspect
    Calls a smart contract function (view/pure, or non-view/pure simulated via eth_call) and returns the
    decoded result.

    This tool provides a direct way to query the state of a smart contract.

    Example:
    To check the USDT balance of an address on Ethereum Mainnet, you would use the following arguments:
{
  "tool_name": "read_contract",
  "params": {
    "chain_id": "1",
    "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
    "abi": {
      "constant": true,
      "inputs": [{"name": "_owner", "type": "address"}],
      "name": "balanceOf",
      "outputs": [{"name": "balance", "type": "uint256"}],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    "function_name": "balanceOf",
    "args": "["0xF977814e90dA44bFA03b6295A0616a897441aceC"]"
  }
}
ParametersJSON Schema
NameRequiredDescriptionDefault
abiYesThe JSON ABI for the specific function being called. This should be a dictionary that defines the function's name, inputs, and outputs. The function ABI can be obtained using the `get_contract_abi` tool.
argsNoA JSON string containing an array of arguments. Example: "["0xabc..."]" for a single address argument, or "[]" for no arguments. Order and types must match ABI inputs. Addresses: use 0x-prefixed strings; Numbers: prefer integers (not quoted); numeric strings like "1" are also accepted and coerced to integers. Bytes: keep as 0x-hex strings.[]
blockNoThe block identifier to read the contract state from. Can be a block number (e.g., 19000000) or a string tag (e.g., 'latest'). Defaults to 'latest'.latest
addressYesSmart contract address
chain_idYesThe ID of the blockchain
session_idNoOpaque session identifier.
function_nameYesThe symbolic name of the function to be called. This must match the `name` field in the provided ABI.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark this as read-only and non-destructive. The description adds that non-view/pure functions are simulated via eth_call, making it clear there is no state change. It also notes the result is decoded, which is useful behavioral information.

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

Conciseness4/5

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

The core description is two sentences, though the second is somewhat redundant with the first. The included example is large but provides valuable, concrete parameter formatting guidance, justifying its inclusion.

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

Completeness4/5

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

Given the complexity of seven parameters and the presence of an output schema, the description covers the essential behavior and a full example. It does not explain every parameter, but the schema handles that, and the example fills in practical usage gaps.

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

Parameters4/5

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

The schema covers all parameters with descriptions, and the example demonstrates how to format args, ABI, and addresses. It clarifies JSON string formatting for args and address conventions, exceeding basic schema descriptions.

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

Purpose5/5

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

The description clearly states it calls a smart contract function (view/pure, or non-view/pure simulated via eth_call) and returns the decoded result. This specifies the exact action and resource, distinguishing it from generic API calls or ABI inspection tools. The example reinforces the use case of querying token balances.

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

Usage Guidelines4/5

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

The description identifies this as 'a direct way to query the state of a smart contract,' giving clear context for when to use it. It does not explicitly name alternatives or exclusions, but the context and sibling set make the appropriate use case evident. The example provides a concrete scenario.

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

__unlock_blockchain_analysis__Unlock Blockchain AnalysisA
Read-only
Inspect

Initializes a Blockscout MCP session: returns server reference data, the blockscout-analysis skill pointer, and the URI resolution rule. Call this tool exactly once per session, before any other tool, and reuse its payload for the rest of the session; do not call it again.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesThe main data payload of the tool's response.
notesNoA list of important contextual notes, such as warnings about data truncation or data quality issues.
paginationNoPagination information, present only if the 'data' is a single page of a larger result set.
content_textNoOptional human-readable summary used for MCP content responses.
instructionsNoA list of suggested follow-up actions or instructions for the LLM to plan its next steps.
data_descriptionNoA list of notes explaining the structure, fields, or conventions of the 'data' payload.

TDQS

A4.7/5.0
Behavior4/5

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

No contradiction with annotations; readOnlyHint and openWorldHint align with a non-destructive initialization. The description adds important behavioral context: the one-time per-session nature and the need to reuse the returned payload, which is not conveyed by annotations alone.

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

Conciseness5/5

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

The description is concise, front-loaded with the action and return value, and contains only essential usage guidance. Every sentence earns its place, with no filler or redundancy.

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

Completeness5/5

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

Given that an output schema exists, the description need not detail return structure. It fully covers the tool's role, the required call order, and the reuse rule, making it complete for an initialization tool in a broader toolset.

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

Parameters4/5

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

The tool has zero parameters, so the input schema fully covers parameter semantics. The description appropriately focuses on session initialization rather than parameter details, and the baseline for zero-parameter tools is 4.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Initializes a Blockscout MCP session' and enumerates exactly what it returns. It is distinct from all sibling tools, which perform direct data lookups, making this a unique session bootstrap tool.

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

Usage Guidelines5/5

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

Provides explicit usage instructions: 'Call this tool exactly once per session, before any other tool', and 'do not call it again.' This leaves no ambiguity about when to use the tool and when to avoid repeated calls.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool update
    • Changed__unlock_blockchain_analysis__6 fields changed
      • changedOutput schema / $defs / InstructionsData / description
        Previous value: -"A structured representation of the server's session-initialization payload.\n\nCarries server-side reference data (version), a pointer at the\n`blockscout-analysis` skill, and the rule for resolving its reference paths."New value: +"A structured representation of the server's session-initialization payload.\n\nCarries session-scoped reference scalars: the session identifier (on gated\ndeployments) and the server version. The skill pointer and its reference-path\nresolution rule are delivered via the response envelope's `instructions` list\ninstead of this model."
      • addedOutput schema / $defs / InstructionsData / properties / server_version
        Added value: +{
        +  "description": "The version of the Blockscout MCP server.",
        +  "title": "Server Version",
        +  "type": "string"
        +}
      • removedOutput schema / $defs / InstructionsData / properties / skill_reference
        Removed value: -{
        -  "description": "Canonical pointer text for the `blockscout-analysis` skill. Intentionally identical to the matching paragraph inside the server's `composed_instructions`.",
        -  "title": "Skill Reference",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / skill_resolution_rule
        Removed value: -{
        -  "description": "Canonical rule for resolving reference paths mentioned by the skill. Intentionally identical to the matching paragraph inside the server's `composed_instructions`.",
        -  "title": "Skill Resolution Rule",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / version
        Removed value: -{
        -  "description": "The version of the Blockscout MCP server.",
        -  "title": "Version",
        -  "type": "string"
        -}
      • changedOutput schema / $defs / InstructionsData / required
        Previous value: -[
        -  "version",
        -  "skill_reference",
        -  "skill_resolution_rule"
        -]New value: +[
        +  "server_version"
        +]
  2. 16 tool updates
    • Changed__unlock_blockchain_analysis__1 field changed
      • addedOutput schema / $defs / InstructionsData / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changeddirect_api_call1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_address_by_ens_name1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_address_info1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_block_info1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_block_number1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_chains_list1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_contract_abi1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_token_transfers_by_address1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_tokens_by_address1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_transaction_info1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedget_transactions_by_address1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedinspect_contract_code1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedlookup_token_by_symbol1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changednft_tokens_by_address1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
    • Changedread_contract1 field changed
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque session identifier.",
        +  "title": "Session Id"
        +}
  3. 3 tool updates
    • Changeddirect_api_call1 field changed
      • changedInput schema / properties / endpoint_path / description
        Previous value: -"The Blockscout API path to call (e.g., '/api/v2/stats'); do not include query strings."New value: +"The Blockscout API path to call (e.g., '/api/v2/stats'); do not include query strings — pass all query parameters via query_params to avoid double-encoding."
    • Changedget_token_transfers_by_address3 fields changed
      • changedInput schema / properties / age_from / description
        Previous value: -"Start date and time (e.g 2025-05-22T23:00:00.00Z)."New value: +"Start date and time (e.g 2025-05-22T23:00:00.00Z). Alone, returns all ERC-20 transfers to/from the address since this date."
      • changedInput schema / properties / age_to / description
        Previous value: -"End date and time (e.g 2025-05-22T22:30:00.00Z). Can be omitted to get all transfers up to the current time."New value: +"End date and time (e.g 2025-05-22T22:30:00.00Z). Adding this bounds the upper end of the date range started by `age_from`; if omitted, transfers up to the current time are returned."
      • changedInput schema / properties / token / description
        Previous value: -"An ERC-20 token contract address to filter transfers by a specific token. If omitted, returns transfers of all tokens."New value: +"An ERC-20 token contract address to restrict results to a single token. If omitted, returns transfers of all tokens."
    • Changedget_transactions_by_address3 fields changed
      • changedInput schema / properties / age_from / description
        Previous value: -"Start date and time (e.g 2025-05-22T23:00:00.00Z)."New value: +"Start date and time (e.g 2025-05-22T23:00:00.00Z). Alone, returns all transactions to/from the address since this date."
      • changedInput schema / properties / age_to / description
        Previous value: -"End date and time (e.g 2025-05-22T22:30:00.00Z)."New value: +"End date and time (e.g 2025-05-22T22:30:00.00Z). Adding this bounds the upper end of the date range started by `age_from`."
      • changedInput schema / properties / methods / description
        Previous value: -"A method signature to filter transactions by (e.g 0x304e6ade)"New value: +"A method signature to filter transactions by (e.g 0x304e6ade). Filters the (optionally date-bounded) results to a specific method signature."
  4. 4 tool updates
    • Changed__unlock_blockchain_analysis__20 fields changed
      • removedOutput schema / $defs / ChainIdGuidance
        Removed value: -{
        -  "description": "A structured representation of chain ID guidance combining rules and recommendations.",
        -  "properties": {
        -    "recommended_chains": {
        -      "description": "A list of popular chains with their names and IDs, useful for quick lookups.",
        -      "items": {
        -        "$ref": "#/$defs/ChainInfo"
        -      },
        -      "title": "Recommended Chains",
        -      "type": "array"
        -    },
        -    "rules": {
        -      "description": "Rules for chain ID selection and usage.",
        -      "title": "Rules",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "rules",
        -    "recommended_chains"
        -  ],
        -  "title": "ChainIdGuidance",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / ChainInfo
        Removed value: -{
        -  "description": "Represents a blockchain with its essential identifiers.",
        -  "properties": {
        -    "chain_id": {
        -      "description": "The unique identifier for the chain.",
        -      "title": "Chain Id",
        -      "type": "string"
        -    },
        -    "ecosystem": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "description": "The ecosystem the chain belongs to, if applicable (e.g., 'Ethereum').",
        -      "title": "Ecosystem"
        -    },
        -    "is_testnet": {
        -      "description": "Indicates if the chain is a testnet.",
        -      "title": "Is Testnet",
        -      "type": "boolean"
        -    },
        -    "name": {
        -      "description": "The common name of the blockchain (e.g., 'Ethereum').",
        -      "title": "Name",
        -      "type": "string"
        -    },
        -    "native_currency": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "description": "The native currency symbol of the chain (e.g., 'ETH').",
        -      "title": "Native Currency"
        -    },
        -    "settlement_layer_chain_id": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The L1 chain ID where this rollup settles, if applicable.",
        -      "title": "Settlement Layer Chain Id"
        -    }
        -  },
        -  "required": [
        -    "name",
        -    "chain_id",
        -    "is_testnet",
        -    "native_currency",
        -    "ecosystem"
        -  ],
        -  "title": "ChainInfo",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / DirectApiCommonGroup
        Removed value: -{
        -  "description": "Represents a group of common endpoints available on all chains.",
        -  "properties": {
        -    "endpoints": {
        -      "description": "List of endpoints in this group.",
        -      "items": {
        -        "$ref": "#/$defs/DirectApiEndpoint"
        -      },
        -      "title": "Endpoints",
        -      "type": "array"
        -    },
        -    "group": {
        -      "description": "The functional group name (e.g., 'Stats', 'Tokens & NFTs').",
        -      "title": "Group",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "group",
        -    "endpoints"
        -  ],
        -  "title": "DirectApiCommonGroup",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / DirectApiEndpoint
        Removed value: -{
        -  "description": "Represents a single direct API endpoint.",
        -  "properties": {
        -    "description": {
        -      "description": "A description of what this endpoint returns.",
        -      "title": "Description",
        -      "type": "string"
        -    },
        -    "path": {
        -      "description": "The API endpoint path (e.g., '/api/v2/stats').",
        -      "title": "Path",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "path",
        -    "description"
        -  ],
        -  "title": "DirectApiEndpoint",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / DirectApiEndpointList
        Removed value: -{
        -  "description": "Contains the complete curated list of endpoints for direct_api_call tool.",
        -  "properties": {
        -    "common": {
        -      "description": "Endpoint groups available on all supported chains.",
        -      "items": {
        -        "$ref": "#/$defs/DirectApiCommonGroup"
        -      },
        -      "title": "Common",
        -      "type": "array"
        -    },
        -    "specific": {
        -      "description": "Endpoint groups specific to certain chain families.",
        -      "items": {
        -        "$ref": "#/$defs/DirectApiSpecificGroup"
        -      },
        -      "title": "Specific",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "common",
        -    "specific"
        -  ],
        -  "title": "DirectApiEndpointList",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / DirectApiSpecificGroup
        Removed value: -{
        -  "description": "Represents a group of endpoints specific to certain chain families.",
        -  "properties": {
        -    "chain_family": {
        -      "description": "The chain family this group applies to (e.g., 'Arbitrum', 'Optimism').",
        -      "title": "Chain Family",
        -      "type": "string"
        -    },
        -    "endpoints": {
        -      "description": "List of chain-specific endpoints.",
        -      "items": {
        -        "$ref": "#/$defs/DirectApiEndpoint"
        -      },
        -      "title": "Endpoints",
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "chain_family",
        -    "endpoints"
        -  ],
        -  "title": "DirectApiSpecificGroup",
        -  "type": "object"
        -}
      • changedOutput schema / $defs / InstructionsData / description
        Previous value: -"A structured representation of the server's operational instructions."New value: +"A structured representation of the server's session-initialization payload.\n\nCarries server-side reference data (version), a pointer at the\n`blockscout-analysis` skill, and the rule for resolving its reference paths."
      • removedOutput schema / $defs / InstructionsData / properties / binary_search_rules
        Removed value: -{
        -  "description": "Rules for using binary search for historical blockchain data.",
        -  "title": "Binary Search Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / chain_id_guidance
        Removed value: -{
        -  "$ref": "#/$defs/ChainIdGuidance",
        -  "description": "Comprehensive guidance for chain ID selection and usage."
        -}
      • removedOutput schema / $defs / InstructionsData / properties / data_ordering_and_resumption_rules
        Removed value: -{
        -  "description": "Rules for understanding data ordering and resuming searches from anchor points.",
        -  "title": "Data Ordering And Resumption Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / direct_api_call_rules
        Removed value: -{
        -  "description": "Rules and guidance for using the direct_api_call tool.",
        -  "title": "Direct Api Call Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / direct_api_endpoints
        Removed value: -{
        -  "$ref": "#/$defs/DirectApiEndpointList",
        -  "description": "Curated list of endpoints available for direct API calls."
        -}
      • removedOutput schema / $defs / InstructionsData / properties / error_handling_rules
        Removed value: -{
        -  "description": "Rules for handling network errors and retries.",
        -  "title": "Error Handling Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / funds_movement_rules
        Removed value: -{
        -  "description": "Rules for analyzing funds movement and transfer activity.",
        -  "title": "Funds Movement Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / pagination_rules
        Removed value: -{
        -  "description": "Rules for handling paginated responses and data retrieval.",
        -  "title": "Pagination Rules",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / InstructionsData / properties / portfolio_analysis_rules
        Removed value: -{
        -  "description": "Rules for conducting comprehensive portfolio analysis.",
        -  "title": "Portfolio Analysis Rules",
        -  "type": "string"
        -}
      • addedOutput schema / $defs / InstructionsData / properties / skill_reference
        Added value: +{
        +  "description": "Canonical pointer text for the `blockscout-analysis` skill. Intentionally identical to the matching paragraph inside the server's `composed_instructions`.",
        +  "title": "Skill Reference",
        +  "type": "string"
        +}
      • addedOutput schema / $defs / InstructionsData / properties / skill_resolution_rule
        Added value: +{
        +  "description": "Canonical rule for resolving reference paths mentioned by the skill. Intentionally identical to the matching paragraph inside the server's `composed_instructions`.",
        +  "title": "Skill Resolution Rule",
        +  "type": "string"
        +}
      • removedOutput schema / $defs / InstructionsData / properties / time_based_query_rules
        Removed value: -{
        -  "description": "Rules for executing time-based blockchain queries efficiently.",
        -  "title": "Time Based Query Rules",
        -  "type": "string"
        -}
      • changedOutput schema / $defs / InstructionsData / required
        Previous value: -[
        -  "version",
        -  "error_handling_rules",
        -  "chain_id_guidance",
        -  "pagination_rules",
        -  "time_based_query_rules",
        -  "binary_search_rules",
        -  "portfolio_analysis_rules",
        -  "funds_movement_rules",
        -  "data_ordering_and_resumption_rules",
        -  "direct_api_call_rules",
        -  "direct_api_endpoints"
        -]New value: +[
        +  "version",
        +  "skill_reference",
        +  "skill_resolution_rule"
        +]
    • Changeddirect_api_call2 fields changed
      • addedInput schema / properties / json_body
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "JSON request body for POST requests.",
        +  "title": "Json Body"
        +}
      • addedInput schema / properties / method
        Added value: +{
        +  "default": "GET",
        +  "description": "HTTP method used for the upstream call. Use POST with json_body.",
        +  "enum": [
        +    "GET",
        +    "POST"
        +  ],
        +  "title": "Method",
        +  "type": "string"
        +}
    • Changedget_address_info1 field changed
      • changedOutput schema / $defs / AddressInfoData / properties / metadata / description
        Previous value: -"Optional metadata, such as public tags, from the Metadata service."New value: +"Optional metadata, such as public tags, from the Blockscout PRO API metadata endpoint."
    • Changedget_chains_list1 field changed
      • addedInput schema / properties / query
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional case-insensitive substring filter applied to chain name, chain ID, native currency, and ecosystem. Prefer narrow text terms over partial numeric chain IDs because matching is substring-based.",
        +  "title": "Query"
        +}
  5. 16 tool updates
    • Changed__unlock_blockchain_analysis__1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ChainIdGuidance": {
        +      "description": "A structured representation of chain ID guidance combining rules and recommendations.",
        +      "properties": {
        +        "recommended_chains": {
        +          "description": "A list of popular chains with their names and IDs, useful for quick lookups.",
        +          "items": {
        +            "$ref": "#/$defs/ChainInfo"
        +          },
        +          "title": "Recommended Chains",
        +          "type": "array"
        +        },
        +        "rules": {
        +          "description": "Rules for chain ID selection and usage.",
        +          "title": "Rules",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "rules",
        +        "recommended_chains"
        +      ],
        +      "title": "ChainIdGuidance",
        +      "type": "object"
        +    },
        +    "ChainInfo": {
        +      "description": "Represents a blockchain with its essential identifiers.",
        +      "properties": {
        +        "chain_id": {
        +          "description": "The unique identifier for the chain.",
        +          "title": "Chain Id",
        +          "type": "string"
        +        },
        +        "ecosystem": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The ecosystem the chain belongs to, if applicable (e.g., 'Ethereum').",
        +          "title": "Ecosystem"
        +        },
        +        "is_testnet": {
        +          "description": "Indicates if the chain is a testnet.",
        +          "title": "Is Testnet",
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "description": "The common name of the blockchain (e.g., 'Ethereum').",
        +          "title": "Name",
        +          "type": "string"
        +        },
        +        "native_currency": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The native currency symbol of the chain (e.g., 'ETH').",
        +          "title": "Native Currency"
        +        },
        +        "settlement_layer_chain_id": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The L1 chain ID where this rollup settles, if applicable.",
        +          "title": "Settlement Layer Chain Id"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "chain_id",
        +        "is_testnet",
        +        "native_currency",
        +        "ecosystem"
        +      ],
        +      "title": "ChainInfo",
        +      "type": "object"
        +    },
        +    "DirectApiCommonGroup": {
        +      "description": "Represents a group of common endpoints available on all chains.",
        +      "properties": {
        +        "endpoints": {
        +          "description": "List of endpoints in this group.",
        +          "items": {
        +            "$ref": "#/$defs/DirectApiEndpoint"
        +          },
        +          "title": "Endpoints",
        +          "type": "array"
        +        },
        +        "group": {
        +          "description": "The functional group name (e.g., 'Stats', 'Tokens & NFTs').",
        +          "title": "Group",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "group",
        +        "endpoints"
        +      ],
        +      "title": "DirectApiCommonGroup",
        +      "type": "object"
        +    },
        +    "DirectApiEndpoint": {
        +      "description": "Represents a single direct API endpoint.",
        +      "properties": {
        +        "description": {
        +          "description": "A description of what this endpoint returns.",
        +          "title": "Description",
        +          "type": "string"
        +        },
        +        "path": {
        +          "description": "The API endpoint path (e.g., '/api/v2/stats').",
        +          "title": "Path",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "path",
        +        "description"
        +      ],
        +      "title": "DirectApiEndpoint",
        +      "type": "object"
        +    },
        +    "DirectApiEndpointList": {
        +      "description": "Contains the complete curated list of endpoints for direct_api_call tool.",
        +      "properties": {
        +        "common": {
        +          "description": "Endpoint groups available on all supported chains.",
        +          "items": {
        +            "$ref": "#/$defs/DirectApiCommonGroup"
        +          },
        +          "title": "Common",
        +          "type": "array"
        +        },
        +        "specific": {
        +          "description": "Endpoint groups specific to certain chain families.",
        +          "items": {
        +            "$ref": "#/$defs/DirectApiSpecificGroup"
        +          },
        +          "title": "Specific",
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "common",
        +        "specific"
        +      ],
        +      "title": "DirectApiEndpointList",
        +      "type": "object"
        +    },
        +    "DirectApiSpecificGroup": {
        +      "description": "Represents a group of endpoints specific to certain chain families.",
        +      "properties": {
        +        "chain_family": {
        +          "description": "The chain family this group applies to (e.g., 'Arbitrum', 'Optimism').",
        +          "title": "Chain Family",
        +          "type": "string"
        +        },
        +        "endpoints": {
        +          "description": "List of chain-specific endpoints.",
        +          "items": {
        +            "$ref": "#/$defs/DirectApiEndpoint"
        +          },
        +          "title": "Endpoints",
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "chain_family",
        +        "endpoints"
        +      ],
        +      "title": "DirectApiSpecificGroup",
        +      "type": "object"
        +    },
        +    "InstructionsData": {
        +      "description": "A structured representation of the server's operational instructions.",
        +      "properties": {
        +        "binary_search_rules": {
        +          "description": "Rules for using binary search for historical blockchain data.",
        +          "title": "Binary Search Rules",
        +          "type": "string"
        +        },
        +        "chain_id_guidance": {
        +          "$ref": "#/$defs/ChainIdGuidance",
        +          "description": "Comprehensive guidance for chain ID selection and usage."
        +        },
        +        "data_ordering_and_resumption_rules": {
        +          "description": "Rules for understanding data ordering and resuming searches from anchor points.",
        +          "title": "Data Ordering And Resumption Rules",
        +          "type": "string"
        +        },
        +        "direct_api_call_rules": {
        +          "description": "Rules and guidance for using the direct_api_call tool.",
        +          "title": "Direct Api Call Rules",
        +          "type": "string"
        +        },
        +        "direct_api_endpoints": {
        +          "$ref": "#/$defs/DirectApiEndpointList",
        +          "description": "Curated list of endpoints available for direct API calls."
        +        },
        +        "error_handling_rules": {
        +          "description": "Rules for handling network errors and retries.",
        +          "title": "Error Handling Rules",
        +          "type": "string"
        +        },
        +        "funds_movement_rules": {
        +          "description": "Rules for analyzing funds movement and transfer activity.",
        +          "title": "Funds Movement Rules",
        +          "type": "string"
        +        },
        +        "pagination_rules": {
        +          "description": "Rules for handling paginated responses and data retrieval.",
        +          "title": "Pagination Rules",
        +          "type": "string"
        +        },
        +        "portfolio_analysis_rules": {
        +          "description": "Rules for conducting comprehensive portfolio analysis.",
        +          "title": "Portfolio Analysis Rules",
        +          "type": "string"
        +        },
        +        "time_based_query_rules": {
        +          "description": "Rules for executing time-based blockchain queries efficiently.",
        +          "title": "Time Based Query Rules",
        +          "type": "string"
        +        },
        +        "version": {
        +          "description": "The version of the Blockscout MCP server.",
        +          "title": "Version",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "version",
        +        "error_handling_rules",
        +        "chain_id_guidance",
        +        "pagination_rules",
        +        "time_based_query_rules",
        +        "binary_search_rules",
        +        "portfolio_analysis_rules",
        +        "funds_movement_rules",
        +        "data_ordering_and_resumption_rules",
        +        "direct_api_call_rules",
        +        "direct_api_endpoints"
        +      ],
        +      "title": "InstructionsData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/InstructionsData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[InstructionsData]",
        +  "type": "object"
        +}
    • Changeddirect_api_call1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "title": "Data"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[Any]",
        +  "type": "object"
        +}
    • Changedget_address_by_ens_name1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "EnsAddressData": {
        +      "description": "A structured representation of an ENS name resolution.",
        +      "properties": {
        +        "resolved_address": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The resolved Ethereum address corresponding to the ENS name, or null if not found.",
        +          "title": "Resolved Address"
        +        }
        +      },
        +      "title": "EnsAddressData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/EnsAddressData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[EnsAddressData]",
        +  "type": "object"
        +}
    • Changedget_address_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AddressInfoData": {
        +      "description": "A structured representation of the combined address information.",
        +      "properties": {
        +        "basic_info": {
        +          "additionalProperties": true,
        +          "description": "Core on-chain data for the address from the Blockscout API.",
        +          "title": "Basic Info",
        +          "type": "object"
        +        },
        +        "first_transaction_details": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/FirstTransactionDetails"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Details about the first transaction made to or from this address, if any."
        +        },
        +        "metadata": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Optional metadata, such as public tags, from the Metadata service.",
        +          "title": "Metadata"
        +        }
        +      },
        +      "required": [
        +        "basic_info"
        +      ],
        +      "title": "AddressInfoData",
        +      "type": "object"
        +    },
        +    "FirstTransactionDetails": {
        +      "description": "Details about the earliest transaction for an address.",
        +      "properties": {
        +        "block_number": {
        +          "description": "The block number of the first transaction.",
        +          "title": "Block Number",
        +          "type": "integer"
        +        },
        +        "timestamp": {
        +          "description": "The timestamp of the first transaction (ISO format).",
        +          "title": "Timestamp",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "block_number",
        +        "timestamp"
        +      ],
        +      "title": "FirstTransactionDetails",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/AddressInfoData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[AddressInfoData]",
        +  "type": "object"
        +}
    • Changedget_block_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BlockInfoData": {
        +      "additionalProperties": true,
        +      "description": "A structured representation of a block's information.",
        +      "properties": {
        +        "block_details": {
        +          "additionalProperties": true,
        +          "description": "A dictionary containing the detailed properties of the block.",
        +          "title": "Block Details",
        +          "type": "object"
        +        },
        +        "transaction_hashes": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "A list of transaction hashes included in the block.",
        +          "title": "Transaction Hashes"
        +        }
        +      },
        +      "required": [
        +        "block_details"
        +      ],
        +      "title": "BlockInfoData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/BlockInfoData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[BlockInfoData]",
        +  "type": "object"
        +}
    • Changedget_block_number1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BlockNumberData": {
        +      "description": "Represents the essential data for a resolved block number.",
        +      "properties": {
        +        "block_number": {
        +          "description": "The block number (height) in the blockchain",
        +          "title": "Block Number",
        +          "type": "integer"
        +        },
        +        "timestamp": {
        +          "description": "The timestamp when the block was mined (ISO format)",
        +          "title": "Timestamp",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "block_number",
        +        "timestamp"
        +      ],
        +      "title": "BlockNumberData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/BlockNumberData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[BlockNumberData]",
        +  "type": "object"
        +}
    • Changedget_chains_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ChainInfo": {
        +      "description": "Represents a blockchain with its essential identifiers.",
        +      "properties": {
        +        "chain_id": {
        +          "description": "The unique identifier for the chain.",
        +          "title": "Chain Id",
        +          "type": "string"
        +        },
        +        "ecosystem": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The ecosystem the chain belongs to, if applicable (e.g., 'Ethereum').",
        +          "title": "Ecosystem"
        +        },
        +        "is_testnet": {
        +          "description": "Indicates if the chain is a testnet.",
        +          "title": "Is Testnet",
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "description": "The common name of the blockchain (e.g., 'Ethereum').",
        +          "title": "Name",
        +          "type": "string"
        +        },
        +        "native_currency": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The native currency symbol of the chain (e.g., 'ETH').",
        +          "title": "Native Currency"
        +        },
        +        "settlement_layer_chain_id": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The L1 chain ID where this rollup settles, if applicable.",
        +          "title": "Settlement Layer Chain Id"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "chain_id",
        +        "is_testnet",
        +        "native_currency",
        +        "ecosystem"
        +      ],
        +      "title": "ChainInfo",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/ChainInfo"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[ChainInfo]]",
        +  "type": "object"
        +}
    • Changedget_contract_abi1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ContractAbiData": {
        +      "description": "A structured representation of a smart contract's ABI.",
        +      "properties": {
        +        "abi": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The Application Binary Interface (ABI) of the smart contract.",
        +          "title": "Abi"
        +        }
        +      },
        +      "required": [
        +        "abi"
        +      ],
        +      "title": "ContractAbiData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/ContractAbiData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[ContractAbiData]",
        +  "type": "object"
        +}
    • Changedget_token_transfers_by_address1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AdvancedFilterItem": {
        +      "additionalProperties": true,
        +      "description": "Represents a single item from the advanced filter API response.",
        +      "properties": {
        +        "from": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The sender address.",
        +          "title": "From"
        +        },
        +        "to": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The recipient address.",
        +          "title": "To"
        +        }
        +      },
        +      "title": "AdvancedFilterItem",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/AdvancedFilterItem"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[AdvancedFilterItem]]",
        +  "type": "object"
        +}
    • Changedget_tokens_by_address1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    },
        +    "TokenHoldingData": {
        +      "description": "Represents a single token holding with its associated metadata.",
        +      "properties": {
        +        "address": {
        +          "description": "The contract address of the token.",
        +          "title": "Address",
        +          "type": "string"
        +        },
        +        "balance": {
        +          "description": "The token balance for the queried address (unadjusted for decimals).",
        +          "title": "Balance",
        +          "type": "string"
        +        },
        +        "circulating_market_cap": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The circulating market cap, if available.",
        +          "title": "Circulating Market Cap"
        +        },
        +        "decimals": {
        +          "description": "The number of decimals the token uses.",
        +          "title": "Decimals",
        +          "type": "string"
        +        },
        +        "exchange_rate": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The current exchange rate, if available.",
        +          "title": "Exchange Rate"
        +        },
        +        "holders_count": {
        +          "description": "The number of addresses holding this token.",
        +          "title": "Holders Count",
        +          "type": "string"
        +        },
        +        "name": {
        +          "description": "The full name of the token (e.g., 'USD Coin').",
        +          "title": "Name",
        +          "type": "string"
        +        },
        +        "symbol": {
        +          "description": "The symbol of the token (e.g., 'USDC').",
        +          "title": "Symbol",
        +          "type": "string"
        +        },
        +        "total_supply": {
        +          "description": "The total supply of the token.",
        +          "title": "Total Supply",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "address",
        +        "name",
        +        "symbol",
        +        "decimals",
        +        "total_supply",
        +        "circulating_market_cap",
        +        "exchange_rate",
        +        "holders_count",
        +        "balance"
        +      ],
        +      "title": "TokenHoldingData",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/TokenHoldingData"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[TokenHoldingData]]",
        +  "type": "object"
        +}
    • Changedget_transaction_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DecodedInput": {
        +      "additionalProperties": true,
        +      "description": "Represents the decoded input data of a transaction.",
        +      "properties": {
        +        "method_call": {
        +          "description": "Name of the called method.",
        +          "title": "Method Call",
        +          "type": "string"
        +        },
        +        "method_id": {
        +          "description": "Identifier of the called method.",
        +          "title": "Method Id",
        +          "type": "string"
        +        },
        +        "parameters": {
        +          "description": "List of decoded input parameters for the method call.",
        +          "items": {},
        +          "title": "Parameters",
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "method_call",
        +        "method_id",
        +        "parameters"
        +      ],
        +      "title": "DecodedInput",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    },
        +    "TokenTransfer": {
        +      "additionalProperties": true,
        +      "description": "Represents a single token transfer within a transaction.",
        +      "properties": {
        +        "from": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Sender address of the token transfer if available.",
        +          "title": "From"
        +        },
        +        "to": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Recipient address of the token transfer if available.",
        +          "title": "To"
        +        },
        +        "token": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Token metadata dictionary associated with the transfer.",
        +          "title": "Token"
        +        },
        +        "type": {
        +          "description": "Type of transfer (e.g., 'transfer', 'mint').",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "from",
        +        "to",
        +        "type"
        +      ],
        +      "title": "TokenTransfer",
        +      "type": "object"
        +    },
        +    "TransactionInfoData": {
        +      "additionalProperties": true,
        +      "description": "Structured representation of get_transaction_info data.",
        +      "properties": {
        +        "decoded_input": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/DecodedInput"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Decoded method input if available."
        +        },
        +        "from": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Sender of the transaction if available.",
        +          "title": "From"
        +        },
        +        "raw_input": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Raw transaction input data if returned.",
        +          "title": "Raw Input"
        +        },
        +        "raw_input_truncated": {
        +          "anyOf": [
        +            {
        +              "type": "boolean"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Indicates if raw_input was truncated.",
        +          "title": "Raw Input Truncated"
        +        },
        +        "to": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Recipient of the transaction if available.",
        +          "title": "To"
        +        },
        +        "token_transfers": {
        +          "description": "List of token transfers related to the transaction.",
        +          "items": {
        +            "$ref": "#/$defs/TokenTransfer"
        +          },
        +          "title": "Token Transfers",
        +          "type": "array"
        +        },
        +        "user_operations": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "$ref": "#/$defs/UserOpsLite"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "List of ERC-4337 User Operations associated with this transaction",
        +          "title": "User Operations"
        +        }
        +      },
        +      "title": "TransactionInfoData",
        +      "type": "object"
        +    },
        +    "UserOpsLite": {
        +      "description": "Represents a summary of an ERC-4337 User Operation.",
        +      "properties": {
        +        "operation_hash": {
        +          "description": "The hash of the user operation",
        +          "title": "Operation Hash",
        +          "type": "string"
        +        },
        +        "sender": {
        +          "description": "The address that sent the user operation",
        +          "title": "Sender",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "sender",
        +        "operation_hash"
        +      ],
        +      "title": "UserOpsLite",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/TransactionInfoData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[TransactionInfoData]",
        +  "type": "object"
        +}
    • Changedget_transactions_by_address1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AdvancedFilterItem": {
        +      "additionalProperties": true,
        +      "description": "Represents a single item from the advanced filter API response.",
        +      "properties": {
        +        "from": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The sender address.",
        +          "title": "From"
        +        },
        +        "to": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The recipient address.",
        +          "title": "To"
        +        }
        +      },
        +      "title": "AdvancedFilterItem",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/AdvancedFilterItem"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[AdvancedFilterItem]]",
        +  "type": "object"
        +}
    • Changedinspect_contract_code1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ContractMetadata": {
        +      "additionalProperties": true,
        +      "description": "Detailed metadata for a verified smart contract.",
        +      "properties": {
        +        "compiler_version": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The compiler version used.",
        +          "title": "Compiler Version"
        +        },
        +        "constructor_args": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The raw constructor arguments, possibly truncated.",
        +          "title": "Constructor Args"
        +        },
        +        "constructor_args_truncated": {
        +          "default": false,
        +          "description": "Indicates if constructor_args or decoded_constructor_args was truncated.",
        +          "title": "Constructor Args Truncated",
        +          "type": "boolean"
        +        },
        +        "decoded_constructor_args": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "items": {},
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "Decoded constructor arguments, if available.",
        +          "title": "Decoded Constructor Args"
        +        },
        +        "evm_version": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The EVM version target.",
        +          "title": "Evm Version"
        +        },
        +        "is_fully_verified": {
        +          "anyOf": [
        +            {
        +              "type": "boolean"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Flag indicating if the contract is fully verified.",
        +          "title": "Is Fully Verified"
        +        },
        +        "language": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The programming language of the contract (e.g., Solidity, Vyper).",
        +          "title": "Language"
        +        },
        +        "license_type": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The license of the contract code (e.g., MIT, none).",
        +          "title": "License Type"
        +        },
        +        "name": {
        +          "description": "The name of the contract.",
        +          "title": "Name",
        +          "type": "string"
        +        },
        +        "optimization_enabled": {
        +          "anyOf": [
        +            {
        +              "type": "boolean"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Flag indicating if compiler optimization was enabled.",
        +          "title": "Optimization Enabled"
        +        },
        +        "optimization_runs": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The number of optimization runs.",
        +          "title": "Optimization Runs"
        +        },
        +        "proxy_type": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The type of proxy if the contract is a proxy (e.g., basic_implementation).",
        +          "title": "Proxy Type"
        +        },
        +        "source_code_tree_structure": {
        +          "description": "A list of all source file paths for the contract.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "title": "Source Code Tree Structure",
        +          "type": "array"
        +        },
        +        "verified_at": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The timestamp when the contract was verified.",
        +          "title": "Verified At"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "language",
        +        "compiler_version",
        +        "verified_at",
        +        "source_code_tree_structure",
        +        "optimization_enabled",
        +        "optimization_runs",
        +        "evm_version",
        +        "license_type",
        +        "proxy_type",
        +        "is_fully_verified",
        +        "constructor_args"
        +      ],
        +      "title": "ContractMetadata",
        +      "type": "object"
        +    },
        +    "ContractSourceFile": {
        +      "description": "Container for a single contract source file.",
        +      "properties": {
        +        "file_content": {
        +          "description": "The raw source code of the file.",
        +          "title": "File Content",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "file_content"
        +      ],
        +      "title": "ContractSourceFile",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ContractMetadata"
        +        },
        +        {
        +          "$ref": "#/$defs/ContractSourceFile"
        +        }
        +      ],
        +      "description": "The main data payload of the tool's response.",
        +      "title": "Data"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[Union[ContractMetadata, ContractSourceFile]]",
        +  "type": "object"
        +}
    • Changedlookup_token_by_symbol1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    },
        +    "TokenSearchResult": {
        +      "description": "Represents a single token found by a search query.",
        +      "properties": {
        +        "address": {
        +          "description": "The contract address of the token.",
        +          "title": "Address",
        +          "type": "string"
        +        },
        +        "circulating_market_cap": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The circulating market cap, if available.",
        +          "title": "Circulating Market Cap"
        +        },
        +        "exchange_rate": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The current exchange rate, if available.",
        +          "title": "Exchange Rate"
        +        },
        +        "is_smart_contract_verified": {
        +          "description": "Indicates if the token's contract is verified.",
        +          "title": "Is Smart Contract Verified",
        +          "type": "boolean"
        +        },
        +        "is_verified_via_admin_panel": {
        +          "description": "Indicates if the token is verified by the Blockscout team.",
        +          "title": "Is Verified Via Admin Panel",
        +          "type": "boolean"
        +        },
        +        "name": {
        +          "description": "The full name of the token (e.g., 'USD Coin').",
        +          "title": "Name",
        +          "type": "string"
        +        },
        +        "symbol": {
        +          "description": "The symbol of the token (e.g., 'USDC').",
        +          "title": "Symbol",
        +          "type": "string"
        +        },
        +        "token_type": {
        +          "description": "The token standard (e.g., 'ERC-20').",
        +          "title": "Token Type",
        +          "type": "string"
        +        },
        +        "total_supply": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The total supply of the token.",
        +          "title": "Total Supply"
        +        }
        +      },
        +      "required": [
        +        "address",
        +        "name",
        +        "symbol",
        +        "token_type",
        +        "total_supply",
        +        "circulating_market_cap",
        +        "exchange_rate",
        +        "is_smart_contract_verified",
        +        "is_verified_via_admin_panel"
        +      ],
        +      "title": "TokenSearchResult",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/TokenSearchResult"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[TokenSearchResult]]",
        +  "type": "object"
        +}
    • Changednft_tokens_by_address1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "NftCollectionHolding": {
        +      "description": "Represents an address's holding in a single NFT collection.",
        +      "properties": {
        +        "amount": {
        +          "description": "The number of tokens from this collection owned by the address.",
        +          "title": "Amount",
        +          "type": "string"
        +        },
        +        "collection": {
        +          "$ref": "#/$defs/NftCollectionInfo",
        +          "description": "The details of the NFT collection."
        +        },
        +        "token_instances": {
        +          "description": "A list of the specific NFT instances owned by the address.",
        +          "items": {
        +            "$ref": "#/$defs/NftTokenInstance"
        +          },
        +          "title": "Token Instances",
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "collection",
        +        "amount",
        +        "token_instances"
        +      ],
        +      "title": "NftCollectionHolding",
        +      "type": "object"
        +    },
        +    "NftCollectionInfo": {
        +      "description": "Represents the metadata for an NFT collection.",
        +      "properties": {
        +        "address": {
        +          "description": "The smart contract address of the NFT collection.",
        +          "title": "Address",
        +          "type": "string"
        +        },
        +        "holders_count": {
        +          "description": "The number of unique addresses that hold a token from this collection.",
        +          "title": "Holders Count",
        +          "type": "integer"
        +        },
        +        "name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The name of the collection.",
        +          "title": "Name"
        +        },
        +        "symbol": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The symbol of the collection.",
        +          "title": "Symbol"
        +        },
        +        "total_supply": {
        +          "description": "The total number of tokens in the collection.",
        +          "title": "Total Supply",
        +          "type": "integer"
        +        },
        +        "type": {
        +          "description": "The token standard of the collection.",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "address",
        +        "holders_count",
        +        "total_supply"
        +      ],
        +      "title": "NftCollectionInfo",
        +      "type": "object"
        +    },
        +    "NftTokenInstance": {
        +      "description": "Represents a single NFT instance with its metadata.",
        +      "properties": {
        +        "description": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The description of the NFT, extracted from its metadata.",
        +          "title": "Description"
        +        },
        +        "external_app_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "A URL to an external site or application related to the NFT.",
        +          "title": "External App Url"
        +        },
        +        "id": {
        +          "description": "The unique identifier of the NFT token instance.",
        +          "title": "Id",
        +          "type": "string"
        +        },
        +        "image_url": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "A URL for the NFT's image, from its metadata.",
        +          "title": "Image Url"
        +        },
        +        "metadata_attributes": {
        +          "anyOf": [
        +            {
        +              "items": {},
        +              "type": "array"
        +            },
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The metadata attributes (traits) associated with the NFT.",
        +          "title": "Metadata Attributes"
        +        },
        +        "name": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "description": "The name of the NFT, extracted from its metadata.",
        +          "title": "Name"
        +        }
        +      },
        +      "required": [
        +        "id"
        +      ],
        +      "title": "NftTokenInstance",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "description": "The main data payload of the tool's response.",
        +      "items": {
        +        "$ref": "#/$defs/NftCollectionHolding"
        +      },
        +      "title": "Data",
        +      "type": "array"
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[list[NftCollectionHolding]]",
        +  "type": "object"
        +}
    • Changedread_contract1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ContractReadData": {
        +      "description": "Result of a read-only smart contract function call.",
        +      "properties": {
        +        "result": {
        +          "description": "Return value from the contract function call.",
        +          "title": "Result"
        +        }
        +      },
        +      "required": [
        +        "result"
        +      ],
        +      "title": "ContractReadData",
        +      "type": "object"
        +    },
        +    "NextCallInfo": {
        +      "description": "A structured representation of the tool call required to get the next page.",
        +      "properties": {
        +        "params": {
        +          "additionalProperties": true,
        +          "description": "A complete dictionary of parameters for the next tool call, including the new cursor.",
        +          "title": "Params",
        +          "type": "object"
        +        },
        +        "tool_name": {
        +          "description": "The name of the tool to call for the next page.",
        +          "title": "Tool Name",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tool_name",
        +        "params"
        +      ],
        +      "title": "NextCallInfo",
        +      "type": "object"
        +    },
        +    "PaginationInfo": {
        +      "description": "Contains the structured information needed to retrieve the next page of results.",
        +      "properties": {
        +        "next_call": {
        +          "$ref": "#/$defs/NextCallInfo",
        +          "description": "The structured tool call required to fetch the subsequent page."
        +        }
        +      },
        +      "required": [
        +        "next_call"
        +      ],
        +      "title": "PaginationInfo",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "content_text": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Optional human-readable summary used for MCP content responses.",
        +      "title": "Content Text"
        +    },
        +    "data": {
        +      "$ref": "#/$defs/ContractReadData",
        +      "description": "The main data payload of the tool's response."
        +    },
        +    "data_description": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of notes explaining the structure, fields, or conventions of the 'data' payload.",
        +      "title": "Data Description"
        +    },
        +    "instructions": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of suggested follow-up actions or instructions for the LLM to plan its next steps.",
        +      "title": "Instructions"
        +    },
        +    "notes": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "A list of important contextual notes, such as warnings about data truncation or data quality issues.",
        +      "title": "Notes"
        +    },
        +    "pagination": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/PaginationInfo"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "Pagination information, present only if the 'data' is a single page of a larger result set."
        +    }
        +  },
        +  "required": [
        +    "data"
        +  ],
        +  "title": "ToolResponse[ContractReadData]",
        +  "type": "object"
        +}
  6. 16 tool updates
    • First observed__unlock_blockchain_analysis__
    • First observeddirect_api_call
    • First observedget_address_by_ens_name
    • First observedget_address_info
    • First observedget_block_info
    • First observedget_block_number
    • First observedget_chains_list
    • First observedget_contract_abi
    • First observedget_token_transfers_by_address
    • First observedget_tokens_by_address
    • First observedget_transaction_info
    • First observedget_transactions_by_address
    • First observedinspect_contract_code
    • First observedlookup_token_by_symbol
    • First observednft_tokens_by_address
    • First observedread_contract

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct blockchain resource or action (address, block, transaction, token, NFT, contract, chain, raw API, session init). Even though direct_api_call is a generic fallback, the specialized tools have clear, non-overlapping purposes, and the complementary nature of tools like get_token_transfers_by_address and get_transactions_by_address is explicitly documented.

Naming Consistency4/5

The majority of tools follow a consistent get_<resource> pattern (e.g., get_block_info, get_tokens_by_address), but there are notable deviations: direct_api_call, lookup_token_by_symbol, inspect_contract_code, read_contract, and __unlock_blockchain_analysis__. These verbs are still descriptive and readable, but the mix of 'get' with other verbs prevents a perfect 5.

Tool Count4/5

With 16 tools, the server is slightly above the ideal 3-15 range but not excessive. Each tool maps to a significant Blockscout API capability, and the count feels proportional to the breadth of blockchain data covered. It is heavier than a minimal toolkit but not bloated.

Completeness4/5

The tool set covers core exploration workflows: address info, block lookup, transaction details, token/NFT holdings, contract ABI/source inspection, and read-only contract calls. Minor gaps like a dedicated token-info-by-contract-address tool exist, but the direct_api_call fallback and get_address_info's token details mitigate these. The surface is comprehensive for a read-only blockchain explorer.