Skip to main content
Glama
blockscout

Blockscout MCP Server

Official
by blockscout

Blockscout MCP Server

The Model Context Protocol (MCP) is an open protocol designed to allow AI agents, IDEs, and automation tools to consume, query, and analyze structured data through context-aware APIs.

This server wraps Blockscout APIs and exposes blockchain data—balances, tokens, NFTs, contract metadata—via MCP so that AI agents and tools (like Claude, Cursor, or IDEs) can access and analyze it contextually.

Key Features:

  • Contextual blockchain data access for AI tools

  • Multi-chain support via Blockscout PRO API configuration with Chainscout metadata enrichment

  • Versioned REST API: Provides a standard, web-friendly interface to all MCP tools. See API.md for full documentation.

  • Custom instructions for MCP host to use the server

  • Intelligent context optimization to conserve LLM tokens while preserving data accessibility

  • Smart response slicing with configurable page sizes to prevent context overflow

  • Opaque cursor pagination using Base64URL-encoded strings instead of complex parameters

  • Automatic truncation of large data fields with clear indicators and access guidance

  • Standardized ToolResponse model with structured JSON responses and follow-up instructions

  • Enhanced observability with MCP progress notifications and periodic updates for long-running operations

Enhanced Analysis with Agent Skills

For more powerful and efficient blockchain analysis, install the Blockscout Analysis skill from the agent-skills repository. This skill provides AI agents with structured guidance for execution strategies, response handling, security best practices, and workflow orchestration.

Learn more: See the agent-skills README for full capabilities and installation instructions.

Related MCP server: EVM MCP Server

Configuring MCP Clients

Blockscout PRO API Key

Configuring the Blockscout MCP server with an AI agent requires a Blockscout PRO API key. Most of the data tools route their requests through the authenticated Blockscout PRO API gateway, so without a valid key those tools fail fast before making any upstream request.

To obtain a key, register on the Blockscout Developer Portal (the free tier does not require a credit card) and generate an API key; keys are prefixed proapi_. Then supply it when configuring your client, as shown in the sections below.

The easiest way to use the Blockscout MCP server with Claude (Web, Desktop, and Code) is through the official Anthropic Connectors Directory. This provides a native, managed installation experience with automatic updates.

Installation

Visit claude.com/connectors/blockscout and click links in "Used in" section to install the Blockscout connector.

Option 2: Via Settings
  1. Open Claude (Web or Desktop app)

  2. Go to Settings > Connectors > Browse connectors

  3. Search for "Blockscout"

  4. Click "Connect" to install

Note: Connectors require a paid Claude plan (Pro, Team, Max, or Enterprise).

Limitations: Due to the use of a shared access key, there may be restrictions on connector access and capabilities.

Claude Desktop Setup

To use the official Blockscout MCP server with your own PRO API key in Claude Desktop, choose one of the following options:

Best for: Easy installation and automatic updates.

  1. Download the latest blockscout-mcp.mcpb from GitHub releases.

  2. Double-click the .mcpb file to install it in Claude Desktop.

  3. Configure your Blockscout PRO API key when prompted.

  4. The extension automatically connects to the hosted Blockscout MCP service.

Option 2: Docker Proxy

Note: Docker is required for this setup.

Best for: Users comfortable with command-line tools and custom configurations.

  1. Open Claude Desktop and click on Settings

  2. Navigate to the "Developer" section

  3. Click "Edit Config"

  4. Open the file claude_desktop_config.json and configure the server:

    {
      "mcpServers": {
        "blockscout": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "sparfenyuk/mcp-proxy:latest",
            "--transport",
            "streamablehttp",
            "--headers",
            "Blockscout-MCP-Pro-Api-Key",
            "proapi_your_key_here",
            "--headers",
            "Blockscout-MCP-Intermediary",
            "ClaudeDesktop",
            "https://mcp.blockscout.com/mcp"
          ]
        }
      }
    }
  5. Save the file and restart Claude Desktop

Claude Code Setup

Pass your PRO API key via the Blockscout-MCP-Pro-Api-Key header when adding the server:

claude mcp add --transport http blockscout https://mcp.blockscout.com/mcp \
  --header "Blockscout-MCP-Pro-Api-Key: proapi_your_key_here"

After running this command, Blockscout will be available as an MCP server in Claude Code, allowing you to access and analyze blockchain data directly from your coding environment.

ChatGPT Apps Setup

Install the Blockscout app from the ChatGPT Apps marketplace:

  1. Open the Blockscout app page (or search for "Blockscout" in the ChatGPT Apps directory).

  2. Click "Connect" to enable the app for your ChatGPT account.

Codex App Setup

  1. Open Codex and go to Settings > MCP Servers > Add server.

  2. Set Name to Blockscout, select the Streamable HTTP tab, and set URL to https://mcp.blockscout.com/mcp.

  3. Under Headers, add a header with key Blockscout-MCP-Pro-Api-Key and value proapi_your_key_here.

  4. Save and restart the Codex app.

Codex CLI Setup

Codex CLI cannot attach a custom header from the command line, so configure it in two steps:

  1. Scaffold the server entry:

    codex mcp add Blockscout --url https://mcp.blockscout.com/mcp
  2. Edit ~/.codex/config.toml to add the PRO API key header and enable the streamable-HTTP MCP client (required for remote MCP servers to connect). The resulting configuration should look like this:

    [features]
    experimental_use_rmcp_client = true
    
    [mcp_servers.Blockscout]
    url = "https://mcp.blockscout.com/mcp"
    http_headers = { "Blockscout-MCP-Pro-Api-Key" = "proapi_your_key_here" }

Cursor Setup

Add the server to your Cursor MCP configuration — either the project-level .cursor/mcp.json or the global ~/.cursor/mcp.json — supplying your PRO API key via the Blockscout-MCP-Pro-Api-Key header:

{
  "mcpServers": {
    "blockscout": {
      "url": "https://mcp.blockscout.com/mcp",
      "timeout": 180000,
      "headers": {
        "Blockscout-MCP-Pro-Api-Key": "proapi_your_key_here"
      }
    }
  }
}

Local Development Setup (For Developers)

If you want to run the server locally for development purposes:

{
  "mcpServers": {
    "blockscout": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "ghcr.io/blockscout/mcp-server:latest"
      ]
    }
  }
}

Technical details

Refer to SPEC.md for the technical details.

Repository Structure

Refer to AGENTS.md for the repository structure.

Testing

Refer to TESTING.md for comprehensive instructions on running both unit and integration tests.

