Skip to main content
Glama

EVM MCP Server

License: MIT EVM Networks TypeScript Viem

A comprehensive Model Context Protocol (MCP) server that provides blockchain services across multiple EVM-compatible networks. This server enables AI agents to interact with Ethereum, Optimism, Arbitrum, Base, Polygon, and many other EVM chains with a unified interface.

📋 Contents

Related MCP server: EVM MCP Server

🔭 Overview

The MCP EVM Server leverages the Model Context Protocol to provide blockchain services to AI agents. It supports a wide range of services including:

  • Reading blockchain state (balances, transactions, blocks, etc.)

  • Interacting with smart contracts

  • Transferring tokens (native, ERC20, ERC721, ERC1155)

  • Querying token metadata and balances

  • Chain-specific services across 30+ EVM networks

  • ENS name resolution for all address parameters (use human-readable names like 'vitalik.eth' instead of addresses)

All services are exposed through a consistent interface of MCP tools and resources, making it easy for AI agents to discover and use blockchain functionality. Every tool that accepts Ethereum addresses also supports ENS names, automatically resolving them to addresses behind the scenes.

✨ Features

Blockchain Data Access

  • Multi-chain support for 30+ EVM-compatible networks

  • Chain information including blockNumber, chainId, and RPCs

  • Block data access by number, hash, or latest

  • Transaction details and receipts with decoded logs

  • Address balances for native tokens and all token standards

  • ENS resolution for human-readable Ethereum addresses (use 'vitalik.eth' instead of '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')

Token services

  • ERC20 Tokens

    • Get token metadata (name, symbol, decimals, supply)

    • Check token balances

    • Transfer tokens between addresses

    • Approve spending allowances

  • NFTs (ERC721)

    • Get collection and token metadata

    • Verify token ownership

    • Transfer NFTs between addresses

    • Retrieve token URIs and count holdings

  • Multi-tokens (ERC1155)

    • Get token balances and metadata

    • Transfer tokens with quantity

    • Access token URIs

Smart Contract Interactions

  • Read contract state through view/pure functions

  • Write services with private key signing

  • Contract verification to distinguish from EOAs

  • Event logs retrieval and filtering

Comprehensive Transaction Support

  • Native token transfers across all supported networks

  • Gas estimation for transaction planning

  • Transaction status and receipt information

  • Error handling with descriptive messages

🌐 Supported Networks

Mainnets

  • Ethereum (ETH)

  • Optimism (OP)

  • Arbitrum (ARB)

  • Arbitrum Nova

  • Base

  • Polygon (MATIC)

  • Polygon zkEVM

  • Avalanche (AVAX)

  • Binance Smart Chain (BSC)

  • zkSync Era

  • Linea

  • Celo

  • Gnosis (xDai)

  • Fantom (FTM)

  • Filecoin (FIL)

  • Moonbeam

  • Moonriver

  • Cronos

  • Scroll

  • Mantle

  • Manta

  • Blast

  • Fraxtal

  • Mode

  • Metis

  • Kroma

  • Zora

  • Aurora

  • Canto

Testnets

  • Sepolia

  • Optimism Sepolia

  • Arbitrum Sepolia

  • Base Sepolia

  • Polygon Amoy

  • Avalanche Fuji

  • BSC Testnet

  • zkSync Sepolia

  • Linea Sepolia

  • Scroll Sepolia

  • Mantle Sepolia

  • Manta Sepolia

  • Blast Sepolia

  • Fraxtal Testnet

  • Mode Testnet

  • Metis Sepolia

  • Kroma Sepolia

  • Zora Sepolia

  • Celo Alfajores

  • Goerli

  • Holesky

🛠️ Prerequisites

  • Bun 1.0.0 or higher

  • Node.js 18.0.0 or higher (if not using Bun)

📦 Installation

# Clone the repository
git clone https://github.com/yourusername/mcp-evm-server.git
cd mcp-evm-server

# Install dependencies with Bun
bun install

# Or with npm
npm install

⚙️ Server Configuration

The server uses the following default configuration:

  • Default Chain ID: 1 (Ethereum Mainnet)

  • Server Port: 3001

  • Server Host: 0.0.0.0 (accessible from any network interface)

These values are hardcoded in the application. If you need to modify them, you can edit the following files:

  • For chain configuration: src/core/chains.ts

  • For server configuration: src/server/http-server.ts

🚀 Usage

Using npx (No Installation Required)

You can run the MCP EVM Server directly without installation using npx:

# Run the server in stdio mode (for CLI tools)
npx @mcpdotdirect/evm-mcp-server

# Run the server in HTTP mode (for web applications)
npx @mcpdotdirect/evm-mcp-server --http

Running the Server Locally

Start the server using stdio (for embedding in CLI tools):

# Start the stdio server
bun start

# Development mode with auto-reload
bun dev

Or start the HTTP server with SSE for web applications:

# Start the HTTP server
bun start:http

# Development mode with auto-reload
bun dev:http

Connecting to the Server

Connect to this MCP server using any MCP-compatible client. For testing and debugging, you can use the MCP Inspector.

Connecting from Cursor

To connect to the MCP server from Cursor:

  1. Open Cursor and go to Settings (gear icon in the bottom left)

  2. Click on "Features" in the left sidebar

  3. Scroll down to "MCP Servers" section

  4. Click "Add new MCP server"

  5. Enter the following details:

    • Server name: evm-mcp-server

    • Type: command

    • Command: npx @mcpdotdirect/evm-mcp-server

  6. Click "Save"

Once connected, you can use the MCP server's capabilities directly within Cursor. The server will appear in the MCP Servers list and can be enabled/disabled as needed.

Using mcp.json with Cursor

For a more portable configuration that you can share with your team or use across projects, you can create an .cursor/mcp.json file in your project's root directory:

{
  "mcpServers": {
    "evm-mcp-server": {
      "command": "npx",
      "args": ["-y", "@mcpdotdirect/evm-mcp-server"]
    },
    "evm-mcp-http": {
      "command": "npx",
      "args": ["-y", "@mcpdotdirect/evm-mcp-server", "--http"]
    }
  }
}

Place this file in your project's .cursor directory (create it if it doesn't exist), and Cursor will automatically detect and use these MCP server configurations when working in that project. This approach makes it easy to:

  1. Share MCP configurations with your team

  2. Version control your MCP setup

  3. Use different server configurations for different projects

Example: HTTP Mode with SSE

If you're developing a web application and want to connect to the HTTP server with Server-Sent Events (SSE), you can use this configuration:

{
  "mcpServers": {
    "evm-mcp-sse": {
      "url": "http://localhost:3001/sse"
    }
  }
}

This connects directly to the HTTP server's SSE endpoint, which is useful for:

  • Web applications that need to connect to the MCP server from the browser

  • Environments where running local commands isn't ideal

  • Sharing a single MCP server instance among multiple users or applications

