Skip to main content
Glama

Servidor EVM MCP

Licencia: MITRedes EVMMecanografiadoViem

Un servidor integral de Protocolo de Contexto de Modelo (MCP) que proporciona servicios de blockchain en múltiples redes compatibles con EVM. Este servidor permite a los agentes de IA interactuar con Ethereum, Optimism, Arbitrum, Base, Polygon y muchas otras cadenas de EVM mediante una interfaz unificada.

📋 Contenido

Related MCP server: EVM MCP Server

🔭 Descripción general

El servidor MCP EVM aprovecha el Protocolo de Contexto de Modelo para proporcionar servicios de blockchain a agentes de IA. Admite una amplia gama de servicios, entre ellos:

  • Lectura del estado de la blockchain (saldos, transacciones, bloques, etc.)

  • Interactuar con contratos inteligentes

  • Transferencia de tokens (nativos, ERC20, ERC721, ERC1155)

  • Consulta de metadatos y saldos de tokens

  • Servicios específicos de la cadena en más de 30 redes EVM

  • Resolución de nombres ENS para todos los parámetros de dirección (use nombres legibles por humanos como 'vitalik.eth' en lugar de direcciones)

Todos los servicios se exponen mediante una interfaz consistente de herramientas y recursos MCP, lo que facilita a los agentes de IA descubrir y utilizar la funcionalidad de la cadena de bloques. Todas las herramientas que aceptan direcciones de Ethereum también admiten nombres ENS , resolviéndolos automáticamente en segundo plano.

✨ Características

Acceso a datos de blockchain

  • Compatibilidad con múltiples cadenas para más de 30 redes compatibles con EVM

  • Información de la cadena , incluidos blockNumber, chainId y RPC

  • Bloquear el acceso a los datos por número, hash o último

  • Detalles de transacciones y recibos con registros decodificados

  • Saldos de direcciones para tokens nativos y todos los estándares de tokens

  • Resolución ENS para direcciones Ethereum legibles por humanos (use 'vitalik.eth' en lugar de '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')

Servicios de tokens

  • Tokens ERC20

    • Obtener metadatos del token (nombre, símbolo, decimales, suministro)

    • Consultar saldos de tokens

    • Transferir tokens entre direcciones

    • Aprobar las asignaciones de gastos

  • NFT (ERC721)

    • Obtener metadatos de colección y token

    • Verificar la propiedad del token

    • Transferir NFT entre direcciones

    • Recuperar URI de tokens y contar existencias

  • Tokens múltiples (ERC1155)

    • Obtener saldos de tokens y metadatos

    • Tokens de transferencia con cantidad

    • URI de token de acceso

Interacciones de contratos inteligentes

  • Leer el estado del contrato a través de funciones de vista/puras

  • Servicios de escritura con firma de clave privada

  • Verificación de contratos para distinguirlos de los EOA

  • Recuperación y filtrado de registros de eventos

Soporte integral para transacciones

  • Transferencias de tokens nativos en todas las redes compatibles

  • Estimación de gas para la planificación de transacciones

  • Estado de la transacción e información del recibo

  • Manejo de errores con mensajes descriptivos

🌐 Redes compatibles

Redes principales

  • Ethereum (ETH)

  • Optimismo (OP)

  • Arbitrum (ARB)

  • Arbitrum Nova

  • Base

  • Polígono (MATIC)

  • Polígono zkEVM

  • Avalancha (AVAX)

  • Cadena inteligente de Binance (BSC)

  • Era zkSync

  • Línea

  • Celo

  • Gnosis (xDai)

  • Fantom (FTM)

  • Filecoin (FIL)

  • Rayo de luna

  • Río de la luna

  • Cronos

  • Voluta

  • Manto

  • Manta

  • Explosión

  • Fraxtal

  • Modo

  • Métis

  • Croma

  • Zora

  • Aurora

  • Canto