Tool Descriptions

  1. __unlock_blockchain_analysis__() - Initializes a Blockscout MCP session: returns server reference data, the blockscout-analysis skill pointer, and the URI resolution rule. Call it once per session, before any other tool.

  2. get_chains_list(query=None) - Returns a list of supported chains, with optional filtering by name, chain ID, native currency, or ecosystem.

  3. get_address_by_ens_name(name) - Converts an ENS domain name to its corresponding Ethereum address.

  4. lookup_token_by_symbol(chain_id, symbol) - Searches for token addresses by symbol or name, returning multiple potential matches.

  5. get_contract_abi(chain_id, address) - Retrieves the ABI (Application Binary Interface) for a smart contract.

  6. inspect_contract_code(chain_id, address, file_name=None) - Allows getting the source files of verified contracts.

  7. get_address_info(chain_id, address) - Gets comprehensive information about an address including balance, ENS association, contract status, token details, and public tags.

  8. get_tokens_by_address(chain_id, address, cursor=None) - Returns detailed ERC20 token holdings for an address with enriched metadata and market data.

  9. get_block_number(chain_id, [datetime]) - Retrieves the block number and timestamp for a specific date/time or the latest block.

  10. get_transactions_by_address(chain_id, address, age_from, age_to, methods, cursor=None) - Gets transactions for an address within a specific time range with optional method filtering.

  11. get_token_transfers_by_address(chain_id, address, age_from, age_to, token, cursor=None) - Returns ERC-20 token transfers for an address within a specific time range.

  12. nft_tokens_by_address(chain_id, address, cursor=None) - Retrieves NFT tokens owned by an address, grouped by collection.

  13. get_block_info(chain_id, number_or_hash, include_transactions=False) - Returns block information including timestamp, gas used, burnt fees, and transaction count. Can optionally include a list of transaction hashes.

  14. get_transaction_info(chain_id, hash, include_raw_input=False) - Gets comprehensive transaction information with decoded input parameters and detailed token transfers.

  15. read_contract(chain_id, address, abi, function_name, args='[]', block='latest') - Executes a read-only smart contract function and returns its result. The abi argument is a JSON object describing the specific function's signature.

  16. direct_api_call(chain_id, endpoint_path, query_params=None, cursor=None, method='GET', json_body=None) - Calls a raw Blockscout API endpoint for advanced or chain-specific data. Supports GET (default) and POST requests with JSON body.

Example Prompts for AI Agents

Is any approval set for OP token on Optimism chain by `zeaver.eth`?
Calculate the total gas fees paid on Ethereum by address `0xcafe...cafe` in May 2025.
Which 10 most recent logs were emitted by `0xFe89cc7aBB2C4183683ab71653C4cdc9B02D44b7`
before `Nov 08 2024 04:21:35 AM (-06:00 UTC)`?
Tell me more about the transaction `0xf8a55721f7e2dcf85690aaf81519f7bc820bc58a878fa5f81b12aef5ccda0efb`
on Redstone rollup.
Is there any blacklisting functionality of USDT token on Arbitrum One?
What is the latest block on Gnosis Chain and who is the block minter?
Were any funds moved from this minter recently?
When the most recent reward distribution of Kinto token was made to the wallet
`0x7D467D99028199D99B1c91850C4dea0c82aDDF52` in Kinto chain?
Which methods of `0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6` on the Ethereum 
mainnet could emit `SequencerBatchDelivered`?
What is the most recent executed cross-chain message sent from the Arbitrum Sepolia
rollup to the base layer?

Development & Deployment

Local Installation

Clone the repository and install dependencies:

git clone https://github.com/blockscout/mcp-server.git
cd mcp-server
uv pip install -e . # or `pip install -e .`

To customize the leading part of the User-Agent header used for RPC requests, set the BLOCKSCOUT_MCP_USER_AGENT environment variable (defaults to "Blockscout MCP"). The server version is appended automatically.

Providing the PRO API Key to the Server

When you run the server yourself, provide the Blockscout PRO API key through the BLOCKSCOUT_PRO_API_KEY environment variable — exported in your shell or placed in a gitignored .env file in the project root. This enables all data access, public-tag enrichment, and contract reads. Never commit the key or embed it in a client-shipped binary; when running via Docker, pass it at runtime (e.g. -e BLOCKSCOUT_PRO_API_KEY=...) rather than baking it into the image.

export BLOCKSCOUT_PRO_API_KEY=proapi_your_key_here

Client-supplied keys (HTTP transports). When the server runs in HTTP mode, a client can supply its own PRO API key in a request header — by default Blockscout-MCP-Pro-Api-Key, configurable via BLOCKSCOUT_PRO_API_KEY_HEADER (set it to an empty string to disable client-supplied keys entirely). This works the same way for both HTTP transports — MCP-over-HTTP tool calls and the REST API. A client-supplied key takes precedence over BLOCKSCOUT_PRO_API_KEY for that request; if the client sends no key, the server falls back to its own configured key; if neither is present, the request fails with the not-configured error. A client key that is present but malformed fails any request that needs the PRO API with no fallback (the server never silently uses its own key in place of a bad client key); tools that don't use the PRO API are unaffected. This makes it possible to run a shared HTTP server where each client authenticates with its own key.

Low-credit warning. Access to the PRO API is metered in credits. When the remaining balance reported by the API drops below a configurable threshold, every data tool appends an advisory note to its response, prompting operators to top up so PRO API access stays ready for continued high-volume usage. The threshold is set via BLOCKSCOUT_PRO_API_LOW_CREDITS_THRESHOLD (default 5000 credits; set to 0 to disable the note). The note fires for any balance below the threshold, including zero and negative balances.

PRO API key requirement notice. BLOCKSCOUT_PRO_API_KEY_REQUIRED_NOTICE holds an operator-configured notice that the server appends as the last entry of the notes field of tool responses whose requests did not carry the client's own (well-formed) PRO API key. It exists to announce the official public server's migration to mandatory client-supplied keys, so only the official deployment is expected to set it. When the variable is unset or empty (the default), the feature is completely off. Community and self-hosted operators should leave it empty — in particular in stdio mode, where you configure BLOCKSCOUT_PRO_API_KEY yourself and no request header can carry a client key, the notice would only repeat a migration message that does not apply to your deployment.

Running the Server

The server runs in stdio mode by default:

python -m blockscout_mcp_server

HTTP Mode (MCP only):

To run the server in HTTP Streamable mode (stateless, SSE responses by default):

python -m blockscout_mcp_server --http

You can also specify the host and port for the HTTP server:

python -m blockscout_mcp_server --http --http-host 0.0.0.0 --http-port 8080

Development Mode (Plain JSON Responses):

For development and testing with simple HTTP clients (curl, Insomnia), you can enable plain JSON responses instead of SSE streams:

export BLOCKSCOUT_DEV_JSON_RESPONSE=true
python -m blockscout_mcp_server --http

Note: This disables Server-Sent Events (SSE) and progress notifications. Only use this for local testing and debugging.

Tunneling with Ngrok (Development Mode):