To use this configuration:

  1. Create a .cursor directory in your project root if it doesn't exist

  2. Save the above JSON as mcp.json in the .cursor directory

  3. Restart Cursor or open your project

  4. Cursor will detect the configuration and offer to enable the server(s)

Example: Using the MCP Server in Cursor

After configuring the MCP server with mcp.json, you can easily use it in Cursor. Here's an example workflow:

  1. Create a new JavaScript/TypeScript file in your project:

// blockchain-example.js
async function main() {
  try {
    // Get ETH balance for an address using ENS
    console.log("Getting ETH balance for vitalik.eth...");

    // When using with Cursor, you can simply ask Cursor to:
    // "Check the ETH balance of vitalik.eth on mainnet"
    // Or "Transfer 0.1 ETH from my wallet to vitalik.eth"

    // Cursor will use the MCP server to execute these operations
    // without requiring any additional code from you

    // This is the power of the MCP integration - your AI assistant
    // can directly interact with blockchain data and operations
  } catch (error) {
    console.error("Error:", error.message);
  }
}

main();
  1. With the file open in Cursor, you can ask Cursor to:

    • "Check the current ETH balance of vitalik.eth"

    • "Look up the price of USDC on Ethereum"

    • "Show me the latest block on Optimism"

    • "Check if 0x1234... is a contract address"

  2. Cursor will use the MCP server to execute these operations and return the results directly in your conversation.

The MCP server handles all the blockchain communication while allowing Cursor to understand and execute blockchain-related tasks through natural language.

Connecting using Claude CLI

If you're using Claude CLI, you can connect to the MCP server with just two commands:

# Add the MCP server
claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server

# Start Claude with the MCP server enabled
claude

Example: Getting a Token Balance with ENS

// Example of using the MCP client to check a token balance using ENS
const mcp = new McpClient("http://localhost:3000");

const result = await mcp.invokeTool("get-token-balance", {
  tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Ethereum
  ownerAddress: "vitalik.eth", // ENS name instead of address
  network: "ethereum",
});

console.log(result);
// {
//   tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
//   owner: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
//   network: "ethereum",
//   raw: "1000000000",
//   formatted: "1000",
//   symbol: "USDC",
//   decimals: 6
// }

Example: Resolving an ENS Name

// Example of using the MCP client to resolve an ENS name to an address
const mcp = new McpClient("http://localhost:3000");

const result = await mcp.invokeTool("resolve-ens", {
  ensName: "vitalik.eth",
  network: "ethereum",
});

console.log(result);
// {
//   ensName: "vitalik.eth",
//   normalizedName: "vitalik.eth",
//   resolvedAddress: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
//   network: "ethereum"
// }

📚 API Reference

Tools

The server provides the following MCP tools for agents. All tools that accept address parameters support both Ethereum addresses and ENS names.

Token services

Tool Name

Description

Key Parameters

get-token-info

Get ERC20 token metadata

tokenAddress (address/ENS), network

get-token-balance

Check ERC20 token balance

tokenAddress (address/ENS), ownerAddress (address/ENS), network

transfer-token

Transfer ERC20 tokens

privateKey, tokenAddress (address/ENS), toAddress (address/ENS), amount, network

approve-token-spending

Approve token allowances

privateKey, tokenAddress (address/ENS), spenderAddress (address/ENS), amount, network

get-nft-info

Get NFT metadata

tokenAddress (address/ENS), tokenId, network

check-nft-ownership

Verify NFT ownership

tokenAddress (address/ENS), tokenId, ownerAddress (address/ENS), network

transfer-nft

Transfer an NFT

privateKey, tokenAddress (address/ENS), tokenId, toAddress (address/ENS), network

get-nft-balance

Count NFTs owned

tokenAddress (address/ENS), ownerAddress (address/ENS), network

get-erc1155-token-uri

Get ERC1155 metadata

tokenAddress (address/ENS), tokenId, network

get-erc1155-balance

Check ERC1155 balance

tokenAddress (address/ENS), tokenId, ownerAddress (address/ENS), network

transfer-erc1155

Transfer ERC1155 tokens

privateKey, tokenAddress (address/ENS), tokenId, amount, toAddress (address/ENS), network

Blockchain services

Tool Name

Description

Key Parameters

get-chain-info

Get network information

network

get-balance

Get native token balance

address (address/ENS), network

transfer-eth

Send native tokens

privateKey, to (address/ENS), amount, network

get-transaction

Get transaction details

txHash, network

read-contract

Read smart contract state

contractAddress (address/ENS), abi, functionName, args, network

write-contract

Write to smart contract

contractAddress (address/ENS), abi, functionName, args, privateKey, network

is-contract

Check if address is a contract

address (address/ENS), network

resolve-ens

Resolve ENS name to address

ensName, network

Resources

The server exposes blockchain data through the following MCP resource URIs. All resource URIs that accept addresses also support ENS names, which are automatically resolved to addresses.

Blockchain Resources

Resource URI Pattern

Description

evm://{network}/chain

Chain information for a specific network

evm://chain

Ethereum mainnet chain information

evm://{network}/block/{blockNumber}

Block data by number

evm://{network}/block/latest

Latest block data

evm://{network}/address/{address}/balance

Native token balance

evm://{network}/tx/{txHash}

Transaction details

evm://{network}/tx/{txHash}/receipt

Transaction receipt with logs

Token Resources

Resource URI Pattern

Description

evm://{network}/token/{tokenAddress}

ERC20 token information

evm://{network}/token/{tokenAddress}/balanceOf/{address}

ERC20 token balance

evm://{network}/nft/{tokenAddress}/{tokenId}

NFT (ERC721) token information

evm://{network}/nft/{tokenAddress}/{tokenId}/isOwnedBy/{address}

NFT ownership verification

evm://{network}/erc1155/{tokenAddress}/{tokenId}/uri

ERC1155 token URI

evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address}

ERC1155 token balance

🔒 Security Considerations

  • Private keys are used only for transaction signing and are never stored by the server

  • Consider implementing additional authentication mechanisms for production use

  • Use HTTPS for the HTTP server in production environments

  • Implement rate limiting to prevent abuse

  • For high-value services, consider adding confirmation steps

📁 Project Structure

mcp-evm-server/
├── src/
│   ├── index.ts                # Main stdio server entry point
│   ├── server/                 # Server-related files
│   │   ├── http-server.ts      # HTTP server with SSE
│   │   └── server.ts           # General server setup
│   ├── core/
│   │   ├── chains.ts           # Chain definitions and utilities
│   │   ├── resources.ts        # MCP resources implementation
│   │   ├── tools.ts            # MCP tools implementation
│   │   ├── prompts.ts          # MCP prompts implementation
│   │   └── services/           # Core blockchain services
│   │       ├── index.ts        # Operation exports
│   │       ├── balance.ts      # Balance services
│   │       ├── transfer.ts     # Token transfer services
│   │       ├── utils.ts        # Utility functions
│   │       ├── tokens.ts       # Token metadata services
│   │       ├── contracts.ts    # Contract interactions
│   │       ├── transactions.ts # Transaction services
│   │       └── blocks.ts       # Block services
│   │       └── clients.ts      # RPC client utilities
├── package.json
├── tsconfig.json
└── README.md