Redes de prueba

  • Sepolia

  • Optimismo Sepolia

  • Arbitrum Sepolia

  • Sepolia base

  • Polígono Amoy

  • Avalancha del Fuji

  • Red de pruebas BSC

  • zkSync Sepolia

  • Línea Sepolia

  • Sepolia de pergamino

  • Sepolia del manto

  • Manta Sepolia

  • Sepolia explosiva

  • Red de pruebas Fraxtal

  • Modo Testnet

  • Sepolia mestiza

  • Sepolia Kroma

  • Zora Sepolia

  • Alfajores de Celo

  • Goerli

  • Holesky

🛠️ Requisitos previos

  • Bun 1.0.0 o superior

  • Node.js 18.0.0 o superior (si no usa Bun)

📦 Instalación

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

# Install dependencies with Bun
bun install

# Or with npm
npm install

⚙️ Configuración del servidor

El servidor utiliza la siguiente configuración predeterminada:

  • ID de cadena predeterminado : 1 (red principal de Ethereum)

  • Puerto del servidor : 3001

  • Host del servidor : 0.0.0.0 (accesible desde cualquier interfaz de red)

Estos valores están codificados en la aplicación. Si necesita modificarlos, puede editar los siguientes archivos:

  • Para la configuración de la cadena: src/core/chains.ts

  • Para la configuración del servidor: src/server/http-server.ts

🚀 Uso

Usando npx (No requiere instalación)

Puede ejecutar el servidor MCP EVM directamente sin instalación usando npx:

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

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

Ejecución del servidor local

Inicie el servidor usando stdio (para integrar en herramientas CLI):

# Start the stdio server
bun start

# Development mode with auto-reload
bun dev

O inicie el servidor HTTP con SSE para aplicaciones web:

# Start the HTTP server
bun start:http

# Development mode with auto-reload
bun dev:http

Conectarse al servidor

Conéctese a este servidor MCP mediante cualquier cliente compatible con MCP. Para realizar pruebas y depurar, puede usar el Inspector MCP .

Conectando desde el cursor

Para conectarse al servidor MCP desde Cursor:

  1. Abra Cursor y vaya a Configuración (ícono de engranaje en la parte inferior izquierda)

  2. Haga clic en "Funciones" en la barra lateral izquierda.

  3. Desplácese hacia abajo hasta la sección "Servidores MCP".

  4. Haga clic en "Agregar nuevo servidor MCP"

  5. Introduzca los siguientes datos:

    • Nombre del servidor: evm-mcp-server

    • Tipo: command

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

  6. Haga clic en "Guardar"

Una vez conectado, podrá usar las funciones del servidor MCP directamente desde Cursor. El servidor aparecerá en la lista de servidores MCP y podrá habilitarlo o deshabilitarlo según sea necesario.

Usando mcp.json con Cursor

Para una configuración más portátil que pueda compartir con su equipo o usar en diferentes proyectos, puede crear un archivo .cursor/mcp.json en el directorio raíz de su proyecto:

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

Coloque este archivo en el directorio .cursor de su proyecto (créelo si no existe) y Cursor detectará y usará automáticamente estas configuraciones del servidor MCP al trabajar en ese proyecto. Este enfoque facilita:

  1. Comparte configuraciones de MCP con tu equipo

  2. Control de versiones de su configuración de MCP

  3. Utilice diferentes configuraciones de servidor para diferentes proyectos

Ejemplo: Modo HTTP con SSE

Si está desarrollando una aplicación web y desea conectarse al servidor HTTP con eventos enviados por el servidor (SSE), puede usar esta configuración:

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

Esto se conecta directamente al punto final SSE del servidor HTTP, lo que resulta útil para:

  • Aplicaciones web que necesitan conectarse al servidor MCP desde el navegador

  • Entornos donde ejecutar comandos locales no es ideal

  • Compartir una única instancia de servidor MCP entre varios usuarios o aplicaciones