The Python MCP SDK enforces DNS rebinding protection, which blocks requests from ngrok tunnels by default. To enable tunneling for development and testing:

  1. Start an ngrok tunnel to your local server:

    ngrok http 8000
  2. Configure the allowed host and origin using your ngrok URL:

    export BLOCKSCOUT_MCP_ALLOWED_HOSTS="your-tunnel-id.ngrok-free.app"
    export BLOCKSCOUT_MCP_ALLOWED_ORIGINS="https://your-tunnel-id.ngrok-free.app"
    python -m blockscout_mcp_server --http

Note: These settings are primarily for development use. When these variables are not set, DNS rebinding protection is automatically determined by the server's bind host: enabled for localhost, disabled for non-localhost (e.g., 0.0.0.0). If your Host header includes a non-standard port, use the :* wildcard suffix (e.g., "example.com:*") or specify the exact host:port value.

For more details on ngrok tunneling with MCP servers, see the OpenAI Apps SDK Examples documentation.

HTTP Mode with REST API:

To enable the versioned REST API alongside the MCP endpoint, use the --rest flag (which requires --http).

python -m blockscout_mcp_server --http --rest

With custom host and port:

python -m blockscout_mcp_server --http --rest --http-host 0.0.0.0 --http-port 8080

CLI Options:

  • --http: Enables HTTP Streamable mode.

  • --http-host TEXT: Host to bind the HTTP server to (default: 127.0.0.1).

  • --http-port INTEGER: Port for the HTTP server (default: 8000).

  • --rest: Enables the REST API (requires --http).

Building Docker Image Locally

Initialize the bundled skill submodule, bake its commit metadata into the Docker build context, then build the image:

git submodule update --init --recursive agent-skills
python scripts/bake_skill_metadata.py
docker build -t ghcr.io/blockscout/mcp-server:latest .

Pulling from GitHub Container Registry

Pull the pre-built image:

docker pull ghcr.io/blockscout/mcp-server:latest

Running with Docker

HTTP Mode (MCP only):

To run the Docker container in HTTP mode with port mapping:

docker run --rm -p 8000:8000 ghcr.io/blockscout/mcp-server:latest python -m blockscout_mcp_server --http --http-host 0.0.0.0

With custom port:

docker run --rm -p 8080:8080 ghcr.io/blockscout/mcp-server:latest python -m blockscout_mcp_server --http --http-host 0.0.0.0 --http-port 8080

HTTP Mode with REST API:

To run with the REST API enabled:

docker run --rm -p 8000:8000 ghcr.io/blockscout/mcp-server:latest python -m blockscout_mcp_server --http --rest --http-host 0.0.0.0

Note: When running in HTTP mode with Docker, use --http-host 0.0.0.0 to bind to all interfaces so the server is accessible from outside the container.

With a Blockscout PRO API Key:

Pass the key at runtime with -e rather than baking it into the image (see Providing the PRO API Key to the Server):

docker run --rm -p 8000:8000 -e BLOCKSCOUT_PRO_API_KEY=proapi_your_key_here \
  ghcr.io/blockscout/mcp-server:latest python -m blockscout_mcp_server --http --http-host 0.0.0.0

With session metering enabled (optional):