🛠️ Development

To modify or extend the server:

  1. Add new services in the appropriate file under src/core/services/

  2. Register new tools in src/core/tools.ts

  3. Register new resources in src/core/resources.ts

  4. Add new network support in src/core/chains.ts

  5. To change server configuration, edit the hardcoded values in src/server/http-server.ts

📄 License

This project is licensed under the terms of the MIT License.

Available Tools

25 tools
approve_token_spendingA

Approve a spender (contract) to spend tokens on your behalf. Required before interacting with DEXes, lending protocols, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenAddressYesThe ERC20 token contract address
spenderAddressYesThe address that will be allowed to spend tokens (usually a contract)
amountYesAmount to approve (in token units). Use '0' to revoke approval.
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.2/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate this is a non-readOnly, non-destructive, non-idempotent operation, the description clarifies that this is a prerequisite for DeFi interactions and mentions the ability to revoke approval (using '0' amount). It doesn't cover rate limits or authentication needs, but provides practical deployment context that annotations lack.

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

Conciseness5/5

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

The description is perfectly concise with two sentences that each serve distinct purposes: the first states the core function, the second provides usage context. There's no wasted language, and the most critical information (what the tool does) appears first.

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

Completeness4/5

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

For a tool with good annotations and complete schema coverage but no output schema, the description provides adequate context about the tool's purpose and usage. It could be more complete by mentioning what happens after approval (e.g., transaction submission, gas costs, or typical next steps), but covers the essential why and when of using this tool effectively.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already documents all parameters thoroughly. The description doesn't add significant parameter semantics beyond what's in the schema, though it does reinforce the purpose of the 'amount' parameter by mentioning revocation capability. This meets the baseline expectation when schema coverage is complete.

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

Purpose5/5

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

The description clearly states the specific action ('Approve a spender to spend tokens on your behalf') and identifies the resource (tokens). It distinguishes this from sibling tools like 'transfer_erc20' or 'write_contract' by focusing specifically on token spending authorization rather than transfers or general contract interactions.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Required before interacting with DEXes, lending protocols, etc.'), giving practical examples. However, it doesn't explicitly state when NOT to use it or mention specific alternatives among the sibling tools, such as using 'get_allowance' to check existing approvals first.

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

get_allowanceA
Read-onlyIdempotent

Check the allowance granted to a spender for a token. This tells you how much of a token an address can spend on your behalf.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenAddressYesThe ERC20 token contract address
spenderAddressYesThe address allowed to spend the token (usually a contract address)
ownerAddressNoThe owner address (defaults to the configured wallet)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, idempotent, and open-world behavior, so the description adds minimal value beyond reinforcing the query nature. It does not disclose additional traits like rate limits, authentication needs, or response format details.

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

Conciseness5/5

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

The description is two concise sentences with zero waste, front-loading the core purpose and efficiently explaining the utility without redundancy or unnecessary details.

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

Completeness4/5

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

Given the rich annotations and full schema coverage, the description is mostly complete for a read-only query tool. However, the lack of an output schema means it could benefit from hinting at return values, such as allowance amount or units.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no extra meaning beyond implying the tool checks delegated spending, which aligns with but does not expand upon the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states the specific action ('Check the allowance') and resource ('granted to a spender for a token'), distinguishing it from siblings like get_balance or get_token_balance by focusing on delegated spending permissions rather than ownership balances.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('how much of a token an address can spend on your behalf'), but does not explicitly mention when not to use it or name specific alternatives among siblings, such as get_balance for ownership checks.

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

get_balanceA
Read-onlyIdempotent

Get the native token balance (ETH, MATIC, etc.) for an address

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesThe wallet address or ENS name
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and idempotency. The description adds no additional behavioral context (e.g., rate limits, auth needs, or return format), but it does not contradict annotations.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence contributes to clarifying the tool's function.

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

Completeness4/5

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

Given the tool's low complexity, rich annotations, and 100% schema coverage, the description is mostly complete. However, with no output schema, it could benefit from mentioning the return value format (e.g., balance in wei or ether), but this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, with clear parameter descriptions in the schema. The description adds no extra parameter details beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Get') and resource ('native token balance for an address'), distinguishing it from siblings like get_token_balance (ERC20 tokens) or get_erc1155_balance (NFTs). It explicitly mentions the token types (ETH, MATIC, etc.) to clarify scope.

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

Usage Guidelines4/5

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

The description implies usage context by specifying 'native token balance' and listing examples (ETH, MATIC), which helps differentiate it from get_token_balance for ERC20 tokens. However, it does not explicitly state when not to use it or mention alternatives like get_erc1155_balance for NFTs.

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

get_blockB
Read-onlyIdempotent

Get block details by block number or hash

ParametersJSON Schema
NameRequiredDescriptionDefault
blockIdentifierYesBlock number (as string) or block hash
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds the specific lookup mechanism ('by block number or hash') which provides useful context beyond annotations, but doesn't describe rate limits, authentication needs, or what 'block details' actually includes.

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

Conciseness5/5

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

The description is a single, efficient sentence that communicates the core functionality without any wasted words. It's appropriately sized for a simple lookup tool and front-loads the essential information.

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

Completeness3/5

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

For a read-only lookup tool with good annotations and full schema coverage, the description is minimally adequate. However, without an output schema, the description doesn't explain what 'block details' includes (transactions, timestamps, gas used, etc.), leaving the agent uncertain about the return format.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters well-documented in the schema. The description mentions 'block number or hash' which aligns with blockIdentifier, and implies network selection, but adds no additional semantic context beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('block details'), specifying it works 'by block number or hash'. It distinguishes from sibling 'get_latest_block' by requiring a specific identifier, but doesn't explicitly mention this distinction in the description text itself.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_latest_block' or 'get_transaction'. It doesn't mention prerequisites, error conditions, or typical use cases for retrieving block details versus other blockchain data.

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

get_chain_infoA
Read-onlyIdempotent

Get information about an EVM network: chain ID, current block number, and RPC endpoint

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base') or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover read-only, open-world, idempotent, and non-destructive traits, so the description doesn't need to repeat these. It adds value by specifying the exact information returned (chain ID, block number, RPC endpoint), which isn't in annotations, providing useful context for the agent about output content.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the purpose and lists key outputs. Every word contributes essential information without redundancy, making it highly concise and well-structured for quick understanding.

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

Completeness4/5

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

Given the tool's low complexity (1 parameter, no output schema), rich annotations, and clear purpose, the description is mostly complete. It could slightly improve by mentioning the default network more explicitly, but it adequately covers the tool's function and output scope for the agent's needs.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'network' well-documented in the schema. The description doesn't add further parameter details beyond what's in the schema, so it meets the baseline of 3 for high schema coverage without extra semantic value.

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

Purpose5/5

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

The description clearly states the specific action ('Get information about') and resource ('an EVM network'), listing the exact data returned (chain ID, current block number, RPC endpoint). It distinguishes from siblings like 'get_supported_networks' (which lists networks) and 'get_block' (which gets block details).

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

Usage Guidelines4/5

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

The description implies usage for retrieving network metadata, with context from the parameter description suggesting it's for querying specific networks. However, it doesn't explicitly state when to use this versus alternatives like 'get_supported_networks' for listing available networks or 'get_block' for detailed block data, though the purpose differentiation helps.

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

get_contract_abiA
Read-onlyIdempotent

Fetch a contract's full ABI from Etherscan/block explorers. Use this to understand verified contracts before interacting. Requires ETHERSCAN_API_KEY. Supports 30+ EVM networks. Works best with verified contracts on block explorers.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractAddressYesThe contract address (0x...)
networkNoNetwork name or chain ID. Defaults to ethereum. Supported: ethereum, polygon, arbitrum, optimism, base, avalanche, gnosis, fantom, bsc, celo, scroll, linea, zksync, manta, blast, and testnets (sepolia, mumbai, arbitrum-sepolia, optimism-sepolia, base-sepolia, avalanche-fuji)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds valuable context beyond annotations: the API key requirement, network support (30+ EVM networks), and the verification constraint. No contradiction with annotations.

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

Conciseness5/5

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

Four concise sentences, each earning its place: purpose, usage context, prerequisites, and scope. Front-loaded with the core action, no wasted words, and structured logically from what to why to constraints.

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

Completeness4/5

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

For a read-only tool with good annotations and full schema coverage, the description provides excellent contextual completeness: purpose, usage guidelines, prerequisites, and scope. The only minor gap is lack of output details (no output schema), but the description implies ABI return, which is reasonable for this tool.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters well-documented in the schema. The description doesn't add specific parameter semantics beyond what the schema provides, but it reinforces the contractAddress focus and network flexibility. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the verb ('fetch') and resource ('contract's full ABI'), specifies the source ('from Etherscan/block explorers'), and distinguishes it from siblings by focusing on ABI retrieval rather than balances, transactions, or contract interactions. It's specific and unambiguous.

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

Usage Guidelines5/5

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

Explicitly states when to use ('to understand verified contracts before interacting') and provides context about prerequisites ('Requires ETHERSCAN_API_KEY') and limitations ('Works best with verified contracts on block explorers'). It clearly differentiates this read-only tool from write operations like write_contract.

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

get_erc1155_balanceB
Read-onlyIdempotent

Get ERC1155 token balance for an address

ParametersJSON Schema
NameRequiredDescriptionDefault
contractAddressYesThe ERC1155 contract address
tokenIdYesThe token ID
addressYesThe owner address or ENS name
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations cover key behavioral traits: readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, indicating a safe, repeatable query. The description adds no behavioral context beyond this, such as rate limits, error conditions, or return format details. However, it doesn't contradict annotations, so it meets the lower bar with annotations present.

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

Conciseness5/5

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

The description is a single, direct sentence with no wasted words, front-loading the core purpose ('Get ERC1155 token balance for an address'). It efficiently communicates the essential action without redundancy or unnecessary elaboration, 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.

Completeness3/5

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

For a read-only query tool with rich annotations (readOnlyHint, idempotentHint) and full schema coverage, the description is minimally adequate. However, without an output schema, it doesn't explain return values (e.g., balance format, error responses), and it lacks usage context compared to siblings. This leaves gaps in fully guiding the agent.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for all parameters (e.g., contractAddress, tokenId, address, network). The description adds no additional semantic context beyond the schema, such as explaining ERC1155-specific nuances or format requirements. Given the high schema coverage, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('ERC1155 token balance for an address'), making the purpose immediately understandable. It distinguishes from siblings like 'get_balance' (likely for native tokens) and 'get_token_balance' (likely for ERC20 tokens) by specifying ERC1155, though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_balance' or 'get_token_balance'. It doesn't mention prerequisites, such as needing a valid contract address or network, or specify use cases like checking NFT holdings. This leaves the agent to infer usage from the tool name alone.

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

get_gas_priceA
Read-only

Get current gas prices (base fee, standard, and fast) for a network

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds useful context by specifying the exact gas price types returned (base fee, standard, fast), which isn't in annotations. No contradictions with annotations exist.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose with no wasted words. Every element (verb, resource, data specifics, target) earns its place, making it highly concise and well-structured.

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

Completeness4/5

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

Given the tool's low complexity (1 optional parameter), rich annotations covering safety and scope, and no output schema, the description is mostly complete. It specifies the gas price types returned, but could benefit from mentioning default behavior (e.g., network defaults to Ethereum mainnet, as noted in schema) or response format.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'network' fully documented in the schema. The description adds no additional parameter details beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without extra value.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'current gas prices', specifying the exact data returned (base fee, standard, and fast) and the target (for a network). It distinguishes from siblings like get_block or get_chain_info by focusing specifically on gas price metrics.

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

Usage Guidelines3/5

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

The description implies usage when gas prices are needed for a network, but provides no explicit guidance on when to use this tool versus alternatives (e.g., no mention of sibling tools like get_chain_info that might include gas data). It lacks when-not-to-use scenarios or prerequisites.

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

get_latest_blockB
Read-only

Get the latest block from the network

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the agent knows this is a safe, read-only operation that may query external data. The description adds no behavioral context beyond what annotations provide - no information about rate limits, network availability, or response format.

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

Conciseness5/5

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

The description is maximally concise - a single clear sentence that states exactly what the tool does with zero wasted words. It's perfectly front-loaded with the core functionality.

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

Completeness3/5

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

For a simple read operation with good annotations and full schema coverage, the description is minimally adequate. However, without an output schema, the description doesn't explain what 'latest block' data will be returned (block number, timestamp, transactions, etc.), leaving a gap in understanding the tool's complete behavior.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already fully documents the single optional 'network' parameter. The description adds no parameter information beyond what's in the schema, so it meets but doesn't exceed the baseline expectation.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('latest block from the network'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'get_block', which likely retrieves specific blocks by number/hash rather than the latest one.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_block' and 'get_chain_info' available, there's no indication of when this specific 'latest block' retrieval is preferred over other block-related queries.

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

get_nft_infoA
Read-onlyIdempotent

Get information about an ERC721 NFT including metadata URI

ParametersJSON Schema
NameRequiredDescriptionDefault
contractAddressYesThe NFT contract address
tokenIdYesThe NFT token ID
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds value by specifying the scope ('ERC721 NFT' and 'metadata URI'), which isn't in annotations, but doesn't detail rate limits, auth needs, or response format. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the purpose without unnecessary words. It earns its place by clearly stating what the tool does in minimal terms.

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

Completeness4/5

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

Given the tool's moderate complexity (3 parameters, 2 required), rich annotations covering safety and behavior, and 100% schema coverage, the description is mostly complete. However, without an output schema, it could benefit from hinting at return values like metadata structure, but the annotations and schema provide sufficient context for a read-only query.

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

Parameters3/5

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

Schema description coverage is 100%, with clear parameter descriptions in the schema. The description mentions 'ERC721 NFT' and 'metadata URI', which adds context about the resource but doesn't provide additional syntax or format details beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'information about an ERC721 NFT including metadata URI', which is specific and distinguishes it from sibling tools like get_balance, get_contract_abi, or get_erc1155_balance that target different resources or data types.

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

Usage Guidelines3/5

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

The description implies usage for retrieving NFT metadata but provides no explicit guidance on when to use this tool versus alternatives like read_contract for custom queries or get_erc1155_balance for other token standards. It lacks when-not scenarios or prerequisites.

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

get_supported_networksA
Read-onlyIdempotent

Get a list of all supported EVM networks

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds context by specifying it returns 'all supported' networks, which clarifies the scope beyond what annotations indicate, though it doesn't detail output format or 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.

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose with no wasted words. It is front-loaded and appropriately sized for a simple tool, making it easy to understand quickly.

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

Completeness4/5

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

Given the tool's simplicity (0 parameters, no output schema) and rich annotations, the description is complete enough for basic use. It specifies what is retrieved ('all supported EVM networks'), but could benefit from mentioning the return format (e.g., list of network names or IDs) to enhance clarity, though annotations help cover behavioral aspects.

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

Parameters4/5

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

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description does not need to add parameter details, and it appropriately focuses on the tool's purpose without redundancy, earning a baseline score for zero-parameter tools.

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

Purpose5/5

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

The description 'Get a list of all supported EVM networks' clearly states the action ('Get a list') and resource ('all supported EVM networks'). It distinguishes from siblings like get_chain_info or get_block by specifying the scope is about network support rather than chain metadata or block data.

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

Usage Guidelines3/5

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

The description implies usage when needing to know which EVM networks are supported, but does not explicitly state when to use this tool versus alternatives like get_chain_info or provide exclusions. It offers basic context but lacks detailed guidance on specific scenarios or prerequisites.

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

get_token_balanceA
Read-onlyIdempotent

Get the ERC20 token balance for an address

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesThe wallet address or ENS name
tokenAddressYesThe ERC20 token contract address
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds no further behavioral context (e.g., rate limits, authentication needs, or return format), but it does not contradict annotations, so it meets the lower bar with annotations present.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness4/5

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

Given the tool's low complexity, rich annotations (covering safety and idempotency), and full schema coverage, the description is mostly complete. However, the lack of an output schema means the return value (e.g., balance format) is undocumented, leaving a minor gap in completeness.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for address, tokenAddress, and network parameters. The description adds no additional meaning beyond the schema (e.g., format examples or edge cases), so it meets the baseline of 3 where the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Get') and resource ('ERC20 token balance for an address'), distinguishing it from siblings like get_balance (likely for native tokens) or get_erc1155_balance (for different token standards). It precisely identifies the tool's function without ambiguity.

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

Usage Guidelines3/5

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

The description implies usage for ERC20 token balances, but does not explicitly state when to use this tool versus alternatives like get_balance (for native tokens) or get_allowance (for spending approvals). No guidance on prerequisites or exclusions is provided, leaving the context somewhat inferred.

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

get_transactionB
Read-onlyIdempotent

Get transaction details by transaction hash

ParametersJSON Schema
NameRequiredDescriptionDefault
txHashYesTransaction hash (0x...)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already cover key behavioral traits (readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true), so the description doesn't need to repeat these. It adds minimal context by specifying the lookup mechanism ('by transaction hash'), but doesn't elaborate on rate limits, error handling, or response format, which could be helpful given no output schema.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence ('Get transaction details by transaction hash') contributes directly to understanding the tool's function, making it optimally concise.

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

Completeness3/5

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

Given the annotations provide safety and idempotency info, and the schema fully covers parameters, the description is adequate for a read-only lookup tool. However, with no output schema and multiple similar sibling tools (e.g., get_transaction_receipt), it could benefit from more context about return values or differentiation to be fully complete.

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

Parameters3/5

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

With 100% schema description coverage, the input schema fully documents both parameters (txHash and network). The description mentions 'by transaction hash' which aligns with the txHash parameter but adds no additional semantic meaning beyond what the schema provides, meeting the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('Get transaction details') and resource ('by transaction hash'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this from sibling tools like 'get_transaction_receipt' or 'get_block', which would require a more specific distinction to earn a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_transaction_receipt' or 'get_block' from the sibling list. It lacks context about prerequisites, typical use cases, or exclusions, leaving the agent to infer usage based on the name alone.

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

get_transaction_receiptA
Read-onlyIdempotent

Get transaction receipt (confirmation status, gas used, logs). Use this to check if a transaction has been confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
txHashYesTransaction hash (0x...)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable context beyond what annotations provide. While annotations indicate read-only, open-world, idempotent, and non-destructive behavior, the description clarifies the specific purpose ('check if a transaction has been confirmed') and what data is returned ('confirmation status, gas used, logs'). This helps the agent understand the tool's functional scope.

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

Conciseness5/5

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

The description is perfectly concise with two sentences that each serve distinct purposes: the first defines what the tool does, and the second provides usage guidance. There's no wasted language, and the most important information is front-loaded.

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

Completeness4/5

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

Given the comprehensive annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint) and full parameter documentation in the schema, the description provides adequate context. However, without an output schema, the description could benefit from more detail about the return format, though the mention of specific data elements ('confirmation status, gas used, logs') partially addresses this.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already fully documents both parameters (txHash and network). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline expectation without providing additional semantic context.

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

Purpose5/5

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

The description clearly states the specific action ('Get transaction receipt') and resource ('transaction'), with explicit details about what information is retrieved ('confirmation status, gas used, logs'). It distinguishes from sibling tools like 'get_transaction' by focusing on receipt-specific data rather than transaction details.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Use this to check if a transaction has been confirmed.' This clearly differentiates it from alternatives like 'get_transaction' (which might show pending transactions) and 'wait_for_transaction' (which actively waits for confirmation).

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

get_wallet_addressA
Read-onlyIdempotent

Get the address of the configured wallet. Use this to verify which wallet is active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate this is a read-only, non-destructive, idempotent operation. The description adds useful context by specifying that it retrieves the 'configured' wallet address, implying it returns the currently active wallet without modification. It doesn't contradict annotations but provides additional behavioral insight.

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

Conciseness5/5

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

The description is two concise sentences that are front-loaded with the core purpose and followed by usage guidance. Every word earns its place without redundancy, making it highly efficient and easy to understand.

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

Completeness4/5

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

For a zero-parameter tool with rich annotations (read-only, non-destructive, idempotent) and no output schema, the description is complete enough. It clearly states what the tool does and when to use it. A minor deduction because it doesn't specify the return format (e.g., string address), but annotations cover safety aspects adequately.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 100%. The description doesn't need to explain parameters, but it implicitly clarifies that no inputs are required to get the configured wallet address. This aligns perfectly with the schema, earning a baseline score with slight bonus for contextual clarity.

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

Purpose5/5

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

The description clearly states the specific action ('Get the address') and resource ('configured wallet'), distinguishing it from sibling tools that perform different operations like transfers, approvals, or balance checks. It precisely defines what the tool does without ambiguity.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'to verify which wallet is active.' This provides clear context for its purpose, distinguishing it from alternatives like get_balance or get_transaction that serve different verification or information needs.

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

lookup_ens_addressA
Read-onlyIdempotent

Lookup the ENS name for an Ethereum address (reverse resolution)

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesEthereum address to lookup
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds no behavioral context beyond what annotations declare (e.g., no rate limits, error conditions, or performance traits). With annotations doing the heavy lifting, the description meets the baseline but adds minimal extra value.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Lookup the ENS name for an Ethereum address') and adds clarifying context ('reverse resolution') without redundancy. Every word earns its place, making it optimally concise and well-structured.

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

Completeness4/5

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

Given the tool's low complexity (simple lookup), rich annotations (covering safety and idempotency), and high schema coverage, the description is mostly complete. However, the lack of an output schema means the description could benefit from hinting at return values (e.g., ENS name or null). It's adequate but has a minor gap in output context.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters ('address' and 'network') fully documented in the schema. The description does not add any parameter-specific details beyond what the schema provides (e.g., no format examples for 'address' or default values beyond schema's note). Baseline score of 3 is appropriate when schema coverage is high.

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

Purpose5/5

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

The description clearly states the specific action ('Lookup the ENS name') and resource ('for an Ethereum address'), with the parenthetical 'reverse resolution' distinguishing it from the sibling 'resolve_ens_name' tool (which presumably does forward resolution from name to address). This precise verb+resource pairing and explicit sibling differentiation earns the highest score.

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

Usage Guidelines4/5

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

The description implies usage context through 'reverse resolution,' which helps differentiate from 'resolve_ens_name.' However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., when you have an address vs. a name) or any prerequisites. The context is clear but not comprehensive enough for a perfect score.

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

multicallA
Read-onlyIdempotent

Batch multiple contract read calls into a single RPC request. Significantly reduces latency and RPC usage when querying multiple functions. Uses the Multicall3 contract deployed on all major networks. Perfect for portfolio analysis, price aggregation, and querying multiple contract states efficiently.

ParametersJSON Schema
NameRequiredDescriptionDefault
callsYesArray of contract calls to batch together
allowFailureNoIf true, returns partial results even if some calls fail. Defaults to true.
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explains the performance benefit ('reduces latency and RPC usage'), mentions the underlying implementation ('Uses the Multicall3 contract'), and notes network compatibility ('deployed on all major networks'). While annotations cover safety (readOnlyHint, idempotentHint), the description provides practical implementation details that help the agent understand when this optimization is appropriate.

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

Conciseness5/5

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

The description is perfectly concise and front-loaded: the first sentence states the core functionality, the second explains benefits, and the third provides implementation context and use cases. Every sentence adds value with zero wasted words, and the structure moves from general to specific.

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

Completeness4/5

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

Given the rich annotations (readOnlyHint, idempotentHint) and comprehensive schema coverage, the description provides excellent contextual completeness. It explains the tool's optimization purpose, implementation details, and ideal use cases. The only minor gap is lack of output format explanation (no output schema exists), but the annotations sufficiently indicate safe read behavior.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents all parameters thoroughly. The description doesn't add specific parameter semantics beyond what's in the schema, but it contextually explains the purpose of batching calls, which helps understand the 'calls' parameter's role. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('batch multiple contract read calls') and resources ('single RPC request'), distinguishing it from siblings like read_contract (single call) and write_contract (write operations). It explicitly mentions it's for read operations only, which differentiates it from write tools.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'when querying multiple functions' and for specific use cases like 'portfolio analysis, price aggregation, and querying multiple contract states efficiently.' It implicitly distinguishes from read_contract (single calls) and write_contract (write operations) by focusing on batch read optimization.

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

read_contractA
Read-onlyIdempotent

Call read-only functions on a smart contract. Automatically fetches ABI from block explorer if not provided (requires ETHERSCAN_API_KEY). Falls back to common functions if contract is not verified. Use this to query contract state and data.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractAddressYesThe contract address
functionNameYesFunction name (e.g., 'name', 'symbol', 'balanceOf', 'totalSupply', 'owner')
argsNoFunction arguments as strings (e.g., ['0xAddress'] for balanceOf)
abiJsonNoFull contract ABI as JSON string (optional - will auto-fetch verified contract ABI if not provided)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: automatic ABI fetching with fallback mechanisms, API key requirement, and network defaults. No contradictions with annotations.

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

Conciseness5/5

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

Three sentences with zero waste: first states core purpose, second explains ABI fetching behavior, third provides usage guidance. Front-loaded with essential information, 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.

Completeness4/5

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

Given the tool's moderate complexity, rich annotations, and 100% schema coverage, the description is mostly complete. It explains the tool's behavior, usage context, and prerequisites. The main gap is lack of output format details (no output schema), but annotations provide safety context.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds minimal semantic context (e.g., 'falls back to common functions'), but doesn't significantly enhance understanding beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('call read-only functions', 'query contract state and data') and distinguishes it from siblings by emphasizing its read-only nature for smart contracts, unlike write_contract or transfer tools.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('to query contract state and data') and distinguishes it from alternatives by specifying it's for read-only functions, unlike write_contract which is for write operations. Also mentions prerequisites (ETHERSCAN_API_KEY for auto-fetching).

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

resolve_ens_nameA
Read-onlyIdempotent

Resolve an ENS name to an Ethereum address

ParametersJSON Schema
NameRequiredDescriptionDefault
ensNameYesENS name to resolve (e.g., 'vitalik.eth')
networkNoNetwork name or chain ID. ENS resolution works best on Ethereum mainnet. Defaults to Ethereum mainnet.

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds context about network behavior ('ENS resolution works best on Ethereum mainnet') in the schema, which is useful for understanding performance characteristics, though it doesn't detail rate limits or specific error cases.

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

Conciseness5/5

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

The description is a single, direct sentence that states the tool's purpose without any fluff or redundancy. It's front-loaded and efficiently communicates the core functionality, making it easy for an AI agent to parse quickly.

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

Completeness4/5

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

Given the annotations cover safety and idempotency, and the schema fully documents parameters, the description is reasonably complete for a read-only query tool. However, with no output schema, it doesn't explain return values (e.g., address format or error responses), leaving a minor gap in full context.

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

Parameters3/5

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

Schema description coverage is 100%, with clear documentation for both parameters (ensName and network). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3 for high schema coverage without extra value.

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

Purpose5/5

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

The description clearly states the specific action ('resolve') and target resource ('ENS name to an Ethereum address'), distinguishing it from sibling tools like 'lookup_ens_address' (which might be the inverse operation) and other Ethereum query tools. It precisely communicates the tool's function without ambiguity.

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

Usage Guidelines3/5

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

The description implies usage for ENS resolution but doesn't explicitly state when to use this tool versus alternatives like 'lookup_ens_address' or other address-related tools. No guidance is provided on prerequisites, error conditions, or specific scenarios where this tool is preferred over others in the sibling list.

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

sign_messageA
Idempotent

Sign an arbitrary message using the configured wallet. Useful for authentication (SIWE), meta-transactions, and off-chain signatures. The signature can be verified on-chain or off-chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message to sign (plain text or hex-encoded data)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations provide idempotentHint=true and destructiveHint=false, but the description adds valuable context: it explains the signature's verification scope ('on-chain or off-chain') and mentions the wallet configuration dependency. However, it doesn't detail potential side effects like gas costs or security implications, leaving some behavioral aspects uncovered.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by use cases and verification details in two efficient sentences. Every phrase adds value without redundancy, making it highly concise and well-structured for quick comprehension.

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

Completeness4/5

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

Given the tool's moderate complexity (signing operation with cryptographic implications), no output schema, and rich annotations, the description is mostly complete. It covers purpose, usage, and verification but lacks details on error cases or response format, which could enhance completeness for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'message' fully documented in the schema. The description adds no additional parameter details beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage without extra value.

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

Purpose5/5

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

The description clearly states the specific action ('Sign an arbitrary message') and resource ('using the configured wallet'), distinguishing it from sibling tools like sign_typed_data (which handles structured data) and other read/write operations. It precisely defines the tool's function without ambiguity.

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

Usage Guidelines5/5

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

The description explicitly lists three use cases: 'authentication (SIWE), meta-transactions, and off-chain signatures,' providing clear guidance on when to use this tool. It also implicitly distinguishes it from sign_typed_data by focusing on arbitrary messages rather than structured data, though it doesn't explicitly name alternatives.

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

sign_typed_dataA
Idempotent

Sign structured data (EIP-712) using the configured wallet. Used for gasless transactions, meta-transactions, permit signatures, and protocol-specific signatures. The signature follows the EIP-712 standard.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainJsonYesEIP-712 domain as JSON string with fields: name, version, chainId, verifyingContract, salt (all optional)
typesJsonYesEIP-712 types definition as JSON string (exclude EIP712Domain type - it's added automatically)
primaryTypeYesThe primary type name (e.g., 'Mail', 'Permit', 'MetaTransaction')
messageJsonYesThe message data to sign as JSON string

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable context beyond annotations: it specifies the signature follows EIP-712 standard, mentions use cases, and clarifies the wallet is 'configured' (implying setup requirements). Annotations cover idempotency (true) and non-destructive nature (false), but the description provides practical application context that helps the agent understand when this tool is appropriate.

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

Conciseness5/5

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

The description is perfectly concise with just two sentences. The first sentence states the core purpose, and the second sentence provides essential context about the standard and use cases. Every word earns its place with zero redundancy.

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

Completeness4/5

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

For a cryptographic signing tool with good annotations and full schema coverage, the description provides excellent context about use cases and the EIP-712 standard. The main gap is lack of output information (no output schema), but the description compensates well by explaining what the tool produces ('signature follows the EIP-712 standard').

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

Parameters3/5

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

With 100% schema description coverage, the input schema already fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema descriptions, so it meets the baseline expectation without providing additional parameter semantics.

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

Purpose5/5

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

The description clearly states the specific action ('Sign structured data'), the standard used ('EIP-712'), and the resource ('using the configured wallet'). It distinguishes this tool from sibling tools like 'sign_message' by specifying it's for structured data following a particular standard rather than plain messages.

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

Usage Guidelines5/5

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

The description explicitly lists multiple use cases ('gasless transactions, meta-transactions, permit signatures, and protocol-specific signatures'), providing clear guidance on when to use this tool. It differentiates from 'sign_message' by specifying EIP-712 structured data signing rather than general message signing.

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

transfer_erc20A
Destructive

Transfer ERC20 tokens to an address. Uses the configured wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenAddressYesThe ERC20 token contract address
toYesRecipient address or ENS name
amountYesAmount to send (in token units, accounting for decimals)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations provide key behavioral hints (destructiveHint: true, idempotentHint: false, readOnlyHint: false), covering safety and idempotency. The description adds minimal context ('Uses the configured wallet'), which hints at authentication needs but doesn't elaborate on rate limits, error handling, or transaction specifics. It doesn't contradict annotations, so a baseline score is appropriate given the annotation coverage.

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

Conciseness5/5

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

The description is two concise sentences that are front-loaded with the core purpose and essential context. Every word earns its place, with no redundancy or unnecessary elaboration, making it highly efficient and well-structured.

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

Completeness3/5

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

Given the tool's complexity (destructive transfer operation), rich annotations, and 100% schema coverage, the description is adequate but minimal. It lacks details on output (no schema provided), error cases, or network defaults beyond schema hints. For a high-stakes tool, more context on behavior or results would enhance completeness.

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

Parameters3/5

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

Schema description coverage is 100%, with clear parameter descriptions in the input schema (e.g., tokenAddress as contract address, amount in token units). The description adds no additional parameter semantics beyond the schema, so it meets the baseline for high coverage without compensating value.

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

Purpose5/5

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

The description clearly states the specific action ('Transfer ERC20 tokens') and resource ('to an address'), distinguishing it from sibling tools like transfer_native (for native tokens) and approve_token_spending (for approvals). It precisely identifies the tool's function without being vague or tautological.

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

Usage Guidelines4/5

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

The description implies usage context by specifying 'Uses the configured wallet,' which suggests it's for sending tokens from a pre-configured source. However, it doesn't explicitly state when to use this vs. alternatives like transfer_native or write_contract, nor does it mention prerequisites (e.g., wallet setup, token approvals). The guidance is clear but lacks sibling differentiation and exclusions.

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

transfer_nativeA
Destructive

Transfer native tokens (ETH, MATIC, etc.) to an address. Uses the configured wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient address or ENS name
amountYesAmount to send in ether (e.g., '0.5' for 0.5 ETH)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, destructiveHint=true, openWorldHint=true, and idempotentHint=false. The description adds context about using the configured wallet, which clarifies authentication needs beyond annotations. It doesn't mention rate limits or specific destructive consequences, but aligns with annotations without contradiction.

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

Conciseness5/5

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

Two concise sentences with zero waste: first states purpose and scope, second clarifies the wallet mechanism. Front-loaded with essential information, no redundant details.

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

Completeness4/5

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

Given a destructive tool with no output schema, the description is reasonably complete—it covers what the tool does and the wallet context. However, it lacks details on return values (e.g., transaction hash) or error cases, which would be helpful for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, with clear parameter documentation. The description adds no additional parameter semantics beyond what's in the schema (e.g., no examples for 'network' beyond the default). Baseline 3 is appropriate since the schema fully covers parameters.

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

Purpose4/5

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

The description clearly states the action ('Transfer native tokens') and resource (ETH, MATIC, etc.), with the specific mechanism 'to an address' and 'Uses the configured wallet.' It distinguishes from sibling tools like transfer_erc20 by specifying native tokens, but doesn't explicitly contrast with other tools beyond that implied difference.

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

Usage Guidelines3/5

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

The description implies usage for transferring native tokens (vs. ERC20 tokens via transfer_erc20), but doesn't explicitly state when to use this tool versus alternatives like write_contract for more complex transfers or get_balance for checking balances. No exclusions or prerequisites are mentioned.

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

wait_for_transactionA
Read-only

Wait for a transaction to be confirmed (mined). Polls the network until confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
txHashYesTransaction hash (0x...)
confirmationsNoNumber of block confirmations required. Defaults to 1.
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description adds valuable behavioral context: it reveals this is a polling operation (not a one-time check) and specifies it waits until confirmation is achieved. This goes beyond what annotations provide about safety characteristics.

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

Conciseness5/5

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

The description is perfectly concise with two clear sentences that front-load the core purpose. Every word earns its place: first sentence states what it does, second sentence explains how it works. No wasted words or redundant information.

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

Completeness4/5

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

For a polling tool with good annotations and full parameter documentation, the description provides adequate context about its behavior. However, without an output schema, it doesn't describe what the tool returns (e.g., receipt data, confirmation status, error conditions), leaving some uncertainty about the result format.

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

Parameters3/5

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

With 100% schema description coverage, all parameters are well-documented in the schema itself. The description doesn't add any additional parameter semantics beyond what's already in the schema descriptions (txHash, confirmations with default, network with default). This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Wait for a transaction to be confirmed') and mechanism ('Polls the network until confirmation'), distinguishing it from siblings like get_transaction (which retrieves transaction data without waiting) or get_transaction_receipt (which gets confirmation status without polling).

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

Usage Guidelines4/5

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

The description implies usage context (after submitting a transaction, when you need to wait for confirmation), but doesn't explicitly state when NOT to use it or name specific alternatives like get_transaction_receipt for checking status without waiting. It provides clear intent but lacks explicit exclusion guidance.

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

write_contractA
Destructive

Execute state-changing functions on a smart contract. Automatically fetches ABI from block explorer if not provided (requires ETHERSCAN_API_KEY). Use this to call any write function on verified contracts. Requires wallet to be configured (via private key or mnemonic).

ParametersJSON Schema
NameRequiredDescriptionDefault
contractAddressYesThe contract address
functionNameYesFunction name to call (e.g., 'mint', 'swap', 'stake', 'approve')
argsNoFunction arguments as strings (e.g., ['0xAddress', '1000000'])
valueNoETH value to send with transaction in ether (e.g., '0.1' for payable functions)
abiJsonNoFull contract ABI as JSON string (optional - will auto-fetch verified contract ABI if not provided)
networkNoNetwork name or chain ID. Defaults to Ethereum mainnet.

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it discloses the automatic ABI fetching capability (with ETHERSCAN_API_KEY requirement), wallet configuration requirements, and the focus on verified contracts. While annotations already indicate destructiveHint=true and readOnlyHint=false, the description provides practical implementation details that help the agent understand execution requirements.

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

Conciseness5/5

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

The description is efficiently structured in three sentences: first states core functionality, second explains ABI auto-fetching, third specifies prerequisites. Each sentence adds distinct value with zero redundancy. The information is front-loaded with the primary purpose stated immediately.

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

Completeness4/5

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

For a complex destructive tool with no output schema, the description provides good context about requirements (wallet, API key), behavior (ABI auto-fetching), and scope (verified contracts, write functions). It could be more complete by mentioning transaction confirmation or gas handling, but covers the essential operational context given the annotations already indicate destructive nature.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already documents all 6 parameters thoroughly. The description mentions ABI auto-fetching (related to 'abiJson') and wallet requirements (implied for all operations), but doesn't add significant parameter-specific semantics beyond what the schema provides. This meets the baseline expectation when schema coverage is complete.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Execute state-changing functions', 'call any write function') and resources ('on a smart contract'). It distinguishes from sibling tools like 'read_contract' by emphasizing write operations and from 'approve_token_spending' by being a general-purpose contract interaction tool.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use this to call any write function on verified contracts' establishes the primary use case. It also mentions prerequisites ('Requires wallet to be configured') and when not to use alternatives (implied by distinguishing from read operations). The sibling tool list shows clear alternatives like 'read_contract' for non-state-changing calls.

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

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between get_block and get_latest_block, and between get_contract_abi and read_contract/write_contract's ABI fetching. The descriptions help clarify, but an agent might occasionally hesitate between these pairs.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun or verb_noun_noun pattern throughout, such as get_balance, transfer_erc20, and sign_message. There are no deviations in style, making them predictable and easy to parse.

Tool Count3/5

With 25 tools, the count is on the high side for an MCP server, bordering on heavy. While the domain (EVM interactions) is broad, this many tools could overwhelm agents or lead to redundancy, though it covers many use cases.

Completeness5/5

The tool set provides comprehensive coverage for EVM operations, including token transfers, contract interactions, network queries, and wallet management. It supports full workflows from reading to writing, with no obvious gaps in the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, providing services like token transfers, contract interactions, and ENS resolution through a unified interface.
    28
    127
    382
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Comprehensive Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, supporting token transfers, smart contract interactions, and ENS name resolution through a unified interface.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that bridges AI models with Ethereum blockchains via all JSON-RPC calls, enabling natural language queries for block numbers, balances, transactions, and smart contract data.
    17
    21
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Web3 MCP proxy server for AI agents: EVM execution, DeFi swaps, bridges, advanced orders, market data, wallet management, and confirmation-gated writes.
    100
    220
    1
    MIT

Appeared in Searches

Latest Blog Posts

MCP directory API

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

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

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