Para utilizar esta configuración:

  1. Crea un directorio .cursor en la raíz de tu proyecto si no existe

  2. Guarde el JSON anterior como mcp.json en el directorio .cursor

  3. Reinicie el cursor o abra su proyecto

  4. El cursor detectará la configuración y ofrecerá habilitar el/los servidor(es)

Ejemplo: Uso del servidor MCP en Cursor

Tras configurar el servidor MCP con mcp.json , puede usarlo fácilmente en Cursor. A continuación, se muestra un ejemplo de flujo de trabajo:

  1. Crea un nuevo archivo JavaScript/TypeScript en tu proyecto:

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

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

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

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

main();
  1. Con el archivo abierto en Cursor, puedes pedirle a Cursor que:

    • Consulta el saldo actual de ETH de vitalik.eth.

    • Consulta el precio de USDC en Ethereum.

    • "Muéstrame el último bloque sobre optimismo"

    • "Comprobar si 0x1234... es una dirección de contrato"

  2. Cursor utilizará el servidor MCP para ejecutar estas operaciones y devolver los resultados directamente en su conversación.

El servidor MCP maneja toda la comunicación de la cadena de bloques y al mismo tiempo permite que Cursor comprenda y ejecute tareas relacionadas con la cadena de bloques a través del lenguaje natural.

Conexión mediante Claude CLI

Si está utilizando Claude CLI, puede conectarse al servidor MCP con solo dos comandos:

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

# Start Claude with the MCP server enabled
claude

Ejemplo: Obtener un saldo de token con 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
// }

Ejemplo: Resolución de un nombre ENS

// 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"
// }

Referencia de API

Herramientas

El servidor proporciona las siguientes herramientas MCP para agentes. Todas las herramientas que aceptan parámetros de dirección admiten tanto direcciones de Ethereum como nombres ENS.

Servicios de tokens

Nombre de la herramienta

Descripción

Parámetros clave

get-token-info

Obtener metadatos del token ERC20

tokenAddress (dirección/ENS), network

get-token-balance

Consultar el saldo del token ERC20

tokenAddress (dirección/ENS), ownerAddress (dirección/ENS), network

transfer-token

Transferir tokens ERC20

privateKey , tokenAddress (dirección/ENS), toAddress (dirección/ENS), amount , network

approve-token-spending

Aprobar asignaciones de tokens

privateKey , tokenAddress (dirección/ENS), spenderAddress (dirección/ENS), amount , network

get-nft-info

Obtener metadatos de NFT

tokenAddress (dirección/ENS), tokenId , network

check-nft-ownership

Verificar la propiedad del NFT

tokenAddress (dirección/ENS), tokenId , ownerAddress (dirección/ENS), network

transfer-nft

Transferir un NFT

privateKey , tokenAddress (dirección/ENS), tokenId , toAddress (dirección/ENS), network

get-nft-balance

Contar los NFT que se poseen

tokenAddress (dirección/ENS), ownerAddress (dirección/ENS), network

get-erc1155-token-uri

Obtener metadatos de ERC1155

tokenAddress (dirección/ENS), tokenId , network

get-erc1155-balance

Consultar saldo ERC1155

tokenAddress (dirección/ENS), tokenId , ownerAddress (dirección/ENS), network

transfer-erc1155

Transferir tokens ERC1155

privateKey , tokenAddress (dirección/ENS), tokenId , amount , toAddress (dirección/ENS), network

Servicios de blockchain

Nombre de la herramienta

Descripción

Parámetros clave

get-chain-info

Obtener información de la red

network

get-balance

Obtener saldo de token nativo

address (dirección/ENS), network

transfer-eth

Enviar tokens nativos

privateKey , to (dirección/ENS), amount , network

get-transaction

Obtener detalles de la transacción

txHash , network

read-contract

Leer el estado del contrato inteligente

contractAddress (dirección/ENS), abi , functionName , args , network

write-contract

Escribir en un contrato inteligente

contractAddress (dirección/ENS), abi , functionName , args , privateKey , network

is-contract

Comprobar si la dirección es un contrato

address (dirección/ENS), network

resolve-ens

Resolver el nombre ENS a la dirección

ensName , network

Recursos

El servidor expone los datos de la cadena de bloques a través de las siguientes URI de recursos MCP. Todas las URI de recursos que aceptan direcciones también admiten nombres ENS, que se resuelven automáticamente en direcciones.

Recursos de blockchain

Patrón de URI de recurso

Descripción

evm://{network}/chain

Información de la cadena para una red específica

evm://chain

Información sobre la cadena principal de Ethereum

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

Bloquear datos por número

evm://{network}/block/latest

Últimos datos de bloque

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

Saldo de tokens nativos

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

Detalles de la transacción

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

Recibo de transacción con registros

Recursos de tokens

Patrón de URI de recurso

Descripción

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

Información del token ERC20

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

Saldo de tokens ERC20

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

Información del token NFT (ERC721)

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

Verificación de propiedad de NFT

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

URI del token ERC1155

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

Saldo del token ERC1155

Consideraciones de seguridad

  • Las claves privadas se utilizan únicamente para firmar transacciones y nunca las almacena el servidor.

  • Considere implementar mecanismos de autenticación adicionales para el uso en producción

  • Utilice HTTPS para el servidor HTTP en entornos de producción

  • Implementar la limitación de velocidad para evitar el abuso

  • Para servicios de alto valor, considere agregar pasos de confirmación

📁 Estructura del proyecto

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

🛠️ Desarrollo

Para modificar o ampliar el servidor:

  1. Agregue nuevos servicios en el archivo apropiado en src/core/services/

  2. Registrar nuevas herramientas en src/core/tools.ts

  3. Registrar nuevos recursos en src/core/resources.ts

  4. Agregar nuevo soporte de red en src/core/chains.ts

  5. Para cambiar la configuración del servidor, edite los valores codificados en src/server/http-server.ts

📄 Licencia

Este proyecto está licenciado bajo los términos de la Licencia MIT .

Available Tools

25 tools
approve_token_spendingA

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

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

TDQS

A4.2/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

get_allowanceA
Read-onlyIdempotent

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

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

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

get_balanceA
Read-onlyIdempotent

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

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

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

get_blockB
Read-onlyIdempotent

Get block details by block number or hash

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

TDQS

B3.3/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness3/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

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

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

get_chain_infoA
Read-onlyIdempotent

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

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

TDQS

A4.2/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

get_contract_abiA
Read-onlyIdempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

get_erc1155_balanceB
Read-onlyIdempotent

Get ERC1155 token balance for an address

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

TDQS

B3.3/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

The description is a single, direct sentence with no wasted words, front-loading the core purpose ('Get ERC1155 token balance for an address'). It efficiently communicates the essential action without redundancy or unnecessary elaboration, making it easy for an agent to parse quickly.

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

Completeness3/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

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

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

get_gas_priceA
Read-only

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

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

get_latest_blockB
Read-only

Get the latest block from the network

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

TDQS

B3.3/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness3/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

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

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

get_nft_infoA
Read-onlyIdempotent

Get information about an ERC721 NFT including metadata URI

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

get_supported_networksA
Read-onlyIdempotent

Get a list of all supported EVM networks

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

get_token_balanceA
Read-onlyIdempotent

Get the ERC20 token balance for an address

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

get_transactionB
Read-onlyIdempotent

Get transaction details by transaction hash

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

TDQS

B3.3/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness3/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines2/5

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

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

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

get_transaction_receiptA
Read-onlyIdempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

get_wallet_addressA
Read-onlyIdempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

lookup_ens_addressA
Read-onlyIdempotent

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

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

TDQS

A4/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

multicallA
Read-onlyIdempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

read_contractA
Read-onlyIdempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

Three sentences with zero waste: first states core purpose, second explains ABI fetching behavior, third provides usage guidance. Front-loaded with essential information, appropriately sized for the tool's complexity.

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

resolve_ens_nameA
Read-onlyIdempotent

Resolve an ENS name to an Ethereum address

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

TDQS

A4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines3/5

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

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

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

sign_messageA
Idempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

sign_typed_dataA
Idempotent

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

transfer_erc20A
Destructive

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

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

TDQS

A3.9/5.0
Behavior3/5

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

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

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

Conciseness5/5

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

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

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

Completeness3/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

transfer_nativeA
Destructive

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

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

TDQS

A3.8/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose4/5

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

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

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

Usage Guidelines3/5

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

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

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

wait_for_transactionA
Read-only

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

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

TDQS

A4.2/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines4/5

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

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

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

write_contractA
Destructive

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

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

TDQS

A4.4/5.0
Behavior4/5

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

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

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

Conciseness5/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 38 tool updatesv1.0.0
    • Changedapprove_token_spending6 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"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."New value: +"Amount to approve (in token units). Use '0' to revoke approval."
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / privateKey
        Removed value: -{
        -  "description": "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.",
        -  "type": "string"
        -}
      • changedInput schema / properties / spenderAddress / description
        Previous value: -"The contract address being approved to spend your tokens (e.g., a DEX or lending protocol)"New value: +"The address that will be allowed to spend tokens (usually a contract)"
      • changedInput schema / properties / tokenAddress / description
        Previous value: -"The contract address of the ERC20 token to approve for spending (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC on Ethereum)"New value: +"The ERC20 token contract address"
      • changedInput schema / required
        Previous value: -[
        -  "privateKey",
        -  "tokenAddress",
        -  "spenderAddress",
        -  "amount"
        -]New value: +[
        +  "tokenAddress",
        +  "spenderAddress",
        +  "amount"
        +]
    • Removedcheck_nft_ownership
    • Removedestimate_gas
    • Removedget_address_from_private_key
    • Addedget_allowance
    • Changedget_balance2 fields changed
      • changedInput schema / properties / address / description
        Previous value: -"The wallet address or ENS name (e.g., '0x1234...' or 'vitalik.eth') to check the balance for"New value: +"The wallet address or ENS name"
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
    • Addedget_block
    • Removedget_block_by_number
    • Changedget_chain_info1 field changed
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet."New value: +"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base') or chain ID. Defaults to Ethereum mainnet."
    • Addedget_contract_abi
    • Changedget_erc1155_balance7 fields changed
      • addedInput schema / properties / address
        Added value: +{
        +  "description": "The owner address or ENS name",
        +  "type": "string"
        +}
      • addedInput schema / properties / contractAddress
        Added value: +{
        +  "description": "The ERC1155 contract address",
        +  "type": "string"
        +}
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. ERC1155 tokens exist across many networks. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / ownerAddress
        Removed value: -{
        -  "description": "The wallet address to check the token balance for (e.g., '0x1234...')",
        -  "type": "string"
        -}
      • removedInput schema / properties / tokenAddress
        Removed value: -{
        -  "description": "The contract address of the ERC1155 token collection (e.g., '0x76BE3b62873462d2142405439777e971754E8E77')",
        -  "type": "string"
        -}
      • changedInput schema / properties / tokenId / description
        Previous value: -"The ID of the specific token to check the balance for (e.g., '1234')"New value: +"The token ID"
      • changedInput schema / required
        Previous value: -[
        -  "tokenAddress",
        -  "tokenId",
        -  "ownerAddress"
        -]New value: +[
        +  "contractAddress",
        +  "tokenId",
        +  "address"
        +]
    • Removedget_erc1155_token_uri
    • Removedget_erc20_balance
    • Addedget_gas_price
    • Removedget_nft_balance
    • Changedget_nft_info5 fields changed
      • addedInput schema / properties / contractAddress
        Added value: +{
        +  "description": "The NFT contract address",
        +  "type": "string"
        +}
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Most NFTs are on Ethereum mainnet, which is the default."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / tokenAddress
        Removed value: -{
        -  "description": "The contract address of the NFT collection (e.g., '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' for Bored Ape Yacht Club)",
        -  "type": "string"
        -}
      • changedInput schema / properties / tokenId / description
        Previous value: -"The ID of the specific NFT token to query (e.g., '1234')"New value: +"The NFT token ID"
      • changedInput schema / required
        Previous value: -[
        -  "tokenAddress",
        -  "tokenId"
        -]New value: +[
        +  "contractAddress",
        +  "tokenId"
        +]
    • Changedget_token_balance5 fields changed
      • addedInput schema / properties / address
        Added value: +{
        +  "description": "The wallet address or ENS name",
        +  "type": "string"
        +}
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / ownerAddress
        Removed value: -{
        -  "description": "The wallet address or ENS name to check the balance for (e.g., '0x1234...' or 'vitalik.eth')",
        -  "type": "string"
        -}
      • changedInput schema / properties / tokenAddress / description
        Previous value: -"The contract address or ENS name of the ERC20 token (e.g., '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' for USDC or 'uniswap.eth')"New value: +"The ERC20 token contract address"
      • changedInput schema / required
        Previous value: -[
        -  "tokenAddress",
        -  "ownerAddress"
        -]New value: +[
        +  "address",
        +  "tokenAddress"
        +]
    • Removedget_token_balance_erc20
    • Removedget_token_info
    • Changedget_transaction2 fields changed
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • changedInput schema / properties / txHash / description
        Previous value: -"The transaction hash to look up (e.g., '0x1234...')"New value: +"Transaction hash (0x...)"
    • Changedget_transaction_receipt1 field changed
      • changedInput schema / properties / txHash / description
        Previous value: -"The transaction hash to look up"New value: +"Transaction hash (0x...)"
    • Addedget_wallet_address
    • Removedis_contract
    • Addedlookup_ens_address
    • Addedmulticall
    • Changedread_contract8 fields changed
      • removedInput schema / properties / abi
        Removed value: -{
        -  "description": "The ABI (Application Binary Interface) of the smart contract function, as a JSON array",
        -  "type": "array"
        -}
      • addedInput schema / properties / abiJson
        Added value: +{
        +  "description": "Full contract ABI as JSON string (optional - will auto-fetch verified contract ABI if not provided)",
        +  "type": "string"
        +}
      • changedInput schema / properties / args / description
        Previous value: -"The arguments to pass to the function, as an array (e.g., ['0x1234...'])"New value: +"Function arguments as strings (e.g., ['0xAddress'] for balanceOf)"
      • addedInput schema / properties / args / items
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / contractAddress / description
        Previous value: -"The address of the smart contract to interact with"New value: +"The contract address"
      • changedInput schema / properties / functionName / description
        Previous value: -"The name of the function to call on the contract (e.g., 'balanceOf')"New value: +"Function name (e.g., 'name', 'symbol', 'balanceOf', 'totalSupply', 'owner')"
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • changedInput schema / required
        Previous value: -[
        -  "contractAddress",
        -  "abi",
        -  "functionName"
        -]New value: +[
        +  "contractAddress",
        +  "functionName"
        +]
    • Removedresolve_ens
    • Addedresolve_ens_name
    • Addedsign_message
    • Addedsign_typed_data
    • Removedtransfer_erc1155
    • Changedtransfer_erc207 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"The amount of tokens to send (in token units, e.g., '10' for 10 tokens)"New value: +"Amount to send (in token units, accounting for decimals)"
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', etc.) or chain ID. Supports all EVM-compatible networks. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / privateKey
        Removed value: -{
        -  "description": "Private key of the sending account (this is used for signing and is never stored)",
        -  "type": "string"
        -}
      • addedInput schema / properties / to
        Added value: +{
        +  "description": "Recipient address or ENS name",
        +  "type": "string"
        +}
      • removedInput schema / properties / toAddress
        Removed value: -{
        -  "description": "The recipient address",
        -  "type": "string"
        -}
      • changedInput schema / properties / tokenAddress / description
        Previous value: -"The address of the ERC20 token contract"New value: +"The ERC20 token contract address"
      • changedInput schema / required
        Previous value: -[
        -  "privateKey",
        -  "tokenAddress",
        -  "toAddress",
        -  "amount"
        -]New value: +[
        +  "tokenAddress",
        +  "to",
        +  "amount"
        +]
    • Removedtransfer_eth
    • Addedtransfer_native
    • Removedtransfer_nft
    • Removedtransfer_token
    • Addedwait_for_transaction
    • Changedwrite_contract10 fields changed
      • removedInput schema / properties / abi
        Removed value: -{
        -  "description": "The ABI (Application Binary Interface) of the smart contract function, as a JSON array",
        -  "type": "array"
        -}
      • addedInput schema / properties / abiJson
        Added value: +{
        +  "description": "Full contract ABI as JSON string (optional - will auto-fetch verified contract ABI if not provided)",
        +  "type": "string"
        +}
      • changedInput schema / properties / args / description
        Previous value: -"The arguments to pass to the function, as an array (e.g., ['0x1234...', '1000000000000000000'])"New value: +"Function arguments as strings (e.g., ['0xAddress', '1000000'])"
      • addedInput schema / properties / args / items
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / contractAddress / description
        Previous value: -"The address of the smart contract to interact with"New value: +"The contract address"
      • changedInput schema / properties / functionName / description
        Previous value: -"The name of the function to call on the contract (e.g., 'transfer')"New value: +"Function name to call (e.g., 'mint', 'swap', 'stake', 'approve')"
      • changedInput schema / properties / network / description
        Previous value: -"Network name (e.g., 'ethereum', 'optimism', 'arbitrum', 'base', 'polygon') or chain ID. Defaults to Ethereum mainnet."New value: +"Network name or chain ID. Defaults to Ethereum mainnet."
      • removedInput schema / properties / privateKey
        Removed value: -{
        -  "description": "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.",
        -  "type": "string"
        -}
      • addedInput schema / properties / value
        Added value: +{
        +  "description": "ETH value to send with transaction in ether (e.g., '0.1' for payable functions)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "contractAddress",
        -  "abi",
        -  "functionName",
        -  "args",
        -  "privateKey"
        -]New value: +[
        +  "contractAddress",
        +  "functionName"
        +]
  2. 28 tool updates
    • First observedapprove_token_spending
    • First observedcheck_nft_ownership
    • First observedestimate_gas
    • First observedget_address_from_private_key
    • First observedget_balance
    • First observedget_block_by_number
    • First observedget_chain_info
    • First observedget_erc1155_balance
    • First observedget_erc1155_token_uri
    • First observedget_erc20_balance
    • First observedget_latest_block
    • First observedget_nft_balance
    • First observedget_nft_info
    • First observedget_supported_networks
    • First observedget_token_balance
    • First observedget_token_balance_erc20
    • First observedget_token_info
    • First observedget_transaction
    • First observedget_transaction_receipt
    • First observedis_contract
    • First observedread_contract
    • First observedresolve_ens
    • First observedtransfer_erc1155
    • First observedtransfer_erc20
    • First observedtransfer_eth
    • First observedtransfer_nft
    • First observedtransfer_token
    • First observedwrite_contract

TDQS

A3.9/5.0

Scored across 25 tools

Disambiguation4/5

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

Naming Consistency5/5

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

Tool Count3/5

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

Completeness5/5

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

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

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

Appeared in Searches