Session metering limits how many tool calls a caller without a client-supplied PRO API key may make per session identifier issued by __unlock_blockchain_analysis__. It is off by default. Enabling it means setting a signing secret (at least 32 bytes — generate it, don't invent it), and it requires HTTP mode and a server-side PRO API key (metered calls are served upstream on it), plus a persistent volume for the session database. Generate the secret once and store it durably (a secret manager, or persistent environment configuration); every restart and redeploy must pass the same stored value:

# Once, not per start: generate the secret and keep it.
BLOCKSCOUT_SESSION_SECRET="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"

docker run --rm -p 8000:8000 \
  -v blockscout-mcp-sessions:/data \
  -e BLOCKSCOUT_SESSION_SECRET="$BLOCKSCOUT_SESSION_SECRET" \
  -e BLOCKSCOUT_SESSION_DB_PATH=/data/sessions.db \
  -e BLOCKSCOUT_PRO_API_KEY=proapi_your_key_here \
  ghcr.io/blockscout/mcp-server:latest python -m blockscout_mcp_server --http --http-host 0.0.0.0

Most deployments do not need any of this: leave BLOCKSCOUT_SESSION_SECRET unset (the default) and no volume is required. Losing the volume or rotating the secret invalidates live session identifiers by design; the exposure is bounded by the configured TTL. Re-generating the secret inline on every docker run is the accidental form of that rotation — it wipes all live identifiers on each restart even though the database volume survived, so never embed the generation command in the start command. Restoring an older copy of the database revives the budgets it recorded — after a historical restore, rotate the secret unless that is intended. Optional knobs: BLOCKSCOUT_SESSION_MCP_MAX_CALLS and BLOCKSCOUT_SESSION_REST_MAX_CALLS (per-surface call ceilings over one shared per-identifier counter; both default 5; 0 closes metered access on that surface while leaving identifier issuance and get_chains_list navigation open), BLOCKSCOUT_SESSION_TTL_SECONDS (default 900), and BLOCKSCOUT_SESSION_SWEEP_INTERVAL_SECONDS (how often expired session rows are cleaned up; default: once per TTL).

Stdio Mode: The default stdio mode is designed for use with MCP hosts/clients (like Claude Desktop, Cursor) and doesn't make sense to run directly with Docker without an MCP client managing the communication.

Testing with Claude Desktop

Use MCP bundle to test the server with Claude Desktop.

  1. Build the bundle as per instructions in mcpb/README.md.

  2. Open Claude Desktop.

  3. Double-click to open the blockscout-mcp-dev.mcpb file to automatically install the bundle.

  4. Configure the Blockscout MCP Server URL when prompted (default: http://127.0.0.1:8000/mcp)

Privacy and Anonymous Telemetry

To help us improve the Blockscout MCP Server, community-run instances of the server collect anonymous usage data by default. This helps us understand which tools are most popular and guides our development efforts.

What we collect:

  • The name of the tool being called (e.g., get_block_number).

  • The parameters provided to the tool (the session_id parameter is masked to a placeholder before transmission).

  • The version of the Blockscout MCP Server being used.

  • A one-way, non-reversible hash (SHA-256) of the PRO API key available to authorize the request, when one is present. This is a derived fingerprint only — the key itself is never transmitted and cannot be recovered from the hash.

What we DO NOT collect:

  • We do not collect any personal data, IP addresses (the central server uses the sender's IP for geolocation via Mixpanel and then discards it), or secrets and private keys themselves. The PRO API key in particular is never transmitted — only its one-way, non-reversible fingerprint described above, from which the key cannot be recovered.

How to Opt-Out

You can disable this feature at any time by setting the following environment variable:

export BLOCKSCOUT_DISABLE_COMMUNITY_TELEMETRY=true

License

License: Blockscout Software Licence

This project is licensed under the Blockscout Software Licence. See the LICENSE file for full terms.

Available Tools

18 tools
direct_api_callA
Read-only
Inspect

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

Do not include query strings in ``endpoint_path``; pass all query parameters via
``query_params`` to avoid double-encoding.

**SUPPORTS PAGINATION**: If response includes 'pagination' field,
use the provided next_call to get additional pages.

Returns:
    ToolResponse[Any]: Must return ToolResponse[Any] (not ToolResponse[BaseModel])
    because specialized handlers can return lists or other types that don't inherit
    from BaseModel. The dispatcher system supports flexible data structures.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
endpoint_pathYesThe Blockscout API path to call (e.g., '/api/v2/stats'); do not include query strings.
query_paramsNoOptional query parameters forwarded to the Blockscout API.
cursorNoThe pagination cursor from a previous response to get the next page of results.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, indicating a safe, read-only operation with flexible endpoints. The description adds valuable context beyond this: it explains pagination support ('If response includes 'pagination' field, use the provided next_call'), clarifies return type handling ('Must return ToolResponse[Any]'), and warns about query parameter encoding. This enhances behavioral understanding without contradicting annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by specific instructions and return details. It uses bold for key points like 'SUPPORTS PAGINATION' and code formatting for parameters. While slightly verbose in the return type explanation, most sentences earn their place by providing critical guidance.

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

Completeness4/5

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

Given the tool's complexity (open-world API calls) and lack of output schema, the description is reasonably complete: it covers purpose, usage rules, pagination, and return type nuances. However, it could benefit from more examples or error-handling context. Annotations provide safety cues, but the description adequately supplements them for agent use.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds minimal param-specific semantics: it reiterates not to include query strings in 'endpoint_path' and mentions pagination via 'cursor', but these are largely covered in schema descriptions. This meets the baseline of 3 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's purpose: 'Call a raw Blockscout API endpoint for advanced or chain-specific data.' It specifies the verb ('Call'), resource ('Blockscout API endpoint'), and scope ('advanced or chain-specific data'), distinguishing it from sibling tools that perform specific, predefined queries like 'get_address_info' or 'get_transaction_info'.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it instructs to use this tool for 'advanced or chain-specific data' (implying when sibling tools are insufficient), warns against including query strings in 'endpoint_path', and details pagination handling. This clearly defines when and how to use it versus the more specialized sibling tools.

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_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

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, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds useful context about the conversion process but does not disclose behavioral traits like rate limits, error handling, or what happens with invalid ENS names.

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, efficient sentence that is front-loaded with the tool's purpose. There is no wasted text, and it directly addresses the core functionality without unnecessary elaboration.

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

Completeness3/5

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

Given the simple single-parameter input, high schema coverage, and annotations covering safety, the description is adequate. However, without an output schema, it does not explain return values (e.g., address format, null for unresolved names), leaving some gaps in completeness.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'name' well-documented in the schema. The description adds minimal value by reinforcing that it's an 'ENS domain name' but does not provide additional semantics beyond what the schema already states.

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 ('convert') and resource ('ENS domain name to Ethereum address'), and distinguishes it from siblings by focusing on ENS resolution rather than general address info or blockchain data retrieval.

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 this tool ('when you need to convert an ENS domain name'), but does not explicitly mention when not to use it or name alternatives like 'get_address_info' which might handle non-ENS addresses.

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

get_address_infoA
Read-only
Inspect
Get comprehensive information about an address, including:
- Address existence check
- Native token (ETH) balance (provided as is, without adjusting by decimals)
- 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
chain_idYesThe ID of the blockchain
addressYesAddress to get information about

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds valuable behavioral context beyond annotations by specifying what information is returned (e.g., 'Native token balance provided as is, without adjusting by decimals'), which helps the agent understand output format nuances that annotations don't capture.

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 appropriately sized and front-loaded with the core purpose, followed by a bulleted list of specific information returned, and ending with usage context. While efficient, the bulleted list format slightly reduces structural elegance compared to a purely prose approach.

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 (comprehensive address analysis) and lack of output schema, the description does a good job explaining what information is returned through the detailed bullet points. However, it doesn't specify response format structure or potential limitations (e.g., rate limits, data freshness), leaving some gaps for the agent.

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%, with both parameters (chain_id, address) well-documented in the schema. The description doesn't add any parameter-specific semantics beyond what the schema already provides, maintaining the baseline score of 3 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's purpose with specific verbs ('Get comprehensive information about an address') and lists detailed resource types (address existence, token balance, ENS name, contract status, proxy info, token details). It distinguishes from siblings by focusing on comprehensive address analysis rather than specific operations like get_transactions_by_address or get_contract_abi.

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 this tool ('Essential for address analysis, contract investigation, token research, and DeFi protocol analysis'), giving concrete use cases. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools for more targeted operations.

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

get_block_infoA
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
number_or_hashYesBlock number or hash
include_transactionsNoIf true, includes a list of transaction hashes from the block.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds valuable behavioral context about the performance impact of including transactions ('may exhaust the context'), which goes beyond what annotations provide. No contradiction with annotations.

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

Conciseness5/5

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

Two well-structured sentences: first states the core purpose with examples, second provides crucial usage guidance about the transactions parameter. Every word earns its place with no redundancy or fluff.

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

Completeness4/5

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

For a read-only tool with good annotations and full schema coverage, the description provides excellent context about the key performance consideration (transaction list exhausting context). The main gap is lack of output format details, but with no output schema, this would be helpful to include.

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 three parameters thoroughly. The description adds some context about the include_transactions parameter's default behavior and performance implications, but doesn't provide additional semantic meaning beyond what's in the 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 the verb 'Get' and the resource 'block information', then provides specific examples of what information is retrieved (timestamp, gas used, burnt fees, transaction count). It distinguishes this tool from siblings like get_latest_block by focusing on specific block retrieval rather than latest block.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use the include_transactions parameter: 'request them only when you truly need them, because on high-traffic chains the list may exhaust the context.' This gives clear context about performance implications and when to avoid using this feature.

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

get_chains_listA
Read-only
Inspect

Get the list of known blockchain chains with their IDs. Useful for getting a chain ID when the chain name is known. This information can be used in other tools that require a chain ID to request information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, indicating a safe, read-only operation with potentially dynamic data. The description adds value by specifying that it returns 'known blockchain chains with their IDs,' implying a static or reference list, which provides useful 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 that front-load the purpose and follow with usage guidance. Every sentence earns its place by providing essential information without waste, making it highly efficient and well-structured.

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 simplicity (0 parameters, no output schema) and rich annotations, the description is complete enough for an agent to understand and invoke it correctly. It explains the purpose, usage, and output context adequately, though it could briefly mention the format of the returned list (e.g., as key-value pairs) for slightly better completeness.

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 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description does not need to add parameter information, and it appropriately focuses on the tool's purpose and usage without redundancy.

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 verb ('Get') and resource ('list of known blockchain chains with their IDs'), making the purpose specific and unambiguous. It distinguishes this tool from siblings by focusing on chain metadata rather than addresses, transactions, contracts, 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 Guidelines5/5

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

The description explicitly states when to use this tool: 'Useful for getting a chain ID when the chain name is known' and 'This information can be used in other tools that require a chain ID.' It provides clear context for usage without needing to specify exclusions, as the sibling tools are distinct in function.

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

get_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
chain_idYesThe ID of the blockchain
addressYesSmart contract address

TDQS

A4/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, indicating a safe read operation. The description adds valuable context by explaining what an ABI is and its purpose (formatting function calls, interpreting data), which helps the agent understand the tool's role beyond just being a read operation. It doesn't mention rate limits or authentication needs, but with annotations covering safety, this is acceptable.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by explanatory context that earns its place by clarifying the ABI's role. It uses three concise sentences with no redundant information, making it efficient and well-structured.

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 moderate complexity (2 parameters, read-only operation) and rich annotations (readOnlyHint, openWorldHint), the description is mostly complete. It explains the tool's purpose and the ABI's utility, though it doesn't detail output format or error cases, which is a minor gap since there's no output schema.

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%, with clear descriptions for both parameters ('chain_id' as blockchain ID, 'address' as smart contract address). The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples or constraints, so it meets the baseline of 3 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 specific action ('Get smart contract ABI') and resource ('Application Binary Interface'), with additional explanation of what an ABI defines. It distinguishes this tool from siblings like 'inspect_contract_code' (which likely retrieves bytecode) and 'read_contract' (which likely executes contract functions).

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?

The description implies usage by explaining that 'The ABI is required to format function calls or interpret contract data,' suggesting this tool is needed before using contract interaction tools. However, it doesn't explicitly state when to use this tool versus alternatives like 'inspect_contract_code' or provide clear exclusions.

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

get_latest_blockA
Read-only
Inspect

Get the latest indexed block number and timestamp, which represents the most recent state of the blockchain. No transactions or token transfers can exist beyond this point, making it useful as a reference timestamp for other API calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds valuable context beyond this: it clarifies that the data is 'indexed' (implying potential lag from real-time), specifies the return includes 'block number and timestamp,' and notes the limitation about transactions/token transfers. No contradiction with annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, followed by usage context. Every sentence adds value: the first defines the tool, and the second explains its utility and limitations. No wasted words or redundancy.

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 low complexity (one parameter, read-only, no output schema), the description is largely complete. It covers purpose, usage, and behavioral context. However, it could slightly improve by hinting at the return format (e.g., structured data with fields) since there's no output schema, but the annotations and clarity mitigate this gap.

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%, with the parameter 'chain_id' fully documented in the schema as 'The ID of the blockchain.' The description does not add any additional meaning or clarification about this parameter beyond what the schema provides, so it meets the baseline for high 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 specific action ('Get the latest indexed block number and timestamp') and resource ('blockchain'), distinguishing it from siblings like get_block_info (which retrieves details for a specific block) or get_chains_list (which lists available chains). It precisely defines what the tool returns.

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 states when to use this tool: 'useful as a reference timestamp for other API calls.' It also implies when not to use it by noting 'No transactions or token transfers can exist beyond this point,' suggesting alternatives like get_transactions_by_address for transaction data beyond this reference.

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

get_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
chain_idYesThe ID of the blockchain
addressYesWallet address
cursorNoThe pagination cursor from a previous response to get the next page of results.

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, indicating a safe read operation. The description adds valuable behavioral context: it discloses pagination support with instructions on using the 'next_call', specifies that balance is provided 'as is, without adjusting by decimals', and mentions enriched metadata and market data. This goes beyond annotations 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 well-structured and front-loaded with the core purpose in the first sentence. Each subsequent sentence adds value: details on return data, use cases, and pagination instructions. There is no wasted text, and it efficiently conveys necessary information in four concise sentences.

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 no output schema, the description compensates by detailing return values: 'contract details (name, symbol, decimals), market metrics (exchange rate, market cap, volume), holders count, and actual balance'. It also covers pagination behavior. However, it lacks error handling or rate limit information, which could be useful given the openWorldHint annotation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents parameters (chain_id, address, cursor). The description adds no specific parameter semantics beyond what the schema provides, such as format examples or constraints for 'address' or 'chain_id'. Baseline 3 is appropriate when schema handles parameter documentation.

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 verb 'Get' and resource 'ERC20 token holdings for an address' with specific scope 'comprehensive...with enriched metadata and market data'. It distinguishes from siblings like 'nft_tokens_by_address' (NFTs vs ERC20) and 'get_token_transfers_by_address' (transfers vs holdings).

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 use cases: 'portfolio analysis, wallet auditing, and DeFi position tracking', providing clear context for when to use this tool. However, it does not mention when not to use it or name specific alternatives among siblings, such as 'nft_tokens_by_address' for NFTs instead of ERC20 tokens.

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_addressA
Read-only
Inspect
Get ERC-20 token transfers for an address within a specific time range.
Use cases:
  - `get_token_transfers_by_address(address, age_from)` - get all transfers of any ERC-20 token to/from the address since the given date up to the current time
  - `get_token_transfers_by_address(address, age_from, age_to)` - get all transfers of any ERC-20 token to/from the address between the given dates
  - `get_token_transfers_by_address(address, age_from, age_to, token)` - get all transfers of the given ERC-20 token to/from the address between the given dates
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
addressYesAddress which either transfer initiator or transfer receiver
age_fromNoStart date and time (e.g 2025-05-22T23:00:00.00Z). This parameter should be provided in most cases to limit transfers and avoid heavy database queries. Omit only if you absolutely need the full history.
age_toNoEnd date and time (e.g 2025-05-22T22:30:00.00Z). Can be omitted to get all transfers up to the current time.
tokenNoAn ERC-20 token contract address to filter transfers by a specific token. If omitted, returns transfers of all tokens.
cursorNoThe pagination cursor from a previous response to get the next page of results.

TDQS

A4.4/5.0
Behavior4/5

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

While annotations already declare readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral context: it explicitly states support for pagination with specific instructions on how to handle it, warns about performance implications of omitting age_from, and clarifies that transfers include both to and from the address. This goes 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 efficiently structured with a clear purpose statement followed by specific use cases and important behavioral notes. Every sentence serves a distinct purpose: establishing the core function, demonstrating parameter usage, and providing critical implementation guidance about pagination. No wasted words.

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

Completeness4/5

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

For a read-only tool with comprehensive schema documentation but no output schema, the description provides excellent context: it explains what data is returned (ERC-20 token transfers), includes practical usage patterns, addresses performance considerations, and documents pagination behavior. The main gap is lack of information about return format/structure.

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?

With 100% schema description coverage, the input schema already thoroughly documents all 6 parameters. The description adds minimal parameter semantics beyond the schema, mainly through usage examples that show parameter combinations. It doesn't provide additional format details or constraints beyond what's in the 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 the specific action ('Get ERC-20 token transfers') and resource ('for an address within a specific time range'), distinguishing it from sibling tools like get_transactions_by_address or get_tokens_by_address by focusing specifically on token transfers rather than general transactions or token holdings.

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

Usage Guidelines5/5

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

The description provides explicit usage examples with different parameter combinations, showing when to use specific parameter sets (e.g., with/without age_to, with/without token). It also includes guidance about pagination handling and strongly recommends providing age_from to avoid heavy queries, giving clear operational context.

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

get_transaction_infoA
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
transaction_hashYesTransaction hash
include_raw_inputNoIf true, includes the raw transaction input data.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds valuable behavioral context beyond annotations: it specifies that raw input is omitted by default to save context, explains the enriched data types returned (decoded parameters, token metadata, fee breakdown), and notes the tool's utility for specific use cases. No contradictions with annotations exist.

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

Conciseness5/5

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

The description is well-structured and front-loaded, starting with the core purpose, followed by key differentiators, parameter guidance, and use cases. Each sentence adds distinct value without redundancy, and the length is appropriate for the tool's complexity. There is no wasted text.

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

Completeness4/5

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

Given the tool's complexity (enriched transaction data) and lack of an output schema, the description does a good job explaining what information is returned (decoded parameters, token transfers with metadata, fee breakdown, transaction types). However, it doesn't detail the exact structure or format of the enriched data, which could be helpful for an agent. Annotations cover safety aspects adequately.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents the three parameters (chain_id, transaction_hash, include_raw_input). The description adds minimal semantic value beyond the schema: it clarifies that include_raw_input=True is for 'raw hex data' and implies chain_id selects the blockchain, but doesn't provide additional details like format examples or constraints. 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's purpose with specific verbs ('get comprehensive transaction information') and resources ('transaction'), distinguishing it from siblings like 'transaction_summary' by emphasizing enriched data including decoded parameters, token transfers, fee breakdown, and transaction types. It explicitly contrasts with standard eth_getTransactionByHash, establishing its unique value.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('essential for transaction analysis, debugging smart contract interactions, tracking DeFi operations') and when to use the include_raw_input parameter ('only when you truly need the raw hex data'). It implicitly contrasts with simpler alternatives like 'transaction_summary' by highlighting comprehensive data, though it doesn't name specific siblings as alternatives.

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

get_transaction_logsA
Read-only
Inspect
Get comprehensive transaction logs.
Unlike standard eth_getLogs, this tool returns enriched logs, primarily focusing on decoded event parameters with their types and values (if event decoding is applicable).
Essential for analyzing smart contract events, tracking token transfers, monitoring DeFi protocol interactions, debugging event emissions, and understanding complex multi-contract transaction flows.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
transaction_hashYesTransaction hash
cursorNoThe pagination cursor from a previous response to get the next page of results.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds valuable behavioral context: it explains the enriched nature of the logs (decoded event parameters with types/values), mentions pagination support with specific implementation details, and clarifies the focus on event analysis rather than raw data. No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured and appropriately sized. It starts with the core purpose, differentiates from alternatives, lists use cases, and ends with pagination details. Every sentence adds value, though the use case list could be slightly more concise. Good front-loading of essential 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?

Given the tool's complexity (transaction log analysis with decoding), the description provides good context about what makes this tool special (enriched logs, decoded parameters). With annotations covering safety/scope and 100% schema coverage, the main gap is no output schema, but the description gives some indication of return format (pagination field, next_call). Could benefit from more detail about response structure.

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 fully documents all three parameters (chain_id, transaction_hash, cursor). The description doesn't add any parameter-specific semantics beyond what's in the schema, but it does mention pagination context which relates to the cursor parameter. Baseline 3 is appropriate when schema coverage is complete.

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: 'Get comprehensive transaction logs' with specific differentiation from 'standard eth_getLogs' by emphasizing enriched logs with decoded event parameters. It distinguishes from sibling tools like get_transaction_info by focusing on logs/events rather than general transaction data.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Essential for analyzing smart contract events, tracking token transfers, monitoring DeFi protocol interactions, debugging event emissions, and understanding complex multi-contract transaction flows.' This gives clear context for when to use this tool versus alternatives like get_transaction_info or get_transactions_by_address.

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

get_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; use `internal_transaction_index` for execution order.
Use cases:
  - `get_transactions_by_address(address, age_from)` - get all txs to/from the address since a given date.
  - `get_transactions_by_address(address, age_from, age_to)` - get all txs to/from the address between given dates.
  - `get_transactions_by_address(address, age_from, age_to, methods)` - get all txs to/from the address between given dates, filtered by method.
**SUPPORTS PAGINATION**: If response includes 'pagination' field, use the provided next_call to get additional pages.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
addressYesAddress which either sender or receiver of the transaction
age_fromNoStart date and time (e.g 2025-05-22T23:00:00.00Z).
age_toNoEnd date and time (e.g 2025-05-22T22:30:00.00Z).
methodsNoA method signature to filter transactions by (e.g 0x304e6ade)
cursorNoThe pagination cursor from a previous response to get the next page of results.

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, so the agent knows this is a safe read operation. The description adds valuable behavioral context beyond annotations: it explains pagination behavior ('SUPPORTS PAGINATION'), clarifies that a single transaction can have multiple records from internal calls, and provides guidance on using 'internal_transaction_index' for execution order. This adds meaningful operational context.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, exclusions, internal transaction explanation, use cases, pagination). It's appropriately sized for the tool's complexity, though the use case examples could be slightly more concise. Most sentences earn their place by providing valuable 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?

Given the tool's complexity (6 parameters, no output schema), the description provides good contextual completeness. It explains what the tool returns (native transfers and smart contract interactions), what it excludes (token transfers), how to handle internal transactions, provides use case examples, and explains pagination. The main gap is lack of information about return format or structure, but this is mitigated by the comprehensive parameter guidance.

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 6 parameters thoroughly. The description provides use case examples that illustrate how parameters work together (e.g., showing age_from alone vs with age_to and methods), but doesn't add significant semantic value beyond what's already in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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 (calls, internal txs) for an address' and explicitly distinguishes it from sibling tools by stating 'EXCLUDES TOKEN TRANSFERS' and pointing to 'get_token_transfers_by_address' for token history. This provides specific verb+resource+scope with clear sibling differentiation.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool vs alternatives: 'For token history, use get_token_transfers_by_address'. It also includes specific use cases with parameter examples and explains what the tool excludes, giving clear context for when to use this tool and when not to.

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

inspect_contract_codeB
Read-only
Inspect

Inspects a verified contract's source code or metadata.

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

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds that it inspects 'verified contract's source code or metadata', which implies a read operation consistent with annotations, but doesn't provide additional behavioral context like rate limits, authentication needs, or what 'verified' entails.

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, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence contributes directly to understanding the tool's function.

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

Completeness3/5

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

Given the 3 parameters with full schema coverage and annotations covering safety, the description is adequate but lacks output details (no output schema) and doesn't fully address sibling tool differentiation or usage context, leaving some gaps for an AI agent.

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 parameters are well-documented in the schema. The description mentions 'source code or metadata' and implies conditional behavior with 'file_name', adding some context, but doesn't provide extra semantic details beyond what the schema already covers.

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 action ('inspects') and resource ('verified contract's source code or metadata'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_contract_abi' or 'read_contract', which might have overlapping functionality with smart contracts.

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?

The description provides no guidance on when to use this tool versus alternatives like 'get_contract_abi' or 'read_contract'. It mentions the conditional behavior with 'file_name' but doesn't explain broader context or prerequisites for inspecting verified contracts.

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

lookup_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
``TOKEN_RESULTS_LIMIT`` matches from the Blockscout API are returned.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
symbolYesToken symbol or name to search for

TDQS

A3.8/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, indicating a safe read operation. The description adds valuable behavioral context beyond annotations: it specifies that results are based on 'similarity' (not exact matches), returns 'multiple potential matches', and is limited by 'TOKEN_RESULTS_LIMIT' from the Blockscout API. This enhances transparency about output behavior and constraints, though it doesn't cover rate limits or error handling.

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 highly concise and well-structured in three sentences: it states the purpose, clarifies the return behavior (multiple matches based on similarity), and specifies the limitation (TOKEN_RESULTS_LIMIT from Blockscout API). Every sentence adds essential information without redundancy, making it efficient and front-loaded for quick comprehension.

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 moderate complexity (search with similarity matching), lack of output schema, and rich annotations (readOnlyHint, openWorldHint), the description is mostly complete. It covers key behavioral aspects like similarity-based matching and result limits, but doesn't explain the return format (e.g., what data fields are included) or potential errors, leaving some gaps in full contextual understanding.

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%, with clear descriptions for both parameters ('chain_id' as blockchain ID and 'symbol' as token symbol or name). The description adds minimal semantic value beyond the schema, only implying that 'symbol' is used for similarity-based searching. Since the schema already documents parameters well, the baseline score of 3 is appropriate, as the description doesn't significantly enhance parameter understanding.

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's purpose: searching for token addresses by symbol or name and returning multiple potential matches. It specifies the verb ('Search for'), resource ('token addresses'), and scope ('by symbol or name'). However, it doesn't explicitly differentiate from sibling tools like 'get_tokens_by_address' or 'nft_tokens_by_address', which prevents a perfect score.

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?

The description implies usage context by mentioning it returns matches based on 'symbol or token name similarity' and is limited to 'TOKEN_RESULTS_LIMIT' from the Blockscout API. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_tokens_by_address' or 'direct_api_call', and doesn't specify prerequisites or exclusions, leaving usage somewhat ambiguous.

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

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
chain_idYesThe ID of the blockchain
addressYesNFT owner address
cursorNoThe pagination cursor from a previous response to get the next page of results.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations declare readOnlyHint=true and destructiveHint=false, the description specifies that results are 'grouped by collection' and provides details about the response structure (collection details and individual token instance data). Most importantly, it explicitly documents pagination behavior with specific instructions about the 'pagination' field and 'next_call', which is critical operational knowledge not captured 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 efficiently structured with three focused sentences and a bold pagination note. The first sentence states the core functionality, the second details the response structure, the third provides usage context, and the pagination note delivers critical operational guidance. Every sentence earns its place with 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?

For a read-only tool with good annotations but no output schema, the description provides excellent context about what the tool returns (collection details and token instance data) and critical pagination behavior. It could potentially benefit from mentioning response format specifics or error conditions, but given the annotations cover safety aspects and the description explains the response structure well, it's quite complete for agent use.

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?

With 100% schema description coverage, the input schema already fully documents all three parameters (chain_id, address, cursor). The description doesn't add any parameter-specific information beyond what's in the schema, but the baseline of 3 is appropriate when the schema provides complete parameter documentation.

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 specific verbs ('retrieve NFT tokens owned by an address') and resources (ERC-721, ERC-404, ERC-1155 tokens). It distinguishes from sibling tools like 'get_tokens_by_address' by specifying NFT tokens grouped by collection rather than general tokens, and from 'get_address_info' by focusing on NFT holdings specifically.

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 this tool: for getting a detailed overview of an address's digital collectibles with collection data. It doesn't explicitly state when NOT to use it or name specific alternatives, but the context is sufficiently clear for an agent to understand this is for NFT holdings analysis rather than general token balances or address metadata.

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

read_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
chain_idYesThe ID of the blockchain
addressYesSmart contract address
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.
function_nameYesThe symbolic name of the function to be called. This must match the `name` field in the provided ABI.
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

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and destructiveHint=false, which the description reinforces by emphasizing 'query' and 'read' operations. The description adds valuable context beyond annotations: it explains that both view/pure functions AND non-view/pure functions (via eth_call simulation) can be called, and mentions the tool returns 'decoded result' (helpful since there's no output schema). No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement, usage context, and detailed example. The example is lengthy but necessary to demonstrate complex parameter interactions. Some sentences could be more concise, but overall it's efficiently organized with front-loaded key 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?

For a complex tool with 6 parameters, 100% schema coverage, and no output schema, the description provides good context. It explains the tool's behavior, includes a comprehensive example showing parameter usage, and clarifies the return type ('decoded result'). It could mention error cases or limitations, but covers the essential functionality well.

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 6 parameters thoroughly. The description doesn't add significant parameter semantics beyond what's in the schema descriptions, though the example illustrates how parameters work together. Baseline 3 is appropriate when schema does the heavy lifting.

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: 'Calls a smart contract function (view/pure, or non-view/pure simulated via eth_call) and returns the decoded result.' It specifies the verb ('calls'), resource ('smart contract function'), and scope ('view/pure' functions or simulated calls). It distinguishes from siblings by focusing on contract state queries rather than transactions, blocks, or token lookups.

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: 'This tool provides a direct way to query the state of a smart contract.' It implies usage for read-only contract interactions, but doesn't explicitly state when NOT to use it or name specific alternatives. The example shows a balance check, which helps illustrate appropriate use cases.

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

transaction_summaryA
Read-only
Inspect
Get human-readable transaction summaries from Blockscout Transaction Interpreter.
Automatically classifies transactions into natural language descriptions (transfers, swaps, NFT sales, DeFi operations)
Essential for rapid transaction comprehension, dashboard displays, and initial analysis.
Note: Not all transactions can be summarized and accuracy is not guaranteed for complex patterns.
ParametersJSON Schema
NameRequiredDescriptionDefault
chain_idYesThe ID of the blockchain
transaction_hashYesTransaction hash

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, indicating a safe, read-only operation with potential for unknown data. The description adds valuable behavioral context beyond this: it discloses that 'Not all transactions can be summarized and accuracy is not guaranteed for complex patterns,' which is crucial for understanding limitations. However, it doesn't mention rate limits, authentication needs, or response format details.

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 efficiently structured with four sentences that each serve a distinct purpose: stating the core function, detailing classification capabilities, specifying use cases, and disclosing limitations. There's no wasted text, and key information is front-loaded, making it easy for an agent to quickly understand the tool's 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 moderate complexity (2 required parameters), rich annotations (readOnlyHint, openWorldHint), and lack of output schema, the description is mostly complete. It covers purpose, usage, and limitations well. However, it doesn't describe the output format (e.g., what the summary looks like), which would be helpful since there's no output schema. The annotations help compensate, but some gaps remain.

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%, with both parameters (chain_id and transaction_hash) well-documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3. It doesn't compensate for gaps because there are none, but also doesn't provide extra semantic context.

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: 'Get human-readable transaction summaries from Blockscout Transaction Interpreter' with specific details about classification into natural language descriptions (transfers, swaps, NFT sales, DeFi operations). It distinguishes itself from sibling tools like 'get_transaction_info' by focusing on summarized, human-readable interpretations rather than raw transaction 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?

The description provides clear context for when to use this tool: 'Essential for rapid transaction comprehension, dashboard displays, and initial analysis.' It doesn't explicitly mention when NOT to use it or name specific alternatives, but the context strongly implies it's for summary purposes rather than detailed analysis, which differentiates it from siblings like 'get_transaction_info'.

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

__unlock_blockchain_analysis__A
Read-only
Inspect

Unlocks access to other MCP tools.

All tools remain locked with a "Session Not Initialized" error until this
function is successfully called. Skipping this explicit initialization step
will cause all subsequent tool calls to fail.

MANDATORY FOR AI AGENTS: The returned instructions contain ESSENTIAL rules
that MUST govern ALL blockchain data interactions. Failure to integrate these
rules will result in incorrect data retrieval, tool failures and invalid
responses. Always apply these guidelines when planning queries, processing
responses or recommending blockchain actions.

COMPREHENSIVE DATA SOURCES: Provides an extensive catalog of specialized
blockchain endpoints to unlock sophisticated, multi-dimensional blockchain
investigations across all supported networks.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description adds significant behavioral context beyond annotations: it explains that all tools remain locked until this is called, that it returns essential rules for blockchain interactions, and that it provides a catalog of data sources. While annotations indicate read-only and non-destructive behavior, the description enriches understanding of the initialization mechanism and post-call requirements.

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

Conciseness4/5

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

The description is well-structured with clear sections: purpose, mandatory nature, and data sources. Each sentence adds value, though it could be slightly more concise by combining some of the imperative warnings. The information is front-loaded with the core purpose in the first sentence.

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 zero-parameter initialization tool with annotations covering safety (readOnlyHint, destructiveHint), the description is complete: it explains the prerequisite role, consequences of skipping it, what it returns (rules and data source catalog), and how it enables other tools. No output schema exists, but the description adequately covers expected outcomes.

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

Parameters4/5

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

With 0 parameters and 100% schema coverage, the baseline would be 4. The description adds value by explaining why there are no parameters (it's a simple unlock/initialization function) and what happens when called, which goes beyond the empty 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 clearly states the tool's purpose as 'Unlocks access to other MCP tools' and explains it initializes the session to prevent 'Session Not Initialized' errors. It distinguishes itself from all sibling tools by being the mandatory initialization step rather than a data retrieval or analysis function.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'MANDATORY FOR AI AGENTS' indicates this must be called first, 'Skipping this explicit initialization step will cause all subsequent tool calls to fail' explains the consequence of not using it, and it implicitly positions this as a prerequisite to all other blockchain tools in the sibling list.

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. 3 tool updatesv1.0.0
    • Addeddirect_api_call
    • Addedinspect_contract_code
    • Changedread_contract4 fields changed
      • removedInput schema / properties / args / anyOf
        Removed value: -[
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / args / default
        Previous value: -nullNew value: +"[]"
      • changedInput schema / properties / args / description
        Previous value: -"A JSON array of arguments (not a string). Example: [\"0xabc...\"] is correct; \"[\\\"0xabc...\\\"]\" is incorrect. Order and types must match ABI inputs. Addresses: use 0x-prefixed strings; Numbers: use integers (not quoted); Bytes: keep as 0x-hex strings. If no arguments, pass [] or omit this field."New value: +"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."
      • addedInput schema / properties / args / type
        Added value: +"string"
  2. 16 tool updates
    • First observed__unlock_blockchain_analysis__
    • First observedget_address_by_ens_name
    • First observedget_address_info
    • First observedget_block_info
    • First observedget_chains_list
    • First observedget_contract_abi
    • First observedget_latest_block
    • First observedget_token_transfers_by_address
    • First observedget_tokens_by_address
    • First observedget_transaction_info
    • First observedget_transaction_logs
    • First observedget_transactions_by_address
    • First observedlookup_token_by_symbol
    • First observednft_tokens_by_address
    • First observedread_contract
    • First observedtransaction_summary

TDQS

A4/5.0
Disambiguation4/5

Most tools have distinct purposes with clear boundaries, such as get_address_info for address details versus get_tokens_by_address for token holdings. However, some overlap exists between get_transaction_info and transaction_summary, where both provide transaction details but with different focuses (comprehensive vs. human-readable), which could cause minor confusion.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout, such as get_address_info, get_block_info, and get_transaction_info. The only exception is direct_api_call, which still fits a verb_noun style, and __unlock_blockchain_analysis__ uses underscores but is a special initialization tool, not affecting the overall consistency.

Tool Count4/5

With 18 tools, the count is slightly high but reasonable for a comprehensive blockchain explorer server covering addresses, blocks, transactions, contracts, tokens, and NFTs. It includes core operations like reading contracts and fetching chain lists, though it might be borderline for some use cases due to the number.

Completeness5/5

The tool set provides complete coverage for blockchain analysis, including address lookup, block and transaction details, contract interactions (ABI, code inspection, reading), token and NFT holdings, and paginated data retrieval. There are no obvious gaps; it supports essential workflows from basic queries to advanced investigations.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, providing services like token transfers, contract interactions, and ENS resolution through a unified interface.
    28
    127
    382
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to access Flow blockchain data and perform operations such as checking balances, resolving domains, executing scripts, and submitting transactions.
    1
    -
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Comprehensive Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, supporting token transfers, smart contract interactions, and ENS name resolution through a unified interface.
    1
    -

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/blockscout/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server