evm-mcp

Un servidor MCP que proporciona acceso completo a los métodos JSON-RPC de la Máquina Virtual de Ethereum (EVM). Funciona con cualquier proveedor de nodos compatible con EVM, incluyendo Infura, Alchemy, QuickNode, nodos locales y más.

Documentación

⛽ Servidor EVM MCP

Acceso completo a EVM JSON-RPC en tu flujo de trabajo de IA. Consulta cualquier red compatible con EVM (Ethereum, Polygon, Arbitrum, Optimism, BSC y más) a través de cualquier proveedor de nodos. Funciona con Infura, Alchemy, QuickNode, nodos locales y más.

Un servidor MCP (Model Context Protocol) que proporciona acceso integral a los métodos JSON-RPC de la Máquina Virtual de Ethereum (EVM) para entornos de codificación con IA como Cursor y Claude Desktop.

¿Por qué usar EVM MCP?

  • 🌐 Cualquier red EVM – Ethereum, Polygon, Arbitrum, Optimism, BSC, Avalanche y más
  • 🔌 Cualquier proveedor de nodos – Infura, Alchemy, QuickNode, nodos locales o RPC personalizado
  • 📊 Más de 20 métodos RPC – Acceso completo a datos de blockchain, transacciones y contratos
  • ⚡ Configuración sencilla – Instalación con un clic en Cursor o configuración manual simple
  • 🔧 Configuración flexible – Funciona con cualquier endpoint compatible con JSON-RPC

Inicio rápido

¿Listo para interactuar con blockchains EVM? Instala en segundos:

Instalar en Cursor (recomendado):

🔗 Instalar en Cursor

O instala manualmente:

npm install -g @jamesanz/evm-mcp
# Or from source:
git clone https://github.com/JamesANZ/evm-mcp.git
cd evm-mcp && npm install && npm run build

Características

🔢 Datos de blockchain

  • eth_blockNumber – Obtener el último número de bloque
  • eth_getBalance – Obtener saldo de cuenta
  • eth_getTransactionCount – Obtener recuento de transacciones (nonce)
  • eth_getBlockByNumber – Obtener información del bloque
  • eth_getTransactionByHash – Obtener detalles de la transacción
  • eth_getTransactionReceipt – Obtener recibo de transacción
  • eth_getCode – Obtener bytecode del contrato
  • eth_getStorageAt – Obtener valor de almacenamiento

🔄 Transacciones

  • eth_call – Ejecutar llamada a contrato
  • eth_estimateGas – Estimar gas para transacción
  • eth_sendRawTransaction – Enviar transacción firmada
  • eth_gasPrice – Obtener precio actual del gas

🧪 Simulación de transacciones (solo lectura, nunca transmite)

Crea transacciones en lenguaje natural y simúlalas contra un estado EVM bifurcado/sobrescrito. Informa si una transacción tendría éxito o se revertiría, el motivo de la reversión en lenguaje sencillo, el gas estimado y los cambios de saldo/estado. Admite alias de direcciones y nombres ENS (p. ej., alice.eth). Por defecto, el remitente recibe ETH virtual para que una simulación pueda ejecutarse «desde» cualquier dirección; configura fund: false para usar saldos reales.

  • simulate_native_transfer – Simular el envío de moneda nativa (p. ej., «Transferir 100 ETH de A a B»)
  • simulate_erc20_transfer – Simular una transferencia ERC20 con cantidades legibles (p. ej., «Transferir 10 USDC a alice.eth desde fun.eth»)
  • simulate_contract_call – Codificar una firma de función + argumentos y simular la llamada
  • simulate_transaction – Simular una transacción sin procesar (de/para/valor/datos)
  • encode_function_data – Codificar calldata a partir de una firma legible (helper puro, sin RPC)

Estas herramientas solo usan eth_call, eth_estimateGas y debug_traceCall (cuando el proveedor lo admite). Nunca firman ni envían una transacción real. Se usan diffs de estado reales cuando debug_traceCall está disponible; de lo contrario, los cambios se infieren de la intención decodificada.

📊 Eventos y registros

  • eth_getLogs – Obtener registros de eventos

🌍 Red

  • list_supported_networks – Listar redes y proveedores configurados
  • list_known_addresses – Listar alias de billetera configurados y direcciones conocidas de tokens/contratos
  • eth_chainId – Obtener ID de cadena
  • net_version – Obtener versión de red
  • net_listening – Comprobar si está escuchando
  • net_peerCount – Obtener número de pares

🌐 Web3

  • web3_clientVersion – Obtener versión del cliente
  • web3_sha3 – Aplicar hash a datos con Keccak-256

Instalación

Cursor (un clic)

Haz clic en el enlace de instalación anterior o usa:

cursor://anysphere.cursor-deeplink/mcp/install?name=evm-mcp&config=eyJldm0tbWNwIjp7ImNvbW1hbmQiOiJucHgiLCJhcmdzIjpbIi15IiwiQGphbWVzYW56L2V2bS1tY3AiXX19

