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):
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 bloqueeth_getBalance– Obtener saldo de cuentaeth_getTransactionCount– Obtener recuento de transacciones (nonce)eth_getBlockByNumber– Obtener información del bloqueeth_getTransactionByHash– Obtener detalles de la transaccióneth_getTransactionReceipt– Obtener recibo de transaccióneth_getCode– Obtener bytecode del contratoeth_getStorageAt– Obtener valor de almacenamiento
🔄 Transacciones
eth_call– Ejecutar llamada a contratoeth_estimateGas– Estimar gas para transaccióneth_sendRawTransaction– Enviar transacción firmadaeth_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 llamadasimulate_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_estimateGasydebug_traceCall(cuando el proveedor lo admite). Nunca firman ni envían una transacción real. Se usan diffs de estado reales cuandodebug_traceCallestá 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 configuradoslist_known_addresses– Listar alias de billetera configurados y direcciones conocidas de tokens/contratoseth_chainId– Obtener ID de cadenanet_version– Obtener versión de rednet_listening– Comprobar si está escuchandonet_peerCount– Obtener número de pares
🌐 Web3
web3_clientVersion– Obtener versión del clienteweb3_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
| Variable | Requerida | Descripción |
|---|---|---|
INFURA_API_KEY | Una de* | Clave de API del proyecto Infura (preajuste integrado) |
ALCHEMY_API_KEY | Una de* | Clave de API de la aplicación Alchemy (preajuste integrado) |
DEFAULT_NETWORK | No | Slug de cadena o ID de cadena predeterminado (predeterminado: ethereum) |
DEFAULT_PROVIDER | No | Slug de proveedor preferido (infura, alchemy o personalizado) |
RPC_PROVIDER_ORDER | No | Orden de respaldo de proveedores separado por comas (predeterminado: infura,alchemy) |
CUSTOM_PROVIDERS | Una de* | Matriz JSON de proveedores definidos por el usuario |
CUSTOM_NETWORKS | Una de* | Matriz JSON de redes definidas por el usuario |
KNOWN_ADDRESSES | No | Matriz JSON de tokens/contratos conocidos (limitados a red) |
WALLET_ADDRESSES | No | Matriz 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
networkUrlsse usan directamente (con sustitución de{apiKey}). - Las rutas relativas (que comienzan con
/) se añaden abaseUrl.
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\"]}]"
| Campo | Requerido | Descripción |
|---|---|---|
name | sí | Clave de búsqueda principal |
address | sí | Dirección de contrato con checksum |
network | sí | Slug de cadena, nombre, ID de cadena o alias de red |
type | no | token o contract (predeterminado: contract) |
decimals | no | Decimales del token para saldos formateados |
aliases | no | Claves 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\"}]"
| Campo | Requerido | Descripción |
|---|---|---|
name | sí | Clave de búsqueda principal |
address | sí | Dirección de billetera o contrato |
network | no | Limitar el alias a una cadena (predeterminado: todas las cadenas) |
aliases | no | Claves de búsqueda adicionales |
description | no | Nota 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