EVM MCP Server

by mcpdotdirect
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports running the MCP server with Bun runtime, enabling faster execution and modern JavaScript features.

  • Provides comprehensive blockchain services including reading state, transferring tokens, querying balances, and interacting with smart contracts on the Ethereum mainnet.

  • Supports interaction with the Fantom blockchain, including native token transfers, balance checking, and smart contract operations.

Servidor EVM MCP

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

🔭 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
  • Fluir
  • Lumia

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
  • Red de pruebas de flujo
  • Red de pruebas de Lumia

🛠️ 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/mcpdotdirect/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 herramientaDescripciónParámetros clave
get-token-infoObtener metadatos del token ERC20tokenAddress (dirección/ENS), network
get-token-balanceConsultar el saldo del token ERC20tokenAddress (dirección/ENS), ownerAddress (dirección/ENS), network
transfer-tokenTransferir tokens ERC20privateKey , tokenAddress (dirección/ENS), toAddress (dirección/ENS), amount , network
approve-token-spendingAprobar asignaciones de tokensprivateKey , tokenAddress (dirección/ENS), spenderAddress (dirección/ENS), amount , network
get-nft-infoObtener metadatos de NFTtokenAddress (dirección/ENS), tokenId , network
check-nft-ownershipVerificar la propiedad del NFTtokenAddress (dirección/ENS), tokenId , ownerAddress (dirección/ENS), network
transfer-nftTransferir un NFTprivateKey , tokenAddress (dirección/ENS), tokenId , toAddress (dirección/ENS), network
get-nft-balanceContar los NFT que se poseentokenAddress (dirección/ENS), ownerAddress (dirección/ENS), network
get-erc1155-token-uriObtener metadatos de ERC1155tokenAddress (dirección/ENS), tokenId , network
get-erc1155-balanceConsultar saldo ERC1155tokenAddress (dirección/ENS), tokenId , ownerAddress (dirección/ENS), network
transfer-erc1155Transferir tokens ERC1155privateKey , tokenAddress (dirección/ENS), tokenId , amount , toAddress (dirección/ENS), network

Servicios de blockchain

Nombre de la herramientaDescripciónParámetros clave
get-chain-infoObtener información de la rednetwork
get-balanceObtener saldo de token nativoaddress (dirección/ENS), network
transfer-ethEnviar tokens nativosprivateKey , to (dirección/ENS), amount , network
get-transactionObtener detalles de la transaccióntxHash , network
read-contractLeer el estado del contrato inteligentecontractAddress (dirección/ENS), abi , functionName , args , network
write-contractEscribir en un contrato inteligentecontractAddress (dirección/ENS), abi , functionName , args , privateKey , network
is-contractComprobar si la dirección es un contratoaddress (dirección/ENS), network
resolve-ensResolver el nombre ENS a la direcciónensName , 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 recursoDescripción
evm://{network}/chainInformación de la cadena para una red específica
evm://chainInformació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}/balanceSaldo de tokens nativos
evm://{network}/tx/{txHash}Detalles de la transacción
evm://{network}/tx/{txHash}/receiptRecibo de transacción con registros

Recursos de tokens

Patrón de URI de recursoDescripció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}/uriURI 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 .

ID: z9r55dx1np