mcp-server
Server Details
MCP server for Blockscout
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- blockscout/mcp-server
- GitHub Stars
- 43
- Server Listing
- Blockscout MCP Server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.3/5 across 16 of 16 tools scored. Lowest: 3.6/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.
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.
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.
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.
Available Tools
16 toolsdirect_api_callDirect Blockscout API CallARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The pagination cursor from a previous response to get the next page of results. | |
| method | No | HTTP method used for the upstream call. Use POST with json_body. | GET |
| chain_id | Yes | The ID of the blockchain | |
| json_body | No | JSON request body for POST requests. | |
| session_id | No | Opaque session identifier. | |
| query_params | No | Optional query parameters forwarded to the Blockscout API. | |
| endpoint_path | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 NameARead-onlyInspect
Useful for when you need to convert an ENS domain name (e.g. "blockscout.eth") to its corresponding Ethereum address.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ENS domain name to resolve | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 InformationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Address to get information about | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 InformationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. | |
| number_or_hash | Yes | Block number or hash | |
| include_transactions | No | If true, includes a list of transaction hashes from the block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 NumberARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | The ID of the blockchain | |
| datetime | No | The 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_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ChainsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | 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. | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ABIARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Smart contract address | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 AddressARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The pagination cursor from a previous response to get the next page of results. | |
| address | Yes | Wallet address | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 AddressARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | An ERC-20 token contract address to restrict results to a single token. If omitted, returns transfers of all tokens. | |
| age_to | No | 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. | |
| cursor | No | The pagination cursor from a previous response to get the next page of results. | |
| address | Yes | Address which either transfer initiator or transfer receiver | |
| age_from | Yes | 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. | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 InformationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. | |
| transaction_hash | Yes | Transaction hash | |
| include_raw_input | No | If true, includes the raw transaction input data. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 AddressARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age_to | No | 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`. | |
| cursor | No | The pagination cursor from a previous response to get the next page of results. | |
| address | Yes | Address which either sender or receiver of the transaction | |
| methods | No | A method signature to filter transactions by (e.g 0x304e6ade). Filters the (optionally date-bounded) results to a specific method signature. | |
| age_from | Yes | Start date and time (e.g 2025-05-22T23:00:00.00Z). Alone, returns all transactions to/from the address since this date. | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 CodeARead-onlyInspect
Inspects a verified contract's source code or metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The address of the smart contract. | |
| chain_id | Yes | The ID of the blockchain. | |
| file_name | No | The name of the source file to inspect. If omitted, returns contract metadata and the list of source files. | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 SymbolARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Token symbol or name to search for | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 AddressARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The pagination cursor from a previous response to get the next page of results. | |
| address | Yes | NFT owner address | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ContractARead-onlyInspect
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"]"
}
}
| Name | Required | Description | Default |
|---|---|---|---|
| abi | Yes | The 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. | |
| args | No | A 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. | [] |
| block | No | The 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 |
| address | Yes | Smart contract address | |
| chain_id | Yes | The ID of the blockchain | |
| session_id | No | Opaque session identifier. | |
| function_name | Yes | The symbolic name of the function to be called. This must match the `name` field in the provided ABI. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 AnalysisARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | The main data payload of the tool's response. |
| notes | No | A list of important contextual notes, such as warnings about data truncation or data quality issues. |
| pagination | No | Pagination information, present only if the 'data' is a single page of a larger result set. |
| content_text | No | Optional human-readable summary used for MCP content responses. |
| instructions | No | A list of suggested follow-up actions or instructions for the LLM to plan its next steps. |
| data_description | No | A list of notes explaining the structure, fields, or conventions of the 'data' payload. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP Server for ChainAnalyzer(https://chain-analyzer.com)62171MIT
- AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP server that integrates with the BlockSec https://blocksec.com platform to provide blockchain transaction analysis.11MIT
- AlicenseAqualityBmaintenanceThe first MCP Server dedicated to Bitcoin ecosystem236MIT
Your Connectors
Sign in to create a connector for this server.