Instalación manual

Requisitos: Node.js 18+ y npm

# Clone and build
git clone https://github.com/JamesANZ/evm-mcp.git
cd evm-mcp
npm install
npm run build

# Set provider API keys
export INFURA_API_KEY="your-infura-api-key"
export DEFAULT_NETWORK="ethereum"
export DEFAULT_PROVIDER="infura"

# Run server
npm start

Claude Desktop

Añade a claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "evm-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/evm-mcp/build/index.js"],
      "env": {
        "INFURA_API_KEY": "your-infura-api-key",
        "DEFAULT_NETWORK": "ethereum",
        "DEFAULT_PROVIDER": "infura",
        "RPC_PROVIDER_ORDER": "infura,alchemy"
      }
    }
  }
}

Reinicia Claude Desktop después de la configuración.

Configuración

Variables de entorno

VariableRequeridaDescripción
INFURA_API_KEYUna de*Clave de API del proyecto Infura (preajuste integrado)
ALCHEMY_API_KEYUna de*Clave de API de la aplicación Alchemy (preajuste integrado)
DEFAULT_NETWORKNoSlug de cadena o ID de cadena predeterminado (predeterminado: ethereum)
DEFAULT_PROVIDERNoSlug de proveedor preferido (infura, alchemy o personalizado)
RPC_PROVIDER_ORDERNoOrden de respaldo de proveedores separado por comas (predeterminado: infura,alchemy)
CUSTOM_PROVIDERSUna de*Matriz JSON de proveedores definidos por el usuario
CUSTOM_NETWORKSUna de*Matriz JSON de redes definidas por el usuario
KNOWN_ADDRESSESNoMatriz JSON de tokens/contratos conocidos (limitados a red)
WALLET_ADDRESSESNoMatriz JSON de alias personales de billetera y contratos

*Se requiere al menos una clave de API de proveedor, un proveedor personalizado o una red personalizada con rpcUrl.

Proveedores integrados (Infura / Alchemy)

Configura una clave de API y el servidor construye automáticamente las URL de RPC para las redes compatibles:

{
  "INFURA_API_KEY": "your-infura-key",
  "DEFAULT_NETWORK": "ethereum",
  "DEFAULT_PROVIDER": "infura",
  "RPC_PROVIDER_ORDER": "infura,alchemy"
}

Cada herramienta RPC acepta un parámetro opcional network (slug, nombre o ID de cadena). Cuando se omite, se usa DEFAULT_NETWORK.

{
  "tool": "eth_chainId",
  "arguments": { "network": "polygon" }
}

Usa list_supported_networks para descubrir redes y proveedores configurados.

Proveedores personalizados (CUSTOM_PROVIDERS)

Registra cualquier proveedor RPC proporcionando una plantilla de URL base y URL específicas por red:

"CUSTOM_PROVIDERS": "[{\"slug\":\"quicknode\",\"apiKeyEnv\":\"QUICKNODE_API_KEY\",\"baseUrl\":\"https://rpc.example.com/v1/{apiKey}\",\"networkUrls\":{\"ethereum\":\"https://eth.quiknode.pro/{apiKey}/\",\"polygon\":\"https://polygon.quiknode.pro/{apiKey}/\"}}]"
  • Los valores absolutos de networkUrls se usan directamente (con sustitución de {apiKey}).
  • Las rutas relativas (que comienzan con /) se añaden a baseUrl.

Redes personalizadas (CUSTOM_NETWORKS)

Registra cadenas arbitrarias por nombre:

"CUSTOM_NETWORKS": "[{\"name\":\"HyperEVM\",\"slug\":\"hyperevm\",\"chainId\":999,\"rpcUrl\":\"https://rpc.hyperliquid.xyz/evm\"}]"

O enruta a través de un proveedor configurando provider y añadiendo el slug de red al networkUrls de ese proveedor.

Direcciones conocidas (KNOWN_ADDRESSES)

Registra tokens y contratos por nombre para que las herramientas acepten alias como USDC en lugar de direcciones hex sin procesar. Cada entrada está limitada a una red:

"KNOWN_ADDRESSES": "[{\"name\":\"USDC\",\"address\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"network\":\"ethereum\",\"type\":\"token\",\"decimals\":6,\"aliases\":[\"usd-coin\"]}]"
CampoRequeridoDescripción
namesíClave de búsqueda principal
addresssíDirección de contrato con checksum
networksíSlug de cadena, nombre, ID de cadena o alias de red
typenotoken o contract (predeterminado: contract)
decimalsnoDecimales del token para saldos formateados
aliasesnoClaves de búsqueda adicionales

Cuando se llama a eth_getBalance con un alias de token, el servidor usa la primera billetera configurada en WALLET_ADDRESSES como titular del token.

