Infura MCP Server
Provides tools to query blockchain data on BNB Chain via Infura's API, including blocks, transactions, smart contracts, accounts, and network information.
Provides tools to query blockchain data on Ethereum (mainnet, sepolia, holesky) via Infura's API, including blocks, transactions, smart contracts, accounts, and network information.
Provides tools to query blockchain data on Optimism via Infura's API, including blocks, transactions, smart contracts, accounts, and network information.
Provides tools to query blockchain data on Polygon via Infura's API, including blocks, transactions, smart contracts, accounts, and network information.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Infura MCP Servershow me the latest block on Ethereum mainnet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Infura MCP Server
A Model Context Protocol (MCP) server that connects AI assistants to 30+ blockchain networks through Infura's infrastructure. Query blocks, transactions, smart contracts, and accounts across Ethereum, Polygon, Arbitrum, Base, Avalanche, BNB Chain, and more using natural language.
What is This?
This server implements the Model Context Protocol (MCP), an open standard for connecting AI assistants to external data sources. MCP enables AI models to execute tools and access real-time data in a secure, structured way.
Why use this server?
Query live blockchain data directly from AI assistants (Claude, Cursor, VS Code Copilot)
No Web3 library setup required - just configure and start asking questions
All 29 tools are read-only and never modify blockchain state
Built-in security features protect against common vulnerabilities
Related MCP server: CryptoQuant MCP Server
Features
29 JSON-RPC Tools - Complete blockchain query suite for accounts, blocks, transactions, smart contracts, logs, and network data. All tools include MCP annotations (readOnlyHint, idempotentHint, etc.) for AI-optimized behavior. Optional response_format: "markdown" parameter for human-readable output.
30+ Networks - EVM-compatible chains including Ethereum mainnet/testnets, Layer 2 solutions (Arbitrum, Base, Optimism, Polygon, Linea, Scroll, ZKsync), and alternative L1s (Avalanche, BNB Chain, Celo, Starknet).
Enterprise-Grade Security - Configurable CORS, DNS rebinding protection, rate limiting, session management, input validation, and request/response size limits.
Flexible Deployment - Stdio mode for desktop integration or Streamable HTTP for web applications.
Quick Start
Get your Infura API key from the MetaMask Developer Portal
Choose your integration method below
Restart your AI client and start querying blockchain data
Claude Desktop
Config file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
How to access: Claude menu → Settings → Developer → Edit Config
{
"mcpServers": {
"infura": {
"command": "npx",
"args": ["-y", "infura-mcp-server"],
"env": {
"INFURA_API_KEY": "<YOUR_API_KEY>",
"INFURA_NETWORK": "mainnet"
}
}
}
}After saving, quit and restart Claude Desktop completely. Look for the MCP server indicator (hammer icon) in the bottom-right of the chat input.
Cursor
Config file location:
Global:
~/.cursor/mcp.jsonProject:
.cursor/mcp.jsonin project root
How to access: Settings → Cursor Settings → MCP → Add new MCP server
{
"mcpServers": {
"infura": {
"command": "npx",
"args": ["-y", "infura-mcp-server"],
"env": {
"INFURA_API_KEY": "<YOUR_API_KEY>",
"INFURA_NETWORK": "mainnet"
}
}
}
}Using environment variables (recommended for security):
{
"mcpServers": {
"infura": {
"command": "npx",
"args": ["-y", "infura-mcp-server"],
"env": {
"INFURA_API_KEY": "${env:INFURA_API_KEY}",
"INFURA_NETWORK": "mainnet"
}
}
}
}Claude Code (CLI)
One-line install:
claude mcp add infura --transport stdio --env INFURA_API_KEY=<YOUR_API_KEY> -- npx -y infura-mcp-serverWith network selection:
claude mcp add infura --transport stdio \
--env INFURA_API_KEY=<YOUR_API_KEY> \
--env INFURA_NETWORK=polygon-mainnet \
-- npx -y infura-mcp-serverScope options:
--scope local(default): Available only in current project--scope user: Available across all your projects--scope project: Shared with team via.mcp.json
Verify installation:
claude mcp list # List configured servers
claude mcp get infura # Check server detailsInside Claude Code, use /mcp to check server status.
VS Code
Quick install:
Or manually add to User Settings (JSON) or .vscode/mcp.json:
{
"mcp": {
"servers": {
"infura": {
"command": "npx",
"args": ["-y", "infura-mcp-server"],
"env": {
"INFURA_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
}Docker
Add to your MCP client config:
{
"mcpServers": {
"infura": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "INFURA_API_KEY=<YOUR_API_KEY>",
"-e", "INFURA_NETWORK=mainnet",
"ghcr.io/qbandev/infura-mcp-server:latest"
]
}
}
}HTTP Mode (Web Deployments)
npm run start:http
# Endpoints: http://localhost:3001/mcp (main) | http://localhost:3001/healthFor HTTP/SSE clients (Cursor remote servers):
{
"mcpServers": {
"infura": {
"url": "http://localhost:3001/mcp"
}
}
}Configuration
Environment Variables
Variable | Required | Default | Description |
| Yes | - | Your Infura API key from MetaMask Developer Portal |
| No |
| Target blockchain network (see Supported Networks) |
| No |
| Enable debug logging |
| No |
| HTTP server port (HTTP mode only) |
Security Configuration (HTTP Mode)
Variable | Default | Description |
|
| Comma-separated list of allowed CORS origins |
|
| Comma-separated list of allowed Host headers (DNS rebinding protection) |
|
| Session timeout in milliseconds |
|
| Maximum concurrent sessions |
Available Tools
Account and Balance (3 tools)
eth_getBalance- Get ETH balance of an addresseth_getCode- Get contract bytecode at an addresseth_getTransactionCount- Get transaction count (nonce) for an address
Blocks (7 tools)
eth_blockNumber- Get the latest block numbereth_getBlockByHash- Get block by its hasheth_getBlockByNumber- Get block by numbereth_getBlockTransactionCountByHash- Get transaction count in a block by hasheth_getBlockTransactionCountByNumber- Get transaction count in a block by numbereth_getUncleCountByBlockHash- Get uncle count by block hasheth_getUncleCountByBlockNumber- Get uncle count by block number
Transactions (6 tools)
eth_getTransactionByHash- Get transaction details by hasheth_getTransactionByBlockHashAndIndex- Get transaction by block hash and indexeth_getTransactionByBlockNumberAndIndex- Get transaction by block number and indexeth_getTransactionReceipt- Get transaction receipt (logs, status, gas used)eth_getUncleByBlockHashAndIndex- Get uncle block by hash and indexeth_getUncleByBlockNumberAndIndex- Get uncle block by number and index
Smart Contracts (3 tools)
eth_call- Execute a read-only contract calleth_estimateGas- Estimate gas for a transactioneth_getStorageAt- Read storage slot from a contract
Logs (1 tool)
eth_getLogs- Query contract event logs with filtering (supports pagination for large result sets)
Network Info (5 tools)
eth_chainId- Get the chain IDnet_version- Get the network versionnet_listening- Check if node is listening for connectionsnet_peerCount- Get number of connected peersweb3_clientVersion- Get the client version string
Gas and Fees (4 tools)
eth_gasPrice- Get current gas priceeth_feeHistory- Get historical fee data (EIP-1559)eth_protocolVersion- Get the Ethereum protocol versioneth_syncing- Get sync status of the node
All tools include enhanced descriptions with Args, Returns, Examples, and Errors sections for better AI understanding.
Supported Networks
Access 30+ networks across 18 blockchain ecosystems. Set your target using INFURA_NETWORK.
Category | Networks |
Ethereum |
|
Arbitrum |
|
Base |
|
Optimism |
|
Polygon |
|
Linea |
|
ZKsync |
|
Scroll |
|
Blast |
|
Mantle |
|
Avalanche |
|
BNB Chain |
|
opBNB |
|
Celo |
|
Palm |
|
Starknet |
|
Swellchain |
|
Unichain |
|
See complete network documentation.
Usage Examples
Once configured, ask your AI assistant natural language questions:

Common queries:
"What is the ETH balance of vitalik.eth?"
"Show me the latest block on Ethereum mainnet"
"Get the transaction receipt for 0x..."
"What is the current gas price on Polygon?"
"Read the storage at slot 0 of this contract"
"Compare gas prices across Ethereum, Arbitrum, and Base"
The AI automatically selects the appropriate tools and provides contextual insights.
Tool parameters:
Use
response_format: "markdown"for formatted, human-readable outputUse
pageandpageSizewitheth_getLogsto paginate large result sets
Architecture
+------------------+ +-------------------+ +------------------+
| AI Assistant | <-> | Infura MCP | <-> | Infura API |
| (Claude, Cursor) | | Server | | (30+ networks) |
+------------------+ +-------------------+ +------------------+
|
+-----+-----+
| |
Stdio Mode HTTP Mode
(Desktop) (Web/API)Transport Modes:
Stdio (default): For desktop integrations (Claude Desktop, Cursor, VS Code). The AI client spawns the server as a subprocess and communicates via stdin/stdout.
Streamable HTTP: For web deployments and multi-client scenarios. Exposes
/mcpendpoint with session management.
Security
Warning: Never commit API keys to version control. Use environment variables or secrets management.
Built-in Security Features
Input Validation
Required parameter validation: All tool inputs validated against strict patterns before execution
Ethereum addresses: 0x + 40 hex characters
Transaction/block hashes: 0x + 64 hex characters
Networks: Validated against allowlist to prevent URL injection
Local execution: Server runs locally with no external code execution
Request Protection (HTTP Mode)
Rate limiting: 100 requests per minute per IP address
CORS: Configurable origin allowlist via
CORS_ALLOWED_ORIGINSDNS rebinding protection: Host header validation via
ALLOWED_HOSTSRequest body limit: 100KB maximum payload size
Response size limit: 100KB maximum response (CHARACTER_LIMIT)
Session management: Configurable timeout and maximum concurrent sessions
Network Security
All Infura API calls use HTTPS/TLS encryption
Read-only operations only - tools never modify blockchain state
No arbitrary code execution - only predefined JSON-RPC methods
Request identification via User-Agent header:
infura-mcp-server/{version}
Security Headers (HTTP Mode)
X-Content-Type-Options: nosniffX-Frame-Options: DENYContent-Security-Policy: default-src 'none'Referrer-Policy: no-referrerCache-Control: no-store
API Key Security
Store keys in environment variables, never in code or committed config files
Use separate API keys for development and production
Monitor usage via the MetaMask Developer Dashboard
Rotate keys periodically and revoke unused keys
Use Infura's allowlist feature to restrict key usage by domain or IP
Supply Chain Security
This package uses npm Trusted Publishing with OIDC and provenance attestations for supply chain integrity.
Error Handling
The server provides actionable error messages to help diagnose issues:
Error | Cause | Solution |
| Missing environment variable | Set |
| Invalid or restricted API key | Verify key at MetaMask Dashboard |
| Too many requests | Wait 60 seconds, or upgrade your Infura plan |
| Malformed address input | Use 0x followed by 40 hex characters |
| Unsupported network name | Check Supported Networks |
| Infura outage | Transient error - automatic retry with exponential backoff |
| Network congestion | Retry, or simplify the query |
Retry Logic: Transient failures (HTTP 429, 5xx, network errors) are automatically retried up to 3 times with exponential backoff (1s, 2s, 4s). Rate limit responses respect the Retry-After header.
Common Pitfalls
Forgetting to set INFURA_API_KEY - The most common issue. Verify the variable is exported in your shell or set in your MCP client config.
Using wrong network name - Network names are case-sensitive and hyphenated (e.g.,
arbitrum-mainnet, notarbitrumorArbitrum).Querying testnet data on mainnet - Transactions and addresses are network-specific. Set
INFURA_NETWORKto match your data.Expecting real-time updates - MCP tools query on-demand. For continuous monitoring, make repeated queries.
Large log queries timing out - Use specific block ranges and topic filters with
eth_getLogsto limit result size.Committing API keys - Use
.envfiles (add to.gitignore) or your IDE's secrets management.
Development
npm install # Install dependencies
npm start # Run in stdio mode
npm run start:http # Run in HTTP mode
npm test # Run basic tests
npm run test:full # Run all tests including HTTP transport
npm run list-tools # List available toolsRun without installation:
npx infura-mcp-server --help # Show available commandsDocker
npm run docker:build # Build image
npm run docker:run # Run in stdio mode
npm run docker:run:http # Run in HTTP mode
npm run docker:compose:up # Start with docker-compose (HTTP)
npm run docker:compose:down # Stop containersTroubleshooting
API key not working - Verify your key at the MetaMask Developer Dashboard
Network not supported - Check the Supported Networks list and verify spelling
Tool not responding - Restart your MCP client and verify configuration JSON syntax
Rate limit exceeded - Upgrade your Infura plan for higher limits, or wait 60 seconds
Connection refused (HTTP mode) - Check that ALLOWED_HOSTS includes your hostname
CORS errors (HTTP mode) - Add your origin to CORS_ALLOWED_ORIGINS
For detailed API documentation, see Infura docs. For bugs or feature requests, open a GitHub issue.
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
License
MIT License - see LICENSE file for details.
Available Tools
29 toolseth_callA
Execute a read-only smart contract call without creating a transaction.
Args:
to (string): Contract address to call (20-byte hex, e.g., '0x...').
data (string): ABI-encoded function call data (hex string starting with 0x).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string containing the return value of the executed contract method.
Examples:
"Read ERC20 balance": { "to": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "data": "0x70a08231000000000000000000000000..." }
"Query on Sepolia": { "to": "0x...", "data": "0x...", "network": "sepolia" }
Errors:
InvalidParams: When 'to' address or 'data' format is invalid.
InternalError: When contract execution reverts or Infura API fails.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The address of the contract to call. | |
| data | Yes | The data to send with the call. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it is read-only and lists errors (InvalidParams, InternalError), but does not mention that the call is a simulation (no gas cost), that the contract must have code, or that the data must be ABI-encoded. While examples help, more behavioral details would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points for args, returns, errors, and examples. It is fairly concise at about 10 lines, but could be slightly trimmed (e.g., remove some redundancy). The key information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description adequately explains the return value (hexadecimal string) and errors. It covers the main parameters and provides examples. However, it misses the 'response_format' parameter (documented only in schema) and could mention that the call simulates execution on the specified network state. Overall, it is fairly complete for a tool with 4 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is documented in the schema. The description elaborates on 'to', 'data', and 'network' with formats and defaults, adding value beyond schema. However, the 'response_format' parameter (present in schema) is not mentioned in the description, leaving a gap. The examples add clarity for 'to' and 'data'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute a read-only smart contract call without creating a transaction,' which specifies the verb (execute), resource (smart contract call), and read-only nature. This clearly distinguishes it from sibling tools like eth_getBalance or eth_sendTransaction (not listed but implied), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives when to use (read-only calls without creating a transaction) and includes examples and error conditions. However, it does not explicitly mention when not to use or compare with alternatives among the many sibling tools (e.g., eth_call vs. eth_estimateGas for gas estimation). The guidance is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_chainIdA
Get the chain ID of an Ethereum network for EIP-155 transaction signing.
Args:
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing the chain ID (e.g., '0x1' for mainnet, '0xaa36a7' for Sepolia).
Examples:
"Get mainnet chain ID": {}
"Get Sepolia chain ID": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It discloses the operation (read-only query), return type (hex string), and errors (Infura API unavailability), ensuring transparency about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-organized with sections (Args, Returns, Examples, Errors), and front-loads the purpose. Every sentence serves a clear role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, no output schema), the description covers purpose, major parameters, returns, examples, and errors. It lacks detail on 'response_format' but the schema covers it, making it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, so baseline is 3. The description adds value by explaining the 'network' parameter with default and examples, but does not mention 'response_format', which is only in the schema. Overall meaningful addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool retrieves the chain ID for EIP-155 signing. It distinguishes from sibling tools like eth_call or eth_getBalance, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and context for EIP-155, yet it does not explicitly state when not to use this tool or mention alternatives. However, the uniqueness of the function among siblings makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_estimateGasA
Estimate the gas required to execute a transaction without broadcasting it.
Args:
from (string): Sender address (20-byte hex, e.g., '0x...').
to (string): Recipient address (20-byte hex, e.g., '0x...').
value (string): Amount to send in wei as hex (e.g., '0xde0b6b3a7640000' for 1 ETH).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing estimated gas units (e.g., '0x5208' for 21000 gas).
Examples:
"Estimate ETH transfer": { "from": "0xYourAddress", "to": "0xRecipient", "value": "0xde0b6b3a7640000" }
"Estimate on Sepolia": { "from": "0x...", "to": "0x...", "value": "0x0", "network": "sepolia" }
Errors:
InvalidParams: When address format or value format is invalid.
InternalError: When transaction would revert or Infura API fails.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The address from which the transaction is sent. | |
| to | Yes | The address to which the transaction is sent. | |
| value | Yes | The amount of Ether to send (in wei). | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses key behaviors: non-broadcasting, returns hex string, defaults to mainnet, and errors. It lacks discussion of rate limits or authentication, but adequate for a read-only query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with headings (Args, Returns, Examples, Errors) and front-loaded purpose. Slightly lengthy but each section adds value. Could be more concise but remains informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return format (hex string) with example. Covers errors and network default. Complete for a simple estimation tool with clear expected behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by explaining hex formats, providing unit conversion example, and listing error conditions. However, it misses the response_format parameter, which has a schema description. Overall, adds meaningful context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Estimate the gas required to execute a transaction without broadcasting it.' This clearly distinguishes it from sibling tools like eth_call (which executes) and eth_gasPrice (which returns current price).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context and examples (ETH transfer, Sepolia network), but does not explicitly state when not to use or compare to alternatives. It is clear enough for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBalanceA
Get the ETH balance of an address at a specific block.
Args:
address (string): Ethereum address to check (20-byte hex, e.g., '0x...').
tag (string): Block reference - 'latest', 'earliest', or 'pending'.
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing balance in wei (e.g., '0xde0b6b3a7640000' for 1 ETH).
Examples:
"Get current balance": { "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "tag": "latest" }
"Check Sepolia balance": { "address": "0x...", "tag": "latest", "network": "sepolia" }
Errors:
InvalidParams: When address format is invalid or tag is not recognized.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The Ethereum address to check the balance for. | |
| tag | No | The block parameter to use. | latest |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It discloses the return format (hexadecimal string in wei), lists possible errors, and provides examples. It does not overpromise or hide side effects (none expected).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (Args, Returns, Examples, Errors). It is concise yet comprehensive—every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the description covers all necessary aspects: purpose, parameters, return format, usage examples, and error cases. There is no output schema, so the description adequately explains the return value. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value: it explains the address format, enumerates tag options with meanings, clarifies the network parameter with a default, and includes concrete examples. This goes well beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the ETH balance of an address at a specific block. The verb 'Get' and resource 'ETH balance' are specific, and it distinguishes itself from sibling tools like eth_call or eth_getTransactionByHash, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly clarifies usage by specifying exactly what the tool does (get balance). It does not explicitly mention when not to use it or list alternatives, but the context of sibling tools makes it clear this is the correct tool for balance queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBlockByHashA
Get detailed block information using its hash.
Args:
blockHash (string): 32-byte block hash (66 chars with 0x prefix).
fullTransactions (boolean): If true, returns full tx objects; if false, returns tx hashes only.
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Block object with number, hash, parentHash, transactions, gasUsed, timestamp, etc. Returns null if block not found.
Examples:
"Get block with tx hashes": { "blockHash": "0x...", "fullTransactions": false }
"Get block with full txs": { "blockHash": "0x...", "fullTransactions": true, "network": "mainnet" }
Errors:
InvalidParams: When blockHash format is invalid (not 66 char hex).
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockHash | Yes | The 32-byte hash of the block to retrieve. | |
| fullTransactions | No | If true, returns full transaction objects; if false, returns transaction hashes. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals error types (InvalidParams, InternalError) and the return of null for missing blocks, though it lacks details on rate limits or authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (Args, Returns, Examples, Errors), using concise language without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists key return fields and error conditions, giving the agent a complete understanding of the tool's behavior and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100%), and the description adds value by specifying blockHash format (66 chars with 0x prefix), clarifying fullTransactions behavior, and providing examples. It omits response_format but is still helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed block information using a block hash, distinguishing it from the sibling tool eth_getBlockByNumber which uses block number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and clarifies parameter options, but does not explicitly state when to use this tool over alternatives like eth_getBlockByNumber.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBlockByNumberA
Get detailed block information using its number or tag.
Args:
blockNumber (string): Block number as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending').
fullTransactions (boolean): If true, returns full tx objects; if false, returns tx hashes only.
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Block object with number, hash, parentHash, transactions, gasUsed, timestamp, etc. Returns null if block not found.
Examples:
"Get latest block": { "blockNumber": "latest", "fullTransactions": false }
"Get specific block with full txs": { "blockNumber": "0x10d4f", "fullTransactions": true }
Errors:
InvalidParams: When blockNumber format is invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number in hexadecimal format or one of the string tags `latest`, `earliest`, or `pending`. | |
| fullTransactions | No | If true, returns the full transaction objects; if false, returns only the hashes of the transactions. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully covers behavior: it describes the return value (Block object or null), specific error types (InvalidParams, InternalError), and includes examples. It makes the tool's read-only, safe nature clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with Args, Returns, Examples, and Errors sections. Every sentence provides necessary information without redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return object (including field examples) and null case. It also covers error conditions and provides concrete examples, making it complete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining blockNumber accepts hex or tags, fullTransactions boolean, and network defaults to mainnet. However, it omits the response_format parameter, though it does describe return format elsewhere. Examples and error info further enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed block information using its number or tag,' which is a specific verb and resource. It distinguishes from siblings like eth_getBlockByHash (block by hash) and eth_getBlockNumber (just the number).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool, with examples demonstrating typical usage. However, it does not explicitly state when not to use it or compare to alternatives, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBlockNumberA
Fetch the latest block number from an Ethereum network.
Args:
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing the current block number (e.g., '0x10d4f').
Examples:
"Get mainnet block number": {}
"Get Sepolia block number": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses the tool's behavior: it queries an Ethereum network, returns a hexadecimal string, and can raise InternalError if the Infura API fails. It also explains the default network. Since no annotations are provided, the description carries the full burden and does so thoroughly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for description, args, returns, examples, and errors. It is concise with no redundant sentences, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains the return value (hex string) and covers errors. Both parameters are documented in the schema, and the description adds context for network. For a simple tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value for the network parameter by explaining its usage and providing examples. However, it does not mention response_format, which is covered in the schema. Overall, it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Fetch the latest block number from an Ethereum network', which is a specific verb+resource. It clearly distinguishes from sibling tools like eth_getBlockByNumber or eth_getBlockByHash, which fetch full block data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and notes the optional network parameter with a default. While it doesn't explicitly exclude siblings, the purpose is clear, and the context is sufficient for an agent to decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBlockTransactionCountByHashA
Get the number of transactions in a block identified by its hash.
Args:
blockHash (string): 32-byte block hash (66 chars with 0x prefix).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing transaction count (e.g., '0x10' for 16 transactions). Returns null if block not found.
Examples:
"Count txs in block": { "blockHash": "0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238" }
"Query Sepolia block": { "blockHash": "0x...", "network": "sepolia" }
Errors:
InvalidParams: When blockHash format is invalid (not 66 char hex).
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockHash | Yes | The 32-byte block hash to query. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the return value (hex string, null if block not found), lists possible errors (InvalidParams, InternalError), and gives examples. It does not detail auth or rate limits, but for a read-only blockchain query this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections for Args, Returns, Examples, and Errors. Every sentence adds value, and there is no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple block transaction count tool with 3 parameters and no output schema, the description fully covers purpose, all parameters, return format, error conditions, and usage examples. It is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing baseline of 3. The description adds value by specifying blockHash format (66 chars with 0x prefix) and network default. However, it omits the response_format parameter present in the schema, missing the chance to explain its options (json/markdown).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the number of transactions in a block by its hash. It is distinct from sibling tools like eth_getBlockTransactionCountByNumber (which uses block number) and eth_getTransactionCount (which counts transactions for an address).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes examples showing typical usage and optional network parameter, making it clear when to use. However, it does not explicitly state when not to use or suggest alternatives among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getBlockTransactionCountByNumberA
Get the number of transactions in a block identified by its number or tag.
Args:
blockNumber (string): Block number as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending').
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing transaction count (e.g., '0x10' for 16 transactions). Returns null if block not found.
Examples:
"Count txs in latest block": { "blockNumber": "latest" }
"Count txs in specific block": { "blockNumber": "0x10d4f", "network": "mainnet" }
Errors:
InvalidParams: When blockNumber format is invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number or one of the string tags (latest, earliest, pending). | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses return format (hex string or null), error types (InvalidParams, InternalError), and network parameter. It does not explicitly state it is a read-only operation, but the behavior is well-documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Errors). Every sentence is informative, no fluff, and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description completely covers parameters, return value, errors, and provides examples. It is sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds value by explaining blockNumber can be hex or tag, clarifying defaults for network, and including examples and error scenarios that go beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the number of transactions in a block identified by its number or tag.', which specifies the action and resource. It distinguishes from siblings like eth_getBlockTransactionCountByHash by explicitly mentioning block number or tag as identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes examples and error information but does not explicitly state when to use this tool versus alternatives (e.g., eth_getBlockTransactionCountByHash). The usage context is implied but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getCodeA
Get the deployed bytecode of a smart contract.
Args:
contractAddress (string): Contract address (20-byte hex, e.g., '0x...').
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string containing the contract bytecode. Returns '0x' if address is not a contract or has no code.
Examples:
"Get USDT contract code": { "contractAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7" }
"Check Sepolia contract": { "contractAddress": "0x...", "network": "sepolia" }
Errors:
InvalidParams: When contractAddress format is invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| contractAddress | Yes | The 20-byte contract address to retrieve the code from. | |
| network | No | The Ethereum network to connect to (e.g., 'mainnet' or 'sepolia'). | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return format (hex string), error conditions, and that it queries Infura API. However, no mention of authentication or rate limits, though read-only nature is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args, Returns, Examples, and Errors sections. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains the return value, covers all parameters, provides examples, and lists possible errors. Sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. Description adds value by explaining contractAddress format, network defaults, and response_format enum with examples, going beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get the deployed bytecode of a smart contract' with a specific verb and resource. Distinguishes from sibling tools like eth_getBalance and eth_getStorageAt by focusing on deploying code retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context with examples and notes on default network and return '0x' for non-contracts, but does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getFeeHistoryA
Get historical gas fee data for EIP-1559 fee estimation.
Args:
blockCount (string): Number of blocks to analyze as hex (e.g., '0x4' for 4 blocks).
newestBlock (string): Latest block to include ('latest', 'pending', or hex block number).
rewardPercentiles (array): Percentiles for priority fee sampling (e.g., [25, 50, 75]).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Object with baseFeePerGas array, gasUsedRatio array, oldestBlock, and reward matrix.
Examples:
"Get last 4 blocks fee history": { "blockCount": "0x4", "newestBlock": "latest", "rewardPercentiles": [25, 50, 75] }
"Query Sepolia fees": { "blockCount": "0xa", "newestBlock": "latest", "rewardPercentiles": [10, 50, 90], "network": "sepolia" }
Errors:
InvalidParams: When blockCount format, newestBlock, or rewardPercentiles are invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockCount | Yes | The number of blocks to check. | |
| newestBlock | Yes | The latest block number or tag (e.g., 'latest'). | |
| rewardPercentiles | Yes | A list of percentiles for gas rewards. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it is a read-only historical query, returns specific fields (baseFeePerGas, gasUsedRatio, etc.), lists possible errors (InvalidParams, InternalError), and mentions the underlying API (Infura). This provides sufficient transparency for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into sections (Args, Returns, Examples, Errors), concise with no wasted words, and front-loaded with the main purpose. Examples provide concrete usage patterns. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameter formats, return structure, examples, and errors. It lacks mention of the response_format parameter (though schema covers it), but otherwise is complete for a read-only tool with no output schema. The examples aid in understanding complex parameters like rewardPercentiles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful details beyond the schema: blockCount requires hex format (e.g., '0x4'), newestBlock can be 'latest', 'pending', or hex, rewardPercentiles is an array of numbers, and network defaults to 'mainnet'. Examples further clarify parameter use. The response_format parameter is not described, but schema already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get historical gas fee data for EIP-1559 fee estimation.' This specifies the action (get), resource (historical gas fee data), and context (for EIP-1559 fee estimation), distinguishing it from siblings like eth_getGasPrice which returns current gas price.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fee estimation, but provides no explicit guidance on when to use this tool versus alternatives (e.g., eth_getGasPrice for current price, other eth_call for data). No when-not-to-use or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getGasPriceA
Get the current gas price in wei for legacy (non-EIP-1559) transactions.
Args:
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Hexadecimal string representing gas price in wei (e.g., '0x3b9aca00' for 1 Gwei).
Examples:
"Get mainnet gas price": {}
"Get Sepolia gas price": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return format (hex string), errors (InternalError), and default network. It does not mention idempotency, rate limits, or authentication, but for a simple read-only getter, the provided details are adequate and add value beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured with clear sections for Args, Returns, Examples, and Errors. Every sentence adds value without redundancy, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and lack of output schema, the description fully covers all needed context: input parameters, return value, error cases, and usage examples. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining both parameters (network and response_format) in plain language, provides defaults, and includes example usage. This goes beyond the schema's minimal descriptions, especially for the response_format parameter which is given context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the current gas price in wei, specifically for legacy (non-EIP-1559) transactions. It distinguishes from siblings like eth_getFeeHistory, which likely handles EIP-1559, and the sibling list includes many eth_get* functions with different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for legacy transactions via the phrase 'for legacy (non-EIP-1559) transactions', providing context on when to use. However, it lacks explicit guidance on alternatives like eth_getFeeHistory for EIP-1559 or when not to use. The examples show how to call with different networks, which aids usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getLogsA
Query event logs emitted by smart contracts with flexible filters. Supports pagination for large result sets.
Args:
fromBlock (string): Start block as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending').
toBlock (string): End block as hex or tag.
address (string, optional): Contract address to filter logs from.
topics (array, optional): Array of 32-byte topic filters for indexed event parameters.
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
limit (integer, optional): Maximum logs to return (1-10000). Defaults to 1000.
offset (integer, optional): Number of logs to skip for pagination. Defaults to 0.
Returns:
Object with 'logs' array and 'pagination' metadata (total, count, offset, limit, has_more, next_offset).
Examples:
"Get all logs in block range": { "fromBlock": "0x10d4f", "toBlock": "0x10d50" }
"Filter by contract and topic": { "fromBlock": "latest", "toBlock": "latest", "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"] }
"Paginate results": { "fromBlock": "0x10d4f", "toBlock": "0x10d50", "limit": 100, "offset": 0 }
Errors:
InvalidParams: When block tags or address format is invalid.
InternalError: When query range is too large or Infura API fails.
| Name | Required | Description | Default |
|---|---|---|---|
| fromBlock | Yes | The starting block number or block identifier. | |
| toBlock | Yes | The ending block number or block identifier. | |
| address | No | The address of the contract to filter logs. | |
| topics | No | An array of topics to filter logs. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| limit | No | Maximum number of logs to return (default: 1000, max: 10000). Use with offset for pagination. | |
| offset | No | Number of logs to skip for pagination (default: 0). | |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It explains that logs are queried with filters, pagination is supported, return format includes logs and pagination metadata, and lists possible errors. It does not explicitly state that the operation is read-only, but that is implicit. Overall, it provides sufficient transparency for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for Args, Returns, Examples, and Errors. The first sentence succinctly states the core purpose. While the description is lengthy, every section adds value and there is no redundancy. It is appropriately detailed for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, pagination, error handling) and the absence of an output schema, the description is remarkably complete. It covers all parameters, return format including pagination metadata, error conditions, and provides multiple examples. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage and the description adds substantial context beyond it. For example, it explains that fromBlock and toBlock accept hex or tags like 'latest', that topics are 32-byte filters, that network defaults to 'mainnet', and provides concrete examples for each parameter. This greatly aids correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: querying event logs from smart contracts with flexible filters. It explicitly includes support for pagination, which distinguishes it from other Ethereum tools that do not return logs, such as eth_call or eth_getTransactionByHash. The description is precise and action-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidelines through examples and parameter explanations, including pagination for large result sets and filtering by address or topics. However, it does not explicitly contrast with sibling tools or state when not to use this tool. The information is present but could be more directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getProtocolVersionA
Returns the current Ethereum protocol version used by the node. Useful for checking client compatibility and supported features.
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Hex-encoded string representing the protocol version number (e.g., '0x41' for version 65)
Examples:
"Get mainnet protocol version": {}
"Get Sepolia protocol version": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable or method not supported
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral clarity burden. It describes the return format (hex-encoded string) and possible errors (InternalError). However, it does not mention rate limits or authentication needs, though for a read-only call this is acceptable. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Errors) and uses concise language. Every sentence adds value without redundancy. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool, the description covers the main use case, but it does not mention that it's a standard Ethereum JSON-RPC method or provide context about when the protocol version might differ from chain ID. Missing explanation of the 'response_format' parameter reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema covers both parameters (100% coverage), the description only discusses the 'network' parameter with examples and default. It completely omits the 'response_format' parameter, which is documented in the schema but not in the description. This leaves a gap for an AI to understand output options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current Ethereum protocol version, specifying the resource and action. It also explains its usefulness for checking client compatibility and supported features, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a general use case (checking compatibility) but does not explicitly guide when to use this tool versus alternatives, nor does it mention when not to use it. The examples help but lack comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getStorageAtA
Read the raw value from a specific storage slot of a contract.
Args:
address (string): Contract address (20-byte hex, e.g., '0x...').
position (string): Storage slot index as hex (e.g., '0x0' for slot 0).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
32-byte hexadecimal string representing the storage value at the given position.
Examples:
"Read slot 0": { "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "position": "0x0" }
"Read mapping slot": { "address": "0x...", "position": "0x1", "network": "sepolia" }
Errors:
InvalidParams: When address or position format is invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The 20-byte storage address. | |
| position | Yes | The integer index of the storage position or a block parameter. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. It correctly identifies the read-only behavior and lists error types. However, it does not mention rate limits, authentication, or what happens if the slot does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Examples, Errors). Each part is purposeful and not overly verbose. Could be slightly more concise but highly effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers tool purpose, parameters, return format, errors, and examples. Missing mention of how to compute storage slots for complex data structures (mappings), but reasonably complete for a read-only storage tool with 4 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds context: hex formats, examples, and return description. The response_format parameter is not mentioned in the description, but the schema covers it. Overall, description adds enough value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads raw values from a contract storage slot, using specific verbs and resource. It distinguishes from siblings like eth_getBalance (balance) or eth_call (execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading storage but provides no explicit when-to-use or alternatives. Missing guidance on when not to use it compared to eth_call or eth_getStorageAt for mapping slots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getTransactionByBlockHashAndIndexA
Get a transaction by its position within a block identified by hash.
Args:
blockHash (string): 32-byte block hash (66 chars with 0x prefix).
index (string): Transaction index position as hex (e.g., '0x0' for first tx).
network (string, optional): Ethereum network to query. Defaults to 'mainnet'.
Returns:
Transaction object with hash, from, to, value, gas, gasPrice, input, nonce, etc. Returns null if not found.
Examples:
"Get first tx in block": { "blockHash": "0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238", "index": "0x0" }
"Get third tx on Sepolia": { "blockHash": "0x...", "index": "0x2", "network": "sepolia" }
Errors:
InvalidParams: When blockHash or index format is invalid.
InternalError: When Infura API is unavailable or returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| blockHash | Yes | The 32-byte hash of the block. | |
| index | Yes | The transaction index position. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions returns null if not found, lists possible errors, and notes that network defaults to mainnet. Missing details on rate limits, authentication, or destructive actions, but adequate for a read-only lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with sections for args, returns, examples, errors. Could be slightly more concise, but every sentence adds value. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and no output schema, the description covers input format, defaults, return structure, null case, error conditions, and provides two examples. No obvious gaps for this straightforward lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds format details (66 chars, 0x prefix) and default value for network, but fails to mention the response_format parameter present in the schema. Partial added value offset by omission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a transaction by its position in a block identified by hash. It distinguishes from sibling tools like eth_getTransactionByHash and eth_getTransactionByBlockNumberAndIndex, which use different lookup methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples and explains the required input structure. Does not explicitly state when not to use or compare to alternatives, but the context and sibling list imply differentiation. Good practical guidance via examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getTransactionByBlockNumberAndIndexA
Retrieves a transaction by its position within a specific block using block number and transaction index.
Args:
blockNumber (string): Block number as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending')
transactionIndex (string): Zero-based position of the transaction in the block as hex (e.g., '0x0')
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Transaction object with hash, from, to, value, gas, gasPrice, input, nonce, blockHash, blockNumber, transactionIndex; null if not found
Examples:
"Get first transaction in latest block": { "blockNumber": "latest", "transactionIndex": "0x0" }
"Get transaction at index 5 in specific block": { "blockNumber": "0x10d4f", "transactionIndex": "0x5" }
Errors:
InvalidParams: When blockNumber or transactionIndex format is invalid
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number or tag (latest, earliest, pending). | |
| transactionIndex | Yes | The transaction index position. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses return values (transaction object or null), lists possible errors, and provides examples. However, it does not explicitly state the operation is read-only or safe, which would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (main description, args, returns, examples, errors). Every sentence is useful and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains return values and errors. Schema coverage is 100% and examples cover typical use cases, making the tool complete for an agent to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining blockNumber as hex or tag, transactionIndex as zero-based hex, and providing examples. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a transaction by its position within a specific block using block number and index, distinguishing it from siblings like eth_getTransactionByHash or eth_getTransactionByBlockHashAndIndex.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes examples showing when to use it (with block number or tag) but does not explicitly state when not to use it or provide alternatives. The sibling list implies alternatives, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getTransactionByHashA
Retrieves detailed transaction information using its unique transaction hash.
Args:
transactionHash (string): 32-byte transaction hash in hex format (e.g., '0xabc123...')
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Transaction object with hash, from, to, value, gas, gasPrice, input, nonce, blockHash, blockNumber, transactionIndex; null if transaction not found or still pending
Examples:
"Get transaction details": { "transactionHash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b" }
"Query on Sepolia testnet": { "transactionHash": "0xabc...", "network": "sepolia" }
Errors:
InvalidParams: When transactionHash is not a valid 32-byte hex string
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| transactionHash | Yes | The 32-byte transaction hash to query. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers return value (transaction object or null), pending/not found behavior, and error conditions (InvalidParams, InternalError). It does not mention rate limits or authentication, but for a read-only query 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, Examples, Errors sections. It is concise but includes necessary details; no extraneous content. Could be slightly tighter by integrating the missing response_format param.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the return object fields, null case, and error scenarios. It is complete for a query tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds format details for transactionHash and network default, but omits describing the 'response_format' parameter present in the schema, which slightly reduces added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieves detailed transaction information using its unique transaction hash', specifying the verb and resource. It distinguishes from sibling tools like eth_getTransactionByBlockHashAndIndex by focusing on hash lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you have a transaction hash) and provides examples, but does not explicitly state when not to use it or mention alternatives. It could be improved by noting that for other lookup methods, use sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getTransactionCountA
Returns the number of transactions sent from an address (nonce). Useful for determining the next nonce for sending transactions.
Args:
address (string): 20-byte Ethereum address in hex format (e.g., '0x742d35Cc6634C0532925a3b844Bc9e7595f...')
tag (string, optional): Block tag - 'latest', 'earliest', or 'pending', defaults to 'latest'
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Hex-encoded integer representing the number of transactions sent from the address
Examples:
"Get current nonce for address": { "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e" }
"Get pending transaction count": { "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e", "tag": "pending" }
Errors:
InvalidParams: When address format is invalid or tag is not a valid block tag
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The Ethereum address to query. | |
| tag | No | The block tag to use for the query. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It details the return value (hex-encoded integer), lists possible errors, and implies a read-only operation. Additional context like rate limits or authentication is absent but not critical for this simple query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Errors). It is concise with no redundant information, and each part serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return format and error conditions. It covers three of four parameters in detail. The missing response_format parameter is a minor gap, but overall completeness is high for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value for address, tag, and network parameters with explanations and examples, but misses the response_format parameter present in the schema. The added examples and defaults justify a score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the number of transactions from an address (nonce) and explains its use for next nonce determination. This is distinct from sibling tools like eth_getBalance or eth_getBlockByNumber, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and states the tool is for getting nonce values. While it doesn't explicitly say when not to use it, the context of sibling tools and the clear purpose make usage guidance adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getTransactionReceiptA
Retrieves the receipt of a mined transaction, including status, gas used, and logs. Only available for transactions that have been included in a block.
Args:
transactionHash (string): 32-byte transaction hash in hex format (e.g., '0xabc123...')
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Receipt object with status (1=success, 0=failure), blockHash, blockNumber, transactionIndex, from, to, contractAddress (if contract creation), cumulativeGasUsed, gasUsed, effectiveGasPrice, logs array, logsBloom; null if transaction pending or not found
Examples:
"Get receipt to check if transaction succeeded": { "transactionHash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b" }
"Get receipt on Sepolia": { "transactionHash": "0xabc...", "network": "sepolia" }
Errors:
InvalidParams: When transactionHash is not a valid 32-byte hex string
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| transactionHash | Yes | The 32-byte hash of the transaction. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: returns null for pending/not found transactions, lists error types (InvalidParams, InternalError), and details the return object structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (Args, Returns, Examples, Errors) and front-loaded with a clear purpose. It is slightly long but every section serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the return object and null case. It covers errors and provides examples, making it complete for a receipt retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by providing format examples for transactionHash (hex) and default for network, though it omits the response_format parameter. Overall, it enhances understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a mined transaction's receipt with status, gas used, and logs. It distinguishes itself from sibling tools like eth_getTransactionByHash by focusing on the receipt of a mined transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that the tool is only for transactions already in a block, and provides examples like checking transaction success. It does not explicitly exclude other contexts, but the usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getUncleByBlockHashAndIndexA
Retrieves an uncle (ommer) block by block hash and uncle index position. Uncles are valid blocks that were not included in the main chain but are referenced by main chain blocks.
Args:
blockHash (string): 32-byte hash of the block containing the uncle (e.g., '0xabc123...')
index (string): Zero-based uncle index position as hex (e.g., '0x0' for first uncle)
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Uncle block object with hash, parentHash, sha3Uncles, miner, stateRoot, number, gasLimit, gasUsed, timestamp, difficulty, nonce; null if not found
Examples:
"Get first uncle in block": { "blockHash": "0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "index": "0x0" }
Errors:
InvalidParams: When blockHash or index format is invalid
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| blockHash | Yes | The 32-byte block hash of the block. | |
| index | Yes | The index of the uncle. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses returns null if not found, lists error types (InvalidParams, InternalError), and explains uncles are ommers. It could mention the read-only nature explicitly, but overall good coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Errors). It is concise with no redundant sentences, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, the description fully explains the return object fields, null case, optional network parameter, and error conditions. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds value by clarifying the hex format for the index parameter with an example and providing a usage example. It enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an uncle block by block hash and uncle index, specifying the resource (uncle block) and action (retrieves). It distinguishes from siblings like eth_getUncleByBlockNumberAndIndex by using different indexing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to get uncles) and provides parameter details, but does not explicitly state when not to use it or compare with alternatives. Sibling tools provide context, but the description lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getUncleByBlockNumberAndIndexA
Retrieves an uncle (ommer) block by block number and uncle index position. Uncles are valid blocks that were not included in the main chain but are referenced by main chain blocks.
Args:
blockNumber (string): Block number as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending')
index (string): Zero-based uncle index position as hex (e.g., '0x0' for first uncle)
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Uncle block object with hash, parentHash, sha3Uncles, miner, stateRoot, number, gasLimit, gasUsed, timestamp, difficulty, nonce; null if not found
Examples:
"Get first uncle in specific block": { "blockNumber": "0x29c", "index": "0x0" }
"Get uncle from latest block": { "blockNumber": "latest", "index": "0x0" }
Errors:
InvalidParams: When blockNumber or index format is invalid
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number in hexadecimal format. | |
| index | Yes | The index of the uncle in hexadecimal format. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description explains return value (null if not found), errors (InvalidParams, InternalError). Lacks readOnly disclosure but is inherently read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with sections (Args, Returns, Examples, Errors), succinct sentences, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers parameters, return object fields, and error cases. No gaps given the tool's simplicity and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant value beyond schema: explains hex format, tag shortcuts, index zero-based meaning, and provides concrete examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves an uncle block by block number and index, distinguishing it from sibling tools like eth_getUncleByBlockHashAndIndex.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples and implies usage context, but doesn't explicitly state when not to use or compare to alternatives. Still clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getUncleCountByBlockHashA
Returns the number of uncle (ommer) blocks in a specific block identified by its hash.
Args:
blockHash (string): 32-byte hash of the block to query (e.g., '0xabc123...')
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Hex-encoded integer representing the number of uncles in the block (e.g., '0x0' for no uncles, '0x2' for two uncles)
Examples:
"Get uncle count for block": { "blockHash": "0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35" }
"Query on Sepolia": { "blockHash": "0xabc...", "network": "sepolia" }
Errors:
InvalidParams: When blockHash is not a valid 32-byte hex string
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| blockHash | Yes | The 32-byte block hash to query. | |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the return format (hex-encoded integer), lists example outputs, and describes possible errors (InvalidParams, InternalError). However, it does not disclose rate limits, authentication requirements, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: Args, Returns, Examples, Errors. It is front-loaded with the core purpose and uses minimal but sufficient text. Every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity of the tool and no output schema, the description fully explains inputs, outputs (including format and examples), and error cases. An agent can correctly invoke the tool based on this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds context to blockHash (example format '0xabc...') and network (defaults to 'mainnet', examples like 'sepolia'). For response_format, it clarifies the difference between 'json' and 'markdown' beyond the enum. This adds meaningful value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Returns the number of uncle (ommer) blocks in a specific block identified by its hash.' It specifies the verb 'returns', the resource 'uncle count', and the required input 'block hash'. It is distinct from siblings like eth_getUncleByBlockHashAndIndex and eth_getUncleCountByBlockNumber.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as eth_getUncleCountByBlockNumber or eth_getUncleByBlockHashAndIndex. It does not mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_getUncleCountByBlockNumberA
Returns the number of uncle (ommer) blocks in a specific block identified by its number or tag.
Args:
blockNumber (string, optional): Block number as hex (e.g., '0x10d4f') or tag ('latest', 'earliest', 'pending'), defaults to 'latest'
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Hex-encoded integer representing the number of uncles in the block (e.g., '0x0' for no uncles, '0x2' for two uncles)
Examples:
"Get uncle count for latest block": {}
"Get uncle count for specific block": { "blockNumber": "0x29c" }
"Query on Sepolia": { "blockNumber": "latest", "network": "sepolia" }
Errors:
InvalidParams: When blockNumber format is invalid
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | No | The block number or tag (latest, earliest, pending) to get the uncle count for. | latest |
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently describes the return format (hex integer), provides examples, and lists possible errors. It does not mention any side effects or authentication needs, but for a read-only query tool, it is adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for Args, Returns, Examples, and Errors. It is moderately concise; each section earns its place. A slight reduction in examples could improve conciseness, but overall it is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers purpose, parameters, return values, and errors. No output schema exists, but the description sufficiently explains the return format. It is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds meaning for 'blockNumber' (hex or tag) and 'network' (examples), but it omits the 'response_format' parameter entirely, which is included in the schema. Thus, it adds some value but not complete coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Returns the number of uncle (ommer) blocks in a specific block identified by its number or tag.' It provides a specific verb and resource, and the sibling tools show a distinct variant for block hash, ensuring no confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes args, defaults, examples, and errors, clearly indicating when to use this tool (e.g., for uncle count by block number/tag). However, it does not explicitly state when not to use it or mention alternative tools like eth_getUncleCountByBlockHash, though the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_isSyncingA
Returns the sync status of the Ethereum node. Useful for determining if the node is fully synced before relying on its data.
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
false if the node is not syncing (fully synced)
Object with startingBlock, currentBlock, and highestBlock (all hex-encoded) if syncing is in progress
Examples:
"Check if mainnet node is synced": {}
"Check Sepolia sync status": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes return values in detail (false when not syncing, object with hex-encoded fields when syncing) and mentions errors. It does not discuss destructive behavior or auth needs, but those are not relevant here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: description, Args, Returns, Examples, Errors. It is concise with no wasted words, and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no output schema. The description explains returns and errors. Missing mention of 'response_format' parameter slightly reduces completeness, as it could help agents understand output formatting options. Otherwise solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description only documents the 'network' parameter in Args and omits 'response_format' entirely. While the schema fully covers both, the description fails to add value for the missing parameter and does not explain output format control.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the sync status of an Ethereum node, using specific verb 'Returns' and resource 'sync status'. It distinguishes from siblings by focusing on sync status, which is unique among the listed eth_ functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions when to use: 'useful for determining if the node is fully synced before relying on its data.' It does not provide explicit exclusions or alternatives, but the context makes it clear this is the only sync-checking tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_getPeerCountA
Returns the number of peers currently connected to the client. Useful for monitoring network connectivity and health.
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
Hex-encoded integer representing the number of connected peers (e.g., '0x19' for 25 peers)
Examples:
"Get mainnet peer count": {}
"Get Sepolia peer count": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses return format (hex-encoded integer), default network, error cases (InternalError), and usage examples. However, it does not explicitly state read-only or non-destructive nature, but context implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concisely structured into clear sections (purpose, args, returns, examples, errors). Each sentence is informative and earns its place, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, the description covers return format, parameter details, examples, and errors. It is sufficiently complete for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds value for the 'network' parameter via examples and default, but does not mention the 'response_format' parameter, which is only defined in the schema. Thus, it partially adds meaning but misses one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the number of connected peers, with a verb 'returns' and specific resource. It differentiates itself from sibling tools like net_getVersion and net_isListening by focusing on peer count, a distinct metric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It only states it's useful for monitoring connectivity, but lacks comparison or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_getVersionA
Returns the current network ID. Useful for identifying which Ethereum network the node is connected to (1=mainnet, 11155111=sepolia, etc.).
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
String representing the network ID (e.g., '1' for mainnet, '11155111' for Sepolia)
Examples:
"Get mainnet network ID": {}
"Verify Sepolia network ID": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses error conditions (InternalError when Infura API unavailable), default behavior (defaults to mainnet), and return format (string). Lacks info on rate limits or idempotency, but is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections (Args, Returns, Examples, Errors). No unnecessary words, front-loaded with purpose. Earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 2 parameters and no output schema, description explains return value (string with examples) and errors. Missing explanation of response_format parameter. Overall fairly complete but could cover response_format and differentiate from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds examples and default for the 'network' parameter but neglects to mention 'response_format' parameter or its enum values. Schema already documents both parameters, so description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the current network ID and explains its purpose (identifying Ethereum network). Includes examples with mainnet and Sepolia, and mentions network IDs. No tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions it's useful for identifying which Ethereum network, but does not explicitly differentiate from sibling tools like eth_chainId or provide when-not-to-use guidance. However, it includes error handling context and examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
net_isListeningA
Returns whether the client is actively listening for network connections. Useful for checking node connectivity status.
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
true if the client is listening for connections
false if the client is not listening
Examples:
"Check if mainnet node is listening": {}
"Check Sepolia node status": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the boolean return, lists an error case (InternalError), and provides examples of network usage. It does not disclose any side effects or rate limits, but for a simple read-only tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear purpose followed by Args, Returns, Examples, and Errors sections. Every sentence provides value, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and minimal parameters, the description fully covers behavior, parameters, examples, and an error case. It is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, so baseline is 3. The description adds examples and default for 'network' but omits the 'response_format' parameter from its Args section. It does not go beyond the schema in meaning for that parameter, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns whether the client is listening for network connections, with a specific verb and resource. It distinguishes itself from sibling tools like net_getPeerCount and eth_isSyncing by focusing on connectivity status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates it is 'useful for checking node connectivity status,' providing clear context. However, it does not explicitly state when not to use it or mention alternatives like net_getPeerCount, which limits guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web3_getClientVersionA
Returns the current Ethereum client version string. Useful for identifying the node software and version being used.
Args:
network (string, optional): Ethereum network to query, defaults to 'mainnet'
Returns:
String containing the client name and version (e.g., 'Geth/v1.10.26-stable/linux-amd64/go1.18.5')
Examples:
"Get mainnet client version": {}
"Get Sepolia client version": { "network": "sepolia" }
Errors:
InternalError: When Infura API is unavailable
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | The Ethereum network to query, e.g., 'mainnet' or 'sepolia'. | mainnet |
| response_format | No | Output format: 'json' for structured data, 'markdown' for human-readable. | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the return type with an example and notes potential InternalError from Infura unavailability. However, it does not explicitly state read-only nature or other behavioral details like rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Errors), front-loaded with the main purpose. Every sentence adds value, and it is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and no annotations, the description is complete: it explains return value, provides examples, covers errors, and lists parameters. It sufficiently enables an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds an Args section for 'network' but does not mention 'response_format' parameter beyond schema. The Returns and Errors sections provide context, but parameter information is not enhanced beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the current Ethereum client version string, specifying its purpose of identifying node software and version. This is distinct from sibling tools that focus on chain data, block info, or network stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating its usefulness for identifying node software, but lacks explicit when-to-use or when-not-to-use guidance. No alternatives or exclusions are mentioned, though the purpose alone suggests it's for client version queries.
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.
29 tool updates
v1.1.0- First observed
eth_call - First observed
eth_chainId - First observed
eth_estimateGas - First observed
eth_getBalance - First observed
eth_getBlockByHash - First observed
eth_getBlockByNumber - First observed
eth_getBlockNumber - First observed
eth_getBlockTransactionCountByHash - First observed
eth_getBlockTransactionCountByNumber - First observed
eth_getCode - First observed
eth_getFeeHistory - First observed
eth_getGasPrice - First observed
eth_getLogs - First observed
eth_getProtocolVersion - First observed
eth_getStorageAt - First observed
eth_getTransactionByBlockHashAndIndex - First observed
eth_getTransactionByBlockNumberAndIndex - First observed
eth_getTransactionByHash - First observed
eth_getTransactionCount - First observed
eth_getTransactionReceipt - First observed
eth_getUncleByBlockHashAndIndex - First observed
eth_getUncleByBlockNumberAndIndex - First observed
eth_getUncleCountByBlockHash - First observed
eth_getUncleCountByBlockNumber - First observed
eth_isSyncing - First observed
net_getPeerCount - First observed
net_getVersion - First observed
net_isListening - First observed
web3_getClientVersion
TDQS
Scored across 29 tools
Every tool has a distinct purpose, covering different Ethereum RPC methods with clear parameters. Even similar tools like block retrieval by hash vs number are clearly differentiated.
Tools consistently use prefix_methodName pattern (eth_getX, net_getY, web3_getZ) with underscores. Minor deviation like eth_chainId and eth_isSyncing not strictly following verb_noun, but overall predictable.
29 tools is on the higher side for a single server, but each covers a distinct Ethereum RPC endpoint. The number is borderline heavy but justified given the comprehensive data query scope.
Covers most common read-only Ethereum data queries (accounts, blocks, transactions, logs, gas, chain info, net info). Missing raw transaction submission, but that fits the read-only nature. Good coverage.
Maintenance
Related MCP Connectors
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.
Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.
Blockchain analytics API for AI agents. Smart Money signals, wallet profiling, token analytics.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceQuery blockchains with plain English — instant, structured, and developer-friendly using Infura APIs131MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to access real-time on-chain crypto analytics, whale tracking, and market metrics through natural language queries. It provides access to over 245 endpoints for comprehensive data analysis of assets like Bitcoin, Ethereum, and stablecoins.7177MIT

Noves MCP Serverofficial
AlicenseBqualityDmaintenanceEnables AI assistants to access and explain blockchain data across 100+ networks using natural language, without requiring authentication.923MIT- AlicenseNot gradedqualityDmaintenanceBrings BlockDAG blockchain data to AI assistants, enabling natural language queries for balances, transactions, tokens, and network stats.MIT