EVM MCP Server
The EVM MCP Server enables seamless interaction with 30+ EVM-compatible blockchains (including Ethereum, Polygon, Arbitrum, Optimism), providing comprehensive blockchain services for AI agents through a unified interface.
Key capabilities:
Blockchain Data Access: Read blockchain state, query chain information, retrieve transaction details, resolve ENS names to addresses
Token Management: Handle ERC20 tokens (metadata, balances, transfers, approvals), interact with NFTs (ERC721) and multi-tokens (ERC1155), check ownership and balances
Smart Contract Interactions: Read contract state via view/pure functions, write to contracts with transaction signing, verify if an address is a contract
Transaction Support: Transfer native tokens (ETH, MATIC), estimate gas costs, sign and send transactions securely
Utility Functions: Derive Ethereum addresses from private keys, access blockchain data via MCP Resource URIs
Supports running the MCP server with Bun runtime, enabling faster execution and modern JavaScript features.
Provides comprehensive blockchain services including reading state, transferring tokens, querying balances, and interacting with smart contracts on the Ethereum mainnet.
Supports interaction with the Fantom blockchain, including native token transfers, balance checking, and smart contract operations.
Compatible with Node.js 18.0.0+ as an alternative runtime environment for the MCP server.
Enables interaction with the Optimism L2 network, including reading blockchain state, transferring tokens, and smart contract interactions.
Provides services for the Polygon network and Polygon zkEVM, supporting token transfers, smart contract interaction, and blockchain data access.
Built with TypeScript 5.0+, providing type safety and modern language features for development and extension of the server capabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EVM MCP Servercheck vitalik.eth's ETH balance on mainnet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EVM MCP Server
A comprehensive Model Context Protocol (MCP) server that provides blockchain services across 60+ 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 through 22 tools and 10 AI-guided prompts.
📋 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 with automatic ABI fetching from block explorers
Transferring tokens (native, ERC20, ERC721, ERC1155)
Querying token metadata and balances
Chain-specific services across 60+ EVM networks (34 mainnets + 26 testnets)
ENS name resolution for all address parameters (use human-readable names like 'vitalik.eth' instead of addresses)
AI-friendly prompts that guide agents through complex workflows
All services are exposed through a consistent interface of MCP tools, resources, and prompts, 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. The server includes intelligent ABI fetching, eliminating the need to know contract ABIs in advance.
✨ Features
Blockchain Data Access
Multi-chain support for 60+ EVM-compatible networks (34 mainnets + 26 testnets)
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 to contracts - Execute any state-changing function with automatic ABI fetching
Contract verification to distinguish from EOAs
Event logs retrieval and filtering
Automatic ABI fetching from Etherscan v2 API across all 60+ networks (no need to know ABIs in advance)
ABI parsing and validation with function discovery
Comprehensive Transaction Support
Flexible Wallet Support - Configure with Private Key or Mnemonic (BIP-39) with HD path support
Native token transfers across all supported networks
Gas estimation for transaction planning
Transaction status and receipt information
Error handling with descriptive messages
Message Signing Capabilities
Personal Message Signing - Sign arbitrary messages for authentication and verification
EIP-712 Typed Data Signing - Sign structured data for gasless transactions and meta-transactions
SIWE Support - Enable Sign-In With Ethereum authentication flows
Permit Signatures - Create off-chain approvals for gasless token operations
Meta-Transaction Support - Sign transaction data for relay services and gasless transfers
AI-Guided Workflows (Prompts)
Transaction preparation - Guidance for planning and executing transfers
Wallet analysis - Tools for analyzing wallet activity and holdings
Smart contract exploration - Interactive ABI fetching and contract analysis
Contract interaction - Safe execution of write operations on smart contracts
Network information - Learning about EVM networks and comparisons
Approval auditing - Reviewing and managing token approvals
Error diagnosis - Troubleshooting transaction failures
🌐 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
Flow
Lumia
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
Flow Testnet
Filecoin Calibration
Lumia Testnet
🛠️ Prerequisites
Bun 1.0.0 or higher (recommended)
Node.js 20.0.0 or higher (if not using Bun)
Optional: Etherscan API key for ABI fetching
📦 Installation
# Clone the repository
git clone https://github.com/mcpdotdirect/evm-mcp-server.git
cd evm-mcp-server
# Install dependencies with Bun
bun install
# Or with npm
npm install⚙️ Configuration
Environment Variables
The server uses the following environment variables. For write operations and ABI fetching, you must configure these variables:
Wallet Configuration (For Write Operations)
You can configure your wallet using either a private key or a mnemonic phrase:
Option 1: Private Key
export EVM_PRIVATE_KEY="0x..." # Your private key in hex format (with or without 0x prefix)Option 2: Mnemonic Phrase (Recommended for HD Wallets)
export EVM_MNEMONIC="word1 word2 word3 ... word12" # Your 12 or 24 word BIP-39 mnemonic
export EVM_ACCOUNT_INDEX="0" # Optional: Account index for HD wallet derivation (default: 0)The mnemonic option supports hierarchical deterministic (HD) wallet derivation:
Uses BIP-39 standard mnemonic phrases (12 or 24 words)
Supports BIP-44 derivation path:
m/44'/60'/0'/0/{accountIndex}EVM_ACCOUNT_INDEXallows you to derive different accounts from the same mnemonicDefault account index is 0 (first account)
Wallet is used for:
Transferring native tokens (
transfer_nativetool)Transferring ERC20 tokens (
transfer_erc20tool)Approving token spending (
approve_token_spendingtool)Writing to smart contracts (
write_contracttool)Signing messages for authentication (
sign_messagetool)Signing structured data for gasless transactions (
sign_typed_datatool)
⚠️ Security:
Never commit your private key or mnemonic to version control
Use environment variables or a secure key management system
Store mnemonics securely - they provide access to all derived accounts
Consider using different account indices for different purposes
API Keys (For ABI Fetching)
export ETHERSCAN_API_KEY="your-api-key-here"This API key is optional but required for:
Automatic ABI fetching from block explorers (
get_contract_abitool)Auto-fetching ABIs when reading contracts (
read_contracttool withabiJsonparameter)The
fetch_and_analyze_abiprompt
Get your free API key from:
Etherscan - For Ethereum and compatible chains
The same key works across all 60+ EVM networks via the Etherscan v2 API
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.tsFor 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 --httpRunning 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 devOr start the HTTP server with SSE for web applications:
# Start the HTTP server
bun start:http
# Development mode with auto-reload
bun dev:httpConnecting 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:
Open Cursor and go to Settings (gear icon in the bottom left)
Click on "Features" in the left sidebar
Scroll down to "MCP Servers" section
Click "Add new MCP server"
Enter the following details:
Server name:
evm-mcp-serverType:
commandCommand:
npx @mcpdotdirect/evm-mcp-server
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:
Share MCP configurations with your team
Version control your MCP setup
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:
Create a
.cursordirectory in your project root if it doesn't existSave the above JSON as
mcp.jsonin the.cursordirectoryRestart Cursor or open your project
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:
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();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"
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
claudeExample: 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"
// }Example: Batch Multiple Calls with Multicall
// Example of using multicall to batch multiple contract reads in a single RPC call
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("multicall", {
network: "ethereum",
calls: [
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "balanceOf",
args: ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],
},
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "symbol",
},
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "decimals",
},
],
});
console.log(result);
// {
// network: "ethereum",
// totalCalls: 3,
// successfulCalls: 3,
// failedCalls: 0,
// results: [
// { contractAddress: "0xA0b...", functionName: "balanceOf", result: "1000000000", status: "success" },
// { contractAddress: "0xA0b...", functionName: "symbol", result: "USDC", status: "success" },
// { contractAddress: "0xA0b...", functionName: "decimals", result: "6", status: "success" }
// ]
// }📚 API Reference
Tools
The server provides 25 focused MCP tools for agents. All tools that accept address parameters support both Ethereum addresses and ENS names.
Wallet Information
Tool Name | Description | Key Parameters |
| Get the address of the configured wallet (from EVM_PRIVATE_KEY) | none |
Network Information
Tool Name | Description | Key Parameters |
| Get network information |
|
| List all supported EVM networks | none |
| Get current gas prices on a network |
|
ENS Services
Tool Name | Description | Key Parameters |
| Resolve ENS name to address |
|
| Reverse lookup address to ENS name |
|
Block & Transaction Information
Tool Name | Description | Key Parameters |
| Get block data |
|
| Get latest block data |
|
| Get transaction details |
|
| Get transaction receipt with logs |
|
| Wait for transaction confirmation |
|
Balance & Token Information
Tool Name | Description | Key Parameters |
| Get native token balance |
|
| Check ERC20 token balance |
|
| Check token spending allowance |
|
Smart Contract Interactions
Tool Name | Description | Key Parameters |
| Fetch contract ABI from block explorer (60+ networks) |
|
| Read smart contract state (auto-fetches ABI if needed) |
|
| Execute state-changing functions (auto-fetches ABI if needed) |
|
| Batch multiple read calls into a single RPC request (uses Multicall3) |
|
Token Transfers
Tool Name | Description | Key Parameters |
| Send native tokens (ETH, etc.) |
|
| Transfer ERC20 tokens |
|
| Approve token allowances |
|
NFT Services
Tool Name | Description | Key Parameters |
| Get NFT (ERC721) metadata |
|
| Check ERC1155 balance |
|
Message Signing
Tool Name | Description | Key Parameters |
| Sign arbitrary messages for authentication and verification (SIWE, off-chain signatures) |
|
| Sign EIP-712 structured data for gasless transactions, permits, and meta-transactions |
|
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 |
| Chain information for a specific network |
| Ethereum mainnet chain information |
| Block data by number |
| Latest block data |
| Native token balance |
| Transaction details |
| Transaction receipt with logs |
Token Resources
Resource URI Pattern | Description |
| ERC20 token information |
| ERC20 token balance |
| NFT (ERC721) token information |
| NFT ownership verification |
| ERC1155 token URI |
| 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:
Add new services in the appropriate file under
src/core/services/Register new tools in
src/core/tools.tsRegister new resources in
src/core/resources.tsAdd new network support in
src/core/chains.tsTo 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
28 toolsapprove_token_spendingA
Approve another address (like a DeFi protocol or exchange) to spend your ERC20 tokens. This is often required before interacting with DeFi protocols.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The amount of tokens to approve in token units, not wei (e.g., '1000' to approve spending 1000 tokens). Use a very large number for unlimited approval. | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the token owner account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. | |
| spenderAddress | Yes | The contract address being approved to spend your tokens (e.g., a DEX or lending protocol) | |
| tokenAddress | Yes | The contract address of the ERC20 token to approve for spending (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC on Ethereum) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the purpose and context but doesn't mention security implications beyond what's in the schema, potential gas costs, transaction finality, or what happens if the approval fails. It does add useful context about DeFi protocol requirements, but lacks comprehensive behavioral details for a sensitive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place. The first sentence states the core purpose, and the second provides crucial usage context. There's zero waste or redundancy, and it's front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a sensitive blockchain transaction tool with 5 parameters, no annotations, and no output schema, the description provides adequate purpose and usage context but lacks details about transaction behavior, security warnings beyond the schema, or expected outcomes. It's complete enough for basic understanding but insufficient for comprehensive agent guidance given the tool's complexity and sensitivity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description doesn't add specific parameter semantics beyond what's in the schema, but it provides important context about unlimited approval ('Use a very large number for unlimited approval' is in the schema, not description). Baseline would be 3, but the description's DeFi context helps interpret parameter usage, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Approve another address to spend your ERC20 tokens') and distinguishes it from sibling tools by specifying this is for token spending approvals rather than transfers, balances, or other blockchain operations. It explicitly mentions the resource (ERC20 tokens) and verb (approve spending).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'This is often required before interacting with DeFi protocols.' This gives clear guidance on when to use this tool versus alternatives like transfer operations or balance checks, and it explains the prerequisite nature of token approvals for DeFi interactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_nft_ownershipB
Check if an address owns a specific NFT
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. | |
| ownerAddress | Yes | The wallet address or ENS name to check ownership against (e.g., '0x1234...' or 'vitalik.eth') | |
| tokenAddress | Yes | The contract address or ENS name of the NFT collection (e.g., '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' for BAYC or 'boredapeyachtclub.eth') | |
| tokenId | Yes | The ID of the NFT to check (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool's purpose but lacks details on performance (e.g., rate limits, latency), error handling (e.g., invalid inputs), or output format (e.g., boolean, detailed response). This leaves gaps in understanding how the tool behaves beyond its basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the core purpose without unnecessary words. It efficiently communicates the tool's function, making it easy to parse and understand immediately, with no wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is minimally adequate. It states the purpose but lacks details on usage context, behavioral traits, or output, leaving the agent to infer these from the schema alone. For a tool with no annotations or output schema, more completeness would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional semantic context beyond implying the parameters are used for ownership verification. It doesn't clarify interactions between parameters or provide examples beyond what's in the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Check if an address owns') and resource ('a specific NFT'), distinguishing it from sibling tools like 'get_nft_balance' (which checks quantity) or 'get_nft_info' (which retrieves metadata). It precisely defines the tool's function without redundancy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention using 'get_nft_balance' for checking all NFTs owned by an address or 'resolve_ens' for address resolution, nor does it specify prerequisites like network connectivity. The description only states what it does, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_gasC
Estimate the gas cost for a transaction
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | The transaction data as a hex string | |
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. | |
| to | Yes | The recipient address | |
| value | No | The amount of ETH to send in ether (e.g., '0.1') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves: whether it makes network calls, requires authentication, has rate limits, returns specific error types, or provides gas estimates in gwei/wei. For a tool that likely queries blockchain networks, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise at 7 words. It's front-loaded with the core purpose and contains zero wasted words. Every word earns its place by clearly communicating the tool's function without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of gas estimation (involving blockchain networks, transaction simulation, and unit conversions), the description is insufficient. With no annotations and no output schema, the description should provide more context about what the estimate represents (gas units, gwei/wei), typical use cases, and limitations. For a tool with 4 parameters and likely network dependencies, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 4 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: estimating gas cost for a transaction. It uses a specific verb ('estimate') and resource ('gas cost'), making it immediately understandable. However, it doesn't differentiate from potential sibling tools like 'write_contract' or 'transfer_eth' that might also involve gas estimation, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It doesn't mention whether this should be used before executing transactions (like 'transfer_eth' or 'write_contract'), or how it relates to other gas-related operations. There's no explicit when/when-not or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_address_from_private_keyB
Get the EVM address derived from a private key
| Name | Required | Description | Default |
|---|---|---|---|
| privateKey | Yes | Private key in hex format (with or without 0x prefix). SECURITY: This is used only for address derivation and is not stored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool is used 'only for address derivation and is not stored' (via the schema description), which adds useful context about security and data handling. However, it lacks details on error handling, performance, or output format, leaving gaps in behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and resource, making it easy to parse quickly. Every part of the description earns its place by conveying essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema) and the schema's high coverage, the description is minimally adequate. It covers the basic purpose but lacks context on output (e.g., address format) and error scenarios. With no annotations, it could benefit from more behavioral details to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the parameter 'privateKey' well-documented in the schema itself. The description does not add any additional meaning beyond what the schema provides, such as examples or edge cases. This meets the baseline for high schema coverage but does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the target ('EVM address derived from a private key'), making the purpose specific and understandable. However, it does not explicitly differentiate this tool from its siblings, such as 'resolve_ens' (which also deals with addresses), though the focus on private key derivation is inherently distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it does not mention scenarios like key derivation for wallet setup or address verification, nor does it contrast with tools like 'resolve_ens' for address resolution. This leaves usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceA
Get the native token balance (ETH, MATIC, etc.) for an address
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet address or ENS name (e.g., '0x1234...' or 'vitalik.eth') to check the balance for | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool retrieves balances but doesn't disclose behavioral traits like rate limits, authentication needs, error handling, or response format. For a read operation with no annotation coverage, this leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key information ('Get the native token balance') without any wasted words. It's appropriately sized for the tool's simplicity and gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose but lacks details on behavioral aspects like return values or error cases. Without annotations or output schema, the description should do more to compensate, but it's minimally viable for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the parameters (address and network). The description adds no additional parameter semantics beyond what's in the schema, such as examples or constraints. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('native token balance for an address'), specifying it's for native tokens like ETH or MATIC. It distinguishes from siblings like get_erc20_balance or get_nft_balance by focusing on native tokens, making the purpose specific and well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking native token balances, but doesn't explicitly state when to use this tool versus alternatives like get_erc20_balance or get_token_balance. It provides some context by mentioning token types, but lacks explicit guidance on exclusions or comparisons with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_block_by_numberC
Get a block by its block number
| Name | Required | Description | Default |
|---|---|---|---|
| blockNumber | Yes | The block number to fetch | |
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the action but lacks behavioral details: it doesn't specify if this is a read-only operation (implied by 'Get'), error handling (e.g., invalid block numbers), performance traits, or rate limits. For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what the tool returns (e.g., block data structure), error conditions, or dependencies like network connectivity. For a tool that likely returns complex blockchain data, this lack of context is a significant shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the schema. The description adds minimal value beyond the schema, as it only mentions 'block number' without elaborating on format or constraints. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, but the description doesn't compensate with additional insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a block'), specifying it's fetched by block number. It distinguishes from siblings like 'get_latest_block' by indicating retrieval via specific number rather than latest. However, it doesn't explicitly differentiate from other block-related tools (none in siblings), so it's not fully sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., network availability), exclusions, or comparisons to siblings like 'get_latest_block' for real-time data. The description is purely functional without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chain_infoB
Get information about an EVM network
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves: no information about response format, error handling, rate limits, authentication requirements, or whether it's read-only (though implied by 'Get'). For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately communicates the core purpose. There's no wasted language or unnecessary elaboration. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description is minimally adequate. However, it doesn't explain what information is returned (no output schema exists), and with no annotations, it misses behavioral context. For a tool that presumably returns structured network data, the description should at least hint at the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'network' fully documented in the schema. The description adds no additional parameter information beyond what's already in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('information about an EVM network'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'get_supported_networks' (which lists networks) and 'get_block_by_number' (which retrieves blockchain data). However, it doesn't specify what type of information is returned (e.g., chain ID, native currency, RPC URLs), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when network information is needed, but provides no explicit guidance on when to choose this tool over alternatives like 'get_supported_networks' or when network details are required for other operations. The context is clear but lacks specific when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_erc1155_balanceB
Get the balance of a specific ERC1155 token ID owned by an address. ERC1155 allows multiple tokens of the same ID, so the balance can be greater than 1.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. ERC1155 tokens exist across many networks. Defaults to Ethereum mainnet. | |
| ownerAddress | Yes | The wallet address to check the token balance for (e.g., '0x1234...') | |
| tokenAddress | Yes | The contract address of the ERC1155 token collection (e.g., '0x76BE3b62873462d2142405439777e971754E8E77') | |
| tokenId | Yes | The ID of the specific token to check the balance for (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it explains ERC1155's multi-token nature (balance can be >1), it doesn't describe the tool's behavior: whether it's a read-only query, what permissions are needed, potential rate limits, error conditions, or what format the balance returns. For a tool with no annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two clear sentences. The first sentence states the core purpose, and the second adds important context about ERC1155's multi-token nature. There's no wasted language, and the information is front-loaded. It could potentially be slightly more structured but is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description provides basic purpose and ERC1155 context but lacks behavioral details needed for complete understanding. It covers what the tool does but not how it behaves, what it returns, or potential limitations. For a tool with rich parameter schema but no other structured data, the description is minimally adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions ERC1155 context generally but doesn't provide additional semantic details about parameter usage, constraints, or relationships. Baseline 3 is appropriate when schema does complete documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the balance'), resource ('ERC1155 token ID'), and target ('owned by an address'). It distinguishes from siblings like 'get_nft_balance' by specifying ERC1155 tokens and explaining their multi-token nature. The explanation about ERC1155 allowing multiple tokens of the same ID provides important differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying ERC1155 tokens, but doesn't explicitly state when to use this tool versus alternatives like 'get_nft_balance', 'get_erc20_balance', or 'get_token_balance'. It mentions ERC1155's unique multi-token capability, which hints at usage scenarios, but lacks explicit guidance on tool selection among the many balance-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_erc1155_token_uriB
Get the metadata URI for an ERC1155 token (multi-token standard used for both fungible and non-fungible tokens). The URI typically points to JSON metadata about the token.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. ERC1155 tokens exist across many networks. Defaults to Ethereum mainnet. | |
| tokenAddress | Yes | The contract address of the ERC1155 token collection (e.g., '0x76BE3b62873462d2142405439777e971754E8E77') | |
| tokenId | Yes | The ID of the specific token to query metadata for (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes what the tool does (retrieves a metadata URI) but doesn't disclose behavioral traits like whether it's a read-only operation, potential rate limits, error conditions, or what happens if the token doesn't exist. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that each add value. The first sentence states the core purpose, and the second explains what the URI typically contains. There's no wasted text, though it could be slightly more front-loaded with usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with full schema coverage but no annotations and no output schema, the description is minimally adequate. It explains the purpose and typical output format, but doesn't address behavioral aspects or provide usage guidance relative to siblings. For a read operation with good schema documentation, it meets basic needs but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters. The description doesn't add any parameter-specific information beyond what's in the schema. According to guidelines, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the metadata URI') and resource ('for an ERC1155 token'), and distinguishes it from siblings by specifying it's for the ERC1155 standard (unlike get_nft_info or get_token_info which might handle other token types). It also explains what the URI typically contains, adding useful context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning the ERC1155 standard and typical URI content, but doesn't explicitly state when to use this tool versus alternatives like get_nft_info or get_token_info. It provides some context but lacks clear guidance on tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_erc20_balanceC
Get the ERC20 token balance of an Ethereum address
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The Ethereum address to check | |
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. | |
| tokenAddress | Yes | The ERC20 token contract address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action but lacks details on permissions, rate limits, network behavior, or response format. For a read operation with no annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of blockchain operations and lack of annotations or output schema, the description is incomplete. It doesn't cover behavioral aspects like error handling, network defaults, or return values, which are crucial for an agent to use this tool effectively in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for all parameters in the input schema. The description adds no additional semantic context beyond what's in the schema, such as format examples or constraints. Baseline 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'ERC20 token balance of an Ethereum address', making the purpose specific and understandable. However, it doesn't explicitly distinguish this tool from similar siblings like 'get_token_balance' or 'get_token_balance_erc20', which likely serve overlapping functions, leaving some ambiguity about differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_token_balance' and 'get_token_balance_erc20' present, there's no indication of differences in scope, token types, or use cases, leaving the agent without explicit or implied context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_blockC
Get the latest block from the EVM
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what the tool does without mentioning whether it's read-only, requires authentication, has rate limits, or what the output format might be (e.g., block object details). This is inadequate for a tool that likely returns critical blockchain data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what the tool returns (e.g., block hash, timestamp, transactions) or behavioral aspects like error handling, which are crucial for an EVM block query tool in a server with many blockchain-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'network' parameter clearly documented. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 EVM'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_block_by_number', which could retrieve blocks by specific numbers 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.
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. For example, it doesn't mention using 'get_block_by_number' for historical blocks or 'get_chain_info' for broader network data, leaving the agent to infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nft_balanceA
Get the total number of NFTs owned by an address from a specific collection. This returns the count of NFTs, not individual token IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Most NFTs are on Ethereum mainnet, which is the default. | |
| ownerAddress | Yes | The wallet address to check the NFT balance for (e.g., '0x1234...') | |
| tokenAddress | Yes | The contract address of the NFT collection (e.g., '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' for Bored Ape Yacht Club) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the return type ('count of NFTs') but doesn't disclose behavioral traits like error conditions, rate limits, authentication needs, or whether it's a read-only operation (though implied by 'Get'). For a tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose, zero waste. First sentence states what it does, second clarifies what it returns vs. doesn't. Every sentence earns its place by adding clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with 3 parameters, 100% schema coverage, and no output schema, the description is adequate but incomplete. It lacks output format details (e.g., integer count, error responses) and behavioral context (e.g., network defaults, error handling). With no annotations, it should do more to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain parameter interactions or provide examples not in schema). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 total number of NFTs owned'), the resource ('by an address from a specific collection'), and distinguishes from siblings by specifying 'returns the count of NFTs, not individual token IDs' (differentiating from tools like get_nft_info or check_nft_ownership that might return different data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'from a specific collection' and clarifies what it returns vs. doesn't return, but doesn't explicitly state when to use this tool vs. alternatives like get_erc1155_balance or check_nft_ownership. No explicit 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.
get_nft_infoA
Get detailed information about a specific NFT (ERC721 token), including collection name, symbol, token URI, and current owner if available.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Most NFTs are on Ethereum mainnet, which is the default. | |
| tokenAddress | Yes | The contract address of the NFT collection (e.g., '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' for Bored Ape Yacht Club) | |
| tokenId | Yes | The ID of the specific NFT token to query (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions what information is retrieved (collection name, symbol, token URI, owner) but does not disclose behavioral traits such as rate limits, error handling, data freshness, or whether it requires authentication. For a read operation with no annotation coverage, this leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and lists key data points. There is zero waste, and every word earns its place by clarifying the scope and output without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose and output data types, but lacks details on behavioral aspects and does not compensate for the missing output schema, leaving the agent unsure of the exact return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning beyond what the schema provides (e.g., it does not explain parameter interactions or provide examples not in the schema). 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get detailed information') and resource ('specific NFT (ERC721 token)'), specifying the exact type of token. It distinguishes from siblings like get_nft_balance (which checks ownership quantity) or get_erc1155_token_uri (which handles a different token standard), making the purpose specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for querying NFT metadata and ownership, but does not explicitly state when to use this tool versus alternatives like get_token_info (for general tokens) or check_nft_ownership (for ownership verification). It provides some context but lacks explicit guidance on exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supported_networksB
Get a list of supported EVM networks
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get a list' implies a read-only operation, it doesn't specify whether this requires authentication, what format the list returns, whether it's cached or real-time, or any rate limits. For a tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise - a single sentence that communicates the essential purpose without any wasted words. It's front-loaded with the core action and resource. Every word earns its place, making this an excellent example of efficient documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with zero parameters and no output schema, the description provides the minimum viable information. However, without annotations or output schema, it should ideally specify what format the list returns (e.g., array of network names/IDs) or typical use cases. The description is adequate but leaves room for improvement regarding the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100% (since there are no parameters to describe). The description appropriately doesn't waste space discussing nonexistent parameters. A baseline of 4 is appropriate for zero-parameter tools where the schema fully covers the parameter space.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('list of supported EVM networks'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'get_chain_info', but the specificity of 'supported EVM networks' provides reasonable distinction. The description avoids tautology by not just repeating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_chain_info' or other network-related tools. There's no mention of prerequisites, typical use cases, or when this tool would be preferred over other methods of obtaining network information. The agent must 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_token_balanceC
Get the balance of an ERC20 token for an address
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. | |
| ownerAddress | Yes | The wallet address or ENS name to check the balance for (e.g., '0x1234...' or 'vitalik.eth') | |
| tokenAddress | Yes | The contract address or ENS name of the ERC20 token (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC or 'uniswap.eth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify whether this requires network access, has rate limits, returns cached or real-time data, or what format the balance is returned in. The description is minimal and lacks important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a straightforward tool and gets directly to the point with clear subject-verb-object structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficient. It doesn't explain what format the balance is returned in (wei, ether, decimal), whether it supports ENS resolution for both addresses, error conditions, or how it differs from the similar 'get_erc20_balance' sibling. The minimal description leaves too many operational questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters. The description doesn't add any additional meaning beyond what's in the schema descriptions - it doesn't explain parameter relationships, default behaviors, or provide examples of valid inputs beyond what the schema already specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'balance of an ERC20 token for an address', making the purpose immediately understandable. It distinguishes from general 'get_balance' by specifying ERC20 tokens, but doesn't explicitly differentiate from the sibling 'get_erc20_balance' tool which appears to serve a similar function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_erc20_balance' or 'get_balance'. It doesn't mention prerequisites, error conditions, or when this specific tool is preferred over similar siblings in the toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_balance_erc20B
Get ERC20 token balance for an address
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The address to check balance for | |
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. | |
| tokenAddress | Yes | The ERC20 token contract address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Get' implies a read-only operation, it doesn't specify whether this requires network access, has rate limits, returns cached data, or what format the balance comes in (e.g., raw wei vs formatted). For a blockchain query tool, this leaves significant behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for a straightforward query tool and gets directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with good schema coverage but no output schema, the description is minimally adequate. It states what the tool does but lacks important context about return format, network dependencies, and differentiation from similar sibling tools. The absence of annotations means the description should do more to explain behavioral characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. The baseline score of 3 reflects adequate coverage through the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('ERC20 token balance for an address'), making the purpose immediately understandable. It distinguishes from generic 'get_balance' and 'get_token_balance' siblings by specifying ERC20 tokens, though it doesn't explicitly differentiate from the similar 'get_erc20_balance' sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_erc20_balance' (which appears to serve a similar function) or 'get_token_balance' (which might handle different token types). There's no mention of prerequisites, error conditions, or comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_infoA
Get comprehensive information about an ERC20 token including name, symbol, decimals, total supply, and other metadata. Use this to analyze any token on EVM chains.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet. | |
| tokenAddress | Yes | The contract address of the ERC20 token (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC on Ethereum) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool retrieves 'comprehensive information' but does not specify response format, potential rate limits, authentication needs, or error conditions. For a read operation with no annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the purpose and key data points, the second provides usage context. Every sentence adds value with zero waste, making it appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description adequately covers the tool's purpose and basic usage but lacks details on behavioral traits (e.g., response format, error handling) and does not explain return values. For a read tool with 2 parameters, it is minimally viable but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (network and tokenAddress). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get comprehensive information') and resource ('ERC20 token'), listing key data points like name, symbol, decimals, total supply, and metadata. It distinguishes from siblings by focusing on token metadata analysis rather than balances (e.g., get_token_balance) or transfers (e.g., transfer_erc20).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to analyze any token on EVM chains'), but does not explicitly state when not to use it or name alternatives. It implies usage for metadata retrieval rather than balance checking or transaction operations, though no explicit exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionA
Get detailed information about a specific transaction by its hash. Includes sender, recipient, value, data, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet. | |
| txHash | Yes | The transaction hash to look up (e.g., '0x1234...') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what data is included (sender, recipient, value, data) without disclosing behavioral aspects like error handling, rate limits, authentication requirements, or whether this is a read-only operation. It provides basic output content but misses critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that directly convey purpose and scope without any wasted words. It's front-loaded with the core functionality and efficiently lists included data points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with 100% schema coverage but no annotations or output schema, the description adequately covers purpose and output content but lacks behavioral transparency and usage differentiation. It's minimally viable but has clear gaps in operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (network and txHash). The description adds no additional parameter semantics beyond what's in the schema, maintaining the baseline score for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get detailed information') and resource ('about a specific transaction by its hash'), with explicit differentiation from siblings like get_transaction_receipt (which focuses on receipt data) and get_block_by_number (which focuses on blocks). It precisely identifies the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when transaction details are needed, but provides no explicit guidance on when to use this tool versus alternatives like get_transaction_receipt (for receipt-specific data) or get_latest_block (for block context). It lacks when-not-to-use instructions or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_receiptC
Get a transaction receipt by its hash
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name or chain ID. Defaults to Ethereum mainnet. | |
| txHash | Yes | The transaction hash to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Get') but doesn't describe what a transaction receipt contains, whether it's a read-only operation (implied but not explicit), error conditions (e.g., invalid hash), rate limits, or authentication needs. For a tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a simple lookup tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a blockchain transaction receipt tool with no annotations and no output schema), the description is incomplete. It doesn't explain what a receipt includes (e.g., status, gas used), potential errors, or return format. For a tool that likely returns structured data, this leaves significant gaps in understanding its behavior and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'by its hash', which aligns with the 'txHash' parameter in the schema. However, with 100% schema description coverage, the schema already documents both parameters ('txHash' and 'network') clearly. The description adds minimal value beyond the schema, meeting the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a transaction receipt by its hash' specifies the verb ('Get'), resource ('transaction receipt'), and key identifier ('by its hash'). It distinguishes from sibling tools like 'get_transaction' (which likely returns transaction details rather than receipt) and 'get_block_by_number' (different resource). However, it doesn't explicitly differentiate from all siblings, keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when this is appropriate (e.g., for confirming transaction completion) versus when to use 'get_transaction' or other siblings, nor does it specify prerequisites or exclusions. This lack of context leaves usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_contractB
Check if an address is a smart contract or an externally owned account (EOA)
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The wallet or contract address or ENS name to check (e.g., '0x1234...' or 'uniswap.eth') | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it states what the tool does, it lacks important behavioral details: it doesn't specify what happens with invalid addresses, whether ENS resolution is performed internally, what the return format looks like (boolean, object with details), or any rate limits/authentication requirements. For a tool with zero annotation coverage, this represents significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately communicates the core purpose without any fluff or redundant information. It's appropriately sized for a straightforward classification 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description should provide more complete context. It doesn't explain what the tool returns (crucial for a classification tool), doesn't mention error handling, and provides minimal behavioral transparency. For a tool with 2 parameters and no structured output documentation, the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters well-documented in the schema itself. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions (address format examples, network defaults). This meets the baseline of 3 for high schema coverage situations 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Check if') and the target resource ('an address is a smart contract or an externally owned account'), using precise terminology that distinguishes it from sibling tools like get_balance or resolve_ens. It directly communicates the binary classification purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing to determine address type, but provides no explicit guidance on when to use this tool versus alternatives like resolve_ens (which handles ENS resolution) or check_nft_ownership (which checks NFT status). There's no mention of prerequisites, error conditions, or typical use cases beyond the basic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_contractA
Read data from a smart contract by calling a view/pure function. This doesn't modify blockchain state and doesn't require gas or signing.
| Name | Required | Description | Default |
|---|---|---|---|
| abi | Yes | The ABI (Application Binary Interface) of the smart contract function, as a JSON array | |
| args | No | The arguments to pass to the function, as an array (e.g., ['0x1234...']) | |
| contractAddress | Yes | The address of the smart contract to interact with | |
| functionName | Yes | The name of the function to call on the contract (e.g., 'balanceOf') | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: that it's a read-only operation ('doesn't modify blockchain state'), has no cost implications ('doesn't require gas'), and has no authentication requirements ('doesn't require signing'). It doesn't mention rate limits or error handling, but covers the most critical aspects for a blockchain read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place: the first states the core purpose, the second provides critical behavioral context. There's zero wasted language and it's front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only contract interaction tool with no output schema, the description provides excellent context about what the tool does and its behavioral characteristics. It doesn't describe the return format or error cases, but given the 100% schema coverage and clear behavioral disclosure, it's nearly complete. The lack of output schema means some gaps remain in understanding what data will be returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters are well-documented in the schema. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions, which is acceptable given the comprehensive schema coverage. The baseline score of 3 reflects adequate but not enhanced parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Read data from a smart contract by calling a view/pure function') and resource ('smart contract'), distinguishing it from sibling tools like write_contract (which modifies state) and other query tools that don't involve contract function calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('This doesn't modify blockchain state and doesn't require gas or signing'), providing clear context for choosing it over alternatives like write_contract (which modifies state) or other tools that might require signing or gas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_ensB
Resolve an ENS name to an Ethereum address
| Name | Required | Description | Default |
|---|---|---|---|
| ensName | Yes | ENS name to resolve (e.g., 'vitalik.eth') | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. ENS resolution works best on Ethereum mainnet. Defaults to Ethereum mainnet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic function. It doesn't disclose behavioral traits like error handling (e.g., for invalid names), performance characteristics, rate limits, authentication needs, or what happens on different networks. 'Resolve' suggests a lookup operation, but details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose with zero wasted words. Every word earns its place by directly contributing to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain return values (e.g., address format, null for unresolved names), error conditions, or network dependencies hinted in the schema. For a lookup tool with potential complexity across networks, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning beyond what's in the schema (e.g., no examples of resolution outcomes or network-specific behaviors). Baseline 3 is appropriate as the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('resolve') and target resource ('ENS name to an Ethereum address'), using precise terminology. It directly distinguishes this tool from all sibling tools, which involve token operations, transfers, contract interactions, or blockchain data queries rather than ENS resolution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (converting ENS names to addresses) but provides no explicit guidance on when to use this tool versus alternatives. There are no sibling tools for ENS resolution, so differentiation isn't needed, but it doesn't mention prerequisites like network availability or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_erc1155B
Transfer ERC1155 tokens to another address. ERC1155 is a multi-token standard that can represent both fungible and non-fungible tokens in a single contract.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The quantity of tokens to send (e.g., '1' for a single NFT or '10' for 10 fungible tokens) | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. ERC1155 tokens exist across many networks. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the token owner account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. | |
| toAddress | Yes | The recipient wallet address that will receive the tokens | |
| tokenAddress | Yes | The contract address of the ERC1155 token collection (e.g., '0x76BE3b62873462d2142405439777e971754E8E77') | |
| tokenId | Yes | The ID of the specific token to transfer (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does at a high level. It doesn't disclose critical behavioral traits like transaction costs, gas requirements, confirmation times, error conditions, or what happens on failure. The description mentions ERC1155 characteristics but not tool-specific behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences. The first sentence states the core purpose, and the second provides helpful context about ERC1155. No wasted words, though it could be slightly more front-loaded with critical behavioral information given the lack of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex transaction tool with 6 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, error conditions, gas implications, or security considerations beyond what's in parameter descriptions. The ERC1155 context is helpful but doesn't compensate for missing behavioral transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter information beyond what's in the schema descriptions. The baseline score of 3 is appropriate when the schema does all the parameter documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Transfer') and resource ('ERC1155 tokens to another address'), with additional context about ERC1155 being a multi-token standard. It distinguishes from sibling tools like transfer_erc20, transfer_eth, and transfer_nft by specifying the exact token standard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the ERC1155 explanation, but doesn't explicitly state when to use this tool versus alternatives like transfer_erc20 or transfer_nft. No explicit exclusions or prerequisites are mentioned, though the parameter descriptions provide some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_erc20C
Transfer ERC20 tokens to another address
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The amount of tokens to send (in token units, e.g., '10' for 10 tokens) | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the sending account (this is used for signing and is never stored) | |
| toAddress | Yes | The recipient address | |
| tokenAddress | Yes | The address of the ERC20 token contract |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose critical behavioral traits: this is a write/mutation operation (implied by 'transfer'), requires signing with a private key (hinted in schema but not in description), has security implications (private key handling), or potential transaction costs (gas fees).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex financial transaction tool with 5 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after transfer (success/failure states), return values, error conditions, or security considerations, leaving significant gaps for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing detailed parameter documentation. The description adds no additional parameter semantics beyond what's in the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('transfer') and resource ('ERC20 tokens'), specifying the destination ('to another address'). It distinguishes from siblings like 'transfer_eth' or 'transfer_nft' by specifying ERC20 tokens, but doesn't explicitly differentiate from 'transfer_token' which might be similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'transfer_eth' or 'transfer_token'. The description lacks context about prerequisites (e.g., needing a private key) or exclusions, leaving the agent to infer usage from parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_ethB
Transfer native tokens (ETH, MATIC, etc.) to an address
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to send in ETH (or the native token of the network), as a string (e.g., '0.1') | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the sender account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. | |
| to | Yes | The recipient address or ENS name (e.g., '0x1234...' or 'vitalik.eth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does, not behavioral traits like transaction finality, gas handling, error conditions, or what happens on failure. It mentions 'SECURITY' in the schema but not in the description itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with zero waste, front-loading the core purpose. Every word earns its place without redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-risk transaction tool with no annotations and no output schema, the description is inadequate. It lacks critical behavioral context like gas estimation, transaction confirmation, error handling, or security warnings beyond what's buried in schema parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('transfer') and resource ('native tokens (ETH, MATIC, etc.)') with destination ('to an address'). It distinguishes from siblings like transfer_erc20, transfer_nft, and transfer_token by specifying native tokens only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for transferring native tokens, but doesn't explicitly state when to use this vs. alternatives like transfer_erc20 or transfer_token. No guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_nftA
Transfer an NFT (ERC721 token) from one address to another. Requires the private key of the current owner for signing the transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Most NFTs are on Ethereum mainnet, which is the default. | |
| privateKey | Yes | Private key of the NFT owner account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. | |
| toAddress | Yes | The recipient wallet address that will receive the NFT | |
| tokenAddress | Yes | The contract address of the NFT collection (e.g., '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' for Bored Ape Yacht Club) | |
| tokenId | Yes | The ID of the specific NFT to transfer (e.g., '1234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes key behavioral traits: it's a write operation (implied by 'Transfer'), requires authentication ('private key of the current owner'), and involves transaction signing. It also mentions security context about private key handling. However, it doesn't cover potential failure modes, gas requirements, or confirmation times.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with just two sentences that each earn their place. The first sentence states the core purpose, and the second adds crucial behavioral context about authentication requirements. There's zero wasted language or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no annotations and no output schema, the description provides good coverage of the essential context: what the tool does, authentication requirements, and security considerations. However, it doesn't mention what happens on success/failure, return values, or gas/network fee implications, which would be helpful given the complexity of blockchain transactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so all parameters are well-documented in the schema itself. The description adds minimal parameter semantics beyond the schema - it mentions the private key requirement but doesn't elaborate on parameter relationships or usage patterns. The baseline score of 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Transfer an NFT'), resource type ('ERC721 token'), and direction ('from one address to another'). It distinguishes this tool from sibling tools like transfer_erc20, transfer_erc1155, and transfer_eth by specifying the NFT/ERC721 token type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool by stating it's for NFT transfers and mentioning the private key requirement. However, it doesn't explicitly mention when NOT to use it or name specific alternatives like transfer_erc1155 for other token types, though the sibling list shows those alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_tokenC
Transfer ERC20 tokens to an address
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount of tokens to send as a string (e.g., '100' for 100 tokens). This will be adjusted for the token's decimals. | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the sender account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. | |
| toAddress | Yes | The recipient address or ENS name that will receive the tokens (e.g., '0x1234...' or 'vitalik.eth') | |
| tokenAddress | Yes | The contract address or ENS name of the ERC20 token to transfer (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC or 'uniswap.eth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but provides minimal behavioral information. It states the action but doesn't disclose critical traits: that this is a write operation requiring private key, that it will incur gas fees, that it's irreversible once confirmed, or what the return value contains. The schema's security note about private key handling is helpful but not in the description itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero wasted words. The description is front-loaded with the core action and gets straight to the point without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what happens after invocation (transaction hash returned? wait for confirmation?), doesn't mention gas estimation needs, and provides no context about blockchain transaction characteristics. The schema covers parameters well, but the description lacks crucial behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds no additional parameter information beyond what's already in the schema descriptions. Baseline 3 is appropriate when schema does all the parameter documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('transfer') and resource ('ERC20 tokens'), specifying the destination ('to an address'). It distinguishes from siblings like transfer_eth (native currency) and transfer_erc1155 (different token standard), but doesn't explicitly differentiate from transfer_erc20 which appears to be a duplicate tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like transfer_eth or transfer_erc1155. The description doesn't mention prerequisites (e.g., needing token approval via approve_token_spending) or context for selecting this over similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_contractA
Write data to a smart contract by calling a state-changing function. This modifies blockchain state and requires gas payment and transaction signing.
| Name | Required | Description | Default |
|---|---|---|---|
| abi | Yes | The ABI (Application Binary Interface) of the smart contract function, as a JSON array | |
| args | Yes | The arguments to pass to the function, as an array (e.g., ['0x1234...', '1000000000000000000']) | |
| contractAddress | Yes | The address of the smart contract to interact with | |
| functionName | Yes | The name of the function to call on the contract (e.g., 'transfer') | |
| network | No | Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet. | |
| privateKey | Yes | Private key of the sending account in hex format (with or without 0x prefix). SECURITY: This is used only for transaction signing and is not stored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing critical behavioral traits: it modifies blockchain state, requires gas payment, and needs transaction signing. It also mentions the private key is used only for signing and not stored, addressing security concerns. However, it doesn't cover potential failure modes, transaction confirmation times, or gas estimation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place: the first states the core purpose, and the second covers critical behavioral requirements. It's front-loaded with the main action and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex state-changing tool with no annotations and no output schema, the description does well by covering the mutation nature, gas requirements, and signing needs. However, it doesn't describe what the tool returns (e.g., transaction hash, receipt) or error conditions, which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline of 3. It doesn't compensate for any gaps because there are none in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Write data to a smart contract by calling a state-changing function') and resource ('smart contract'), distinguishing it from sibling tools like 'read_contract' (read-only) and 'estimate_gas' (estimation only). It explicitly mentions blockchain state modification, which is a key differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for state-changing functions that modify blockchain state, require gas payment, and need transaction signing. It implicitly distinguishes from 'read_contract' (no state changes) but doesn't explicitly name alternatives or specify when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
28 tool updates
v1.0.0- First observed
approve_token_spending - First observed
check_nft_ownership - First observed
estimate_gas - First observed
get_address_from_private_key - First observed
get_balance - First observed
get_block_by_number - First observed
get_chain_info - First observed
get_erc1155_balance - First observed
get_erc1155_token_uri - First observed
get_erc20_balance - First observed
get_latest_block - First observed
get_nft_balance - First observed
get_nft_info - First observed
get_supported_networks - First observed
get_token_balance - First observed
get_token_balance_erc20 - First observed
get_token_info - First observed
get_transaction - First observed
get_transaction_receipt - First observed
is_contract - First observed
read_contract - First observed
resolve_ens - First observed
transfer_erc1155 - First observed
transfer_erc20 - First observed
transfer_eth - First observed
transfer_nft - First observed
transfer_token - First observed
write_contract
TDQS
The tool set has clear distinctions for most operations, but there are notable overlaps that could cause confusion. For example, get_token_balance and get_erc20_balance appear to serve the same purpose, and transfer_erc20 and transfer_token are redundant. However, descriptions help clarify specific use cases, such as differentiating between ERC20, ERC721, and ERC1155 token types.
Most tools follow a consistent verb_noun pattern (e.g., get_balance, transfer_erc20, read_contract), making them predictable and readable. Minor deviations exist, such as check_nft_ownership and is_contract, which use different verb styles but still fit the overall naming convention without causing significant confusion.
With 28 tools, the count feels heavy for an EVM server, as many tools could be consolidated or generalized. While the domain is broad, the high number may overwhelm agents and lead to inefficiency. A more streamlined set of 15-20 tools would better balance coverage and usability.
The tool surface provides comprehensive coverage for EVM operations, including token interactions, contract reads/writes, and blockchain queries. Minor gaps exist, such as missing tools for advanced DeFi operations or event listening, but core workflows like transfers, balances, and contract interactions are well-covered, allowing agents to handle most common tasks effectively.
Maintenance
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
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Provide AI agents and automation tools with contextual access to blockchain data including balance…
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server giving AI agents one-connection access to crypto & DeFi data: DeFi protocol TVL, stableco
Related MCP Servers
- AlicenseDqualityDmaintenanceA Model Context Protocol server that gives LLMs the ability to interact with Ethereum networks, manage wallets, query blockchain data, and execute smart contract operations through a standardized interface.542014MIT
- AlicenseAqualityDmaintenanceA comprehensive server that enables AI agents to interact with multiple EVM-compatible blockchain networks through a unified interface, supporting ENS resolution, token operations, and smart contract interactions.25127MIT
- -licenseNot gradedqualityNot gradedmaintenanceComprehensive 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-
- AlicenseBqualityDmaintenanceA Model Context Protocol server that allows LLMs to interact with blockchain through MetaMask, keeping private keys securely in your crypto wallet while enabling transactions and blockchain operations.281512MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mcpdotdirect/evm-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server