Direcciones de billetera (WALLET_ADDRESSES)

Registra billeteras personales y contratos por alias para que puedas decir «revisa mi billetera personal» en lugar de pegar hex:

"WALLET_ADDRESSES": "[{\"name\":\"my-wallet\",\"address\":\"0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f\",\"aliases\":[\"personal\",\"my wallet\"],\"description\":\"Main EOA\"}]"
CampoRequeridoDescripción
namesíClave de búsqueda principal
addresssíDirección de billetera o contrato
networknoLimitar el alias a una cadena (predeterminado: todas las cadenas)
aliasesnoClaves de búsqueda adicionales
descriptionnoNota legible

Los alias de direcciones funcionan en eth_getBalance, eth_getCode, eth_call, eth_getLogs y otras herramientas que aceptan parámetros de dirección. Usa list_known_addresses para descubrir los alias configurados.

Migración desde RPC_URL

- "RPC_URL": "https://mainnet.infura.io/v3/KEY"
- "CHAIN_ID": "1"
+ "INFURA_API_KEY": "KEY"
+ "DEFAULT_NETWORK": "ethereum"
+ "DEFAULT_PROVIDER": "infura"

Los cambios de configuración requieren reiniciar el servidor MCP.

Redes integradas compatibles

  • Ethereum: Mainnet, Sepolia
  • Polygon: Mainnet, Amoy
  • Arbitrum: One, Sepolia
  • Optimism: Mainnet, Sepolia
  • BNB Smart Chain: Mainnet, Testnet
  • Avalanche: C-Chain
  • Base: Mainnet, Sepolia
  • Cualquier cadena compatible con EVM mediante CUSTOM_NETWORKS

Ejemplos de uso

Obtener el último número de bloque

Consulta el número de bloque actual:

{
  "tool": "eth_blockNumber",
  "arguments": {}
}

Obtener saldo de cuenta

Comprueba el saldo de una dirección usando una dirección hex o un alias configurado:

{
  "tool": "eth_getBalance",
  "arguments": {
    "address": "personal",
    "blockNumber": "latest"
  }
}

Obtener detalles de transacción

Consulta la información de una transacción:

{
  "tool": "eth_getTransactionByHash",
  "arguments": {
    "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
}

Llamar a un contrato inteligente

Ejecuta una llamada a contrato:

{
  "tool": "eth_call",
  "arguments": {
    "to": "0xA0b86a33E6441c8C06DDD46C310c0eF8D9441C8F",
    "data": "0x70a08231000000000000000000000000742d35Cc6634C0532925a3b8D6Ac6e2F0C4C9B7C"
  }
}

Obtener registros de eventos

Consulta eventos de contrato:

{
  "tool": "eth_getLogs",
  "arguments": {
    "fromBlock": "0x1234567",
    "toBlock": "latest",
    "address": "0xA0b86a33E6441c8C06DDD46C310c0eF8D9441C8F",
    "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
    ]
  }
}

Casos de uso

  • Analítica de blockchain – Consulta datos de transacciones, saldos y estados de contratos
  • Aplicaciones DeFi – Monitorea saldos de tokens, recibos de transacciones y llamadas a contratos inteligentes
  • Proyectos NFT – Rastrea transferencias, metadatos y estadísticas de colecciones
  • Herramientas de desarrollo – Depura transacciones, estima gas y prueba contratos inteligentes
  • Monitoreo – Observa eventos específicos y patrones de transacciones
  • Investigación – Analiza datos de blockchain en múltiples redes EVM

Detalles técnicos

Construido con: Node.js, TypeScript, MCP SDK, Ethers.js
Dependencias: @modelcontextprotocol/sdk, ethers, zod
Plataformas: macOS, Windows, Linux

Variables de entorno: Consulta Configuración arriba.

Contribuciones

⭐ ¡Si este proyecto te resulta útil, dale una estrella en GitHub! ⭐

¡Las contribuciones son bienvenidas! Abre un issue o envía un pull request.

Licencia

Licencia MIT – consulta LICENSE.md para más detalles.

Soporte

Si este proyecto te resulta útil, considera apoyarlo:

⚡ Lightning Network

lnbc1pjhhsqepp5mjgwnvg0z53shm22hfe9us289lnaqkwv8rn2s0rtekg5vvj56xnqdqqcqzzsxqyz5vqsp5gu6vh9hyp94c7t3tkpqrp2r059t4vrw7ps78a4n0a2u52678c7yq9qyyssq7zcferywka50wcy75skjfrdrk930cuyx24rg55cwfuzxs49rc9c53mpz6zug5y2544pt8y9jflnq0ltlha26ed846jh0y7n4gm8jd3qqaautqa

₿ Bitcoin: bc1ptzvr93pn959xq4et6sqzpfnkk2args22ewv5u2th4ps7hshfaqrshe0xtp

Ξ Ethereum/EVM: 0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f