EVM MCP Server
Unified Model Context Protocol server for multi-chain EVM blockchain access
Key Features
Use Cases
README
EVM MCP Server
A comprehensive Model Context Protocol (MCP) server that provides blockchain services across multiple EVM-compatible networks. This server enables AI agents to interact with Ethereum, Optimism, Arbitrum, Base, Polygon, and many other EVM chains with a unified interface.
📋 Contents
- Overview
- Features
- Supported Networks
- Prerequisites
- Installation
- Server Configuration
- Usage
- API Reference
- Security Considerations
- Project Structure
- Development
- License
🔭 Overview
The MCP EVM Server leverages the Model Context Protocol to provide blockchain services to AI agents. It supports a wide range of services including:
- Reading blockchain state (balances, transactions, blocks, etc.)
- Interacting with smart contracts
- Transferring tokens (native, ERC20, ERC721, ERC1155)
- Querying token metadata and balances
- Chain-specific services across 30+ EVM networks
- ENS name resolution for all address parameters (use human-readable names like 'vitalik.eth' instead of addresses)
All services are exposed through a consistent interface of MCP tools and resources, making it easy for AI agents to discover and use blockchain functionality. Every tool that accepts Ethereum addresses also supports ENS names, automatically resolving them to addresses behind the scenes.
✨ Features
Blockchain Data Access
- Multi-chain support for 30+ EVM-compatible networks
- Chain information including blockNumber, chainId, and RPCs
- Block data access by number, hash, or latest
- Transaction details and receipts with decoded logs
- Address balances for native tokens and all token standards
- ENS resolution for human-readable Ethereum addresses (use 'vitalik.eth' instead of '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')
Token services
-
ERC20 Tokens
- Get token metadata (name, symbol, decimals, supply)
- Check token balances
- Transfer tokens between addresses
- Approve spending allowances
-
NFTs (ERC721)
- Get collection and token metadata
- Verify token ownership
- Transfer NFTs between addresses
- Retrieve token URIs and count holdings
-
Multi-tokens (ERC1155)
- Get token balances and metadata
- Transfer tokens with quantity
- Access token URIs
Smart Contract Interactions
- Read contract state through view/pure functions
- Write services with private key signing
- Contract verification to distinguish from EOAs
- Event logs retrieval and filtering
Comprehensive Transaction Support
- Native token transfers across all supported networks
- Gas estimation for transaction planning
- Transaction status and receipt information
- Error handling with descriptive messages
🌐 Supported Networks
Mainnets
- Ethereum (ETH)
- Optimism (OP)
- Arbitrum (ARB)
- Arbitrum Nova
- Base
- Polygon (MATIC)
- Polygon zkEVM
- Avalanche (AVAX)
- Binance Smart Chain (BSC)
- zkSync Era
- Linea
- Celo
- Gnosis (xDai)
- Fantom (FTM)
- Filecoin (FIL)
- Moonbeam
- Moonriver
- Cronos
- Scroll
- Mantle
- Manta
- Blast
- Fraxtal
- Mode
- Metis
- Kroma
- Zora
- Aurora
- Canto
- Flow
- Lumia
Testnets
- Sepolia
- Optimism Sepolia
- Arbitrum Sepolia
- Base Sepolia
- Polygon Amoy
- Avalanche Fuji
- BSC Testnet
- zkSync Sepolia
- Linea Sepolia
- Scroll Sepolia
- Mantle Sepolia
- Manta Sepolia
- Blast Sepolia
- Fraxtal Testnet
- Mode Testnet
- Metis Sepolia
- Kroma Sepolia
- Zora Sepolia
- Celo Alfajores
- Goerli
- Holesky
- Flow Testnet
- Filecoin Calibration
- Lumia Testnet
🛠️ Prerequisites
- Bun 1.0.0 or higher
- Node.js 18.0.0 or higher (if not using Bun)
📦 Installation
# 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
⚙️ Server Configuration
The server uses the following default configuration:
- Default Chain ID: 1 (Ethereum Mainnet)
- Server Port: 3001
- Server Host: 0.0.0.0 (accessible from any network interface)
These values are hardcoded in the application. If you need to modify them, you can edit the following files:
- For chain configuration:
src/core/chains.ts - For server configuration:
src/server/http-server.ts
🚀 Usage
Using npx (No Installation Required)
You can run the MCP EVM Server directly without installation using npx:
# Run the server in stdio mode (for CLI tools)
npx @mcpdotdirect/evm-mcp-server
# Run the server in HTTP mode (for web applications)
npx @mcpdotdirect/evm-mcp-server --http
Running the Server Locally
Start the server using stdio (for embedding in CLI tools):
# Start the stdio server
bun start
# Development mode with auto-reload
bun dev
Or start the HTTP server with SSE for web applications:
# Start the HTTP server
bun start:http
# Development mode with auto-reload
bun dev:http
Connecting to the Server
Connect to this MCP server using any MCP-compatible client. For testing and debugging, you can use the MCP Inspector.
Connecting from Cursor
To connect to the MCP server from Cursor:
-
Open Cursor and go to Settings (gear icon in the bottom left)
-
Click on "Features" in the left sidebar
-
Scroll down to "MCP Servers" section
-
Click "Add new MCP server"
-
Enter the following details:
- Server name:
evm-mcp-server - Type:
command - Command:
npx @mcpdotdirect/evm-mcp-server
- Server name:
-
Click "Save"
Once connected, you can use the MCP server's capabilities directly within Cursor. The server will appear in the MCP Servers list and can be enabled/disabled as needed.
Using mcp.json with Cursor
For a more portable configuration that you can share with your team or use across projects, you can create an .cursor/mcp.json file in your project's root directory:
{
"mcpServers": {
"evm-mcp-server": {
"command": "npx",
"args": [
"-y",
"@mcpdotdirect/evm-mcp-server"
]
},
"evm-mcp-http": {
"command": "npx",
"args": [
"-y",
"@mcpdotdirect/evm-mcp-server",
"--http"
]
}
}
}
Place this file in your project's .cursor directory (create it if it doesn't exist), and Cursor will automatically detect and use these MCP server configurations when working in that project. This approach makes it easy to:
- Share MCP configurations with your team
- Version control your MCP setup
- Use different server configurations for different projects
Example: HTTP Mode with SSE
If you're developing a web application and want to connect to the HTTP server with Server-Sent Events (SSE), you can use this configuration:
{
"mcpServers": {
"evm-mcp-sse": {
"url": "http://localhost:3001/sse"
}
}
}
This connects directly to the HTTP server's SSE endpoint, which is useful for:
- Web applications that need to connect to the MCP server from the browser
- Environments where running local commands isn't ideal
- Sharing a single MCP server instance among multiple users or applications
To use this configuration:
- Create a
.cursordirectory in your project root if it doesn't exist - Save the above JSON as
mcp.jsonin the.cursordirectory - Restart Cursor or open your project
- Cursor will detect the configuration and offer to enable the server(s)
Example: Using the MCP Server in Cursor
After configuring the MCP server with mcp.json, you can easily use it in Cursor. Here's an example workflow:
- Create a new JavaScript/TypeScript file in your project:
// blockchain-example.js
async function main() {
try {
// Get ETH balance for an address using ENS
console.log("Getting ETH balance for vitalik.eth...");
// When using with Cursor, you can simply ask Cursor to:
// "Check the ETH balance of vitalik.eth on mainnet"
// Or "Transfer 0.1 ETH from my wallet to vitalik.eth"
// Cursor will use the MCP server to execute these operations
// without requiring any additional code from you
// This is the power of the MCP integration - your AI assistant
// can directly interact with blockchain data and operations
} catch (error) {
console.error("Error:", error.message);
}
}
main();
-
With the file open in Cursor, you can ask Cursor to:
- "Check the current ETH balance of vitalik.eth"
- "Look up the price of USDC on Ethereum"
- "Show me the latest block on Optimism"
- "Check if 0x1234... is a contract address"
-
Cursor will use the MCP server to execute these operations and return the results directly in your conversation.
The MCP server handles all the blockchain communication while allowing Cursor to understand and execute blockchain-related tasks through natural language.
Connecting using Claude CLI
If you're using Claude CLI, you can connect to the MCP server with just two commands:
# Add the MCP server
claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server
# Start Claude with the MCP server enabled
claude
Example: Getting a Token Balance with ENS
// Example of using the MCP client to check a token balance using ENS
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("get-token-balance", {
tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Ethereum
ownerAddress: "vitalik.eth", // ENS name instead of address
network: "ethereum"
});
console.log(result);
// {
// tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
// owner: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
// network: "ethereum",
// raw: "1000000000",
// formatted: "1000",
// symbol: "USDC",
// decimals: 6
// }
Example: Resolving an ENS Name
// Example of using the MCP client to resolve an ENS name to an address
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("resolve-ens", {
ensName: "vitalik.eth",
network: "ethereum"
});
console.log(result);
// {
// ensName: "vitalik.eth",
// normalizedName: "vitalik.eth",
// resolvedAddress: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
// network: "ethereum"
// }
📚 API Reference
Tools
The server provides the following MCP tools for agents. All tools that accept address parameters support both Ethereum addresses and ENS names.
Token services
| Tool Name | Description | Key Parameters |
|---|---|---|
get-token-info |
Get ERC20 token metadata | tokenAddress (address/ENS), network |
get-token-balance |
Check ERC20 token balance | tokenAddress (address/ENS), ownerAddress (address/ENS), network |
transfer-token |
Transfer ERC20 tokens | privateKey, tokenAddress (address/ENS), toAddress (address/ENS), amount, network |
approve-token-spending |
Approve token allowances | privateKey, tokenAddress (address/ENS), spenderAddress (address/ENS), amount, network |
get-nft-info |
Get NFT metadata | tokenAddress (address/ENS), tokenId, network |
check-nft-ownership |
Verify NFT ownership | tokenAddress (address/ENS), tokenId, ownerAddress (address/ENS), network |
transfer-nft |
Transfer an NFT | privateKey, tokenAddress (address/ENS), tokenId, toAddress (address/ENS), network |
get-nft-balance |
Count NFTs owned | tokenAddress (address/ENS), ownerAddress (address/ENS), network |
get-erc1155-token-uri |
Get ERC1155 metadata | tokenAddress (address/ENS), tokenId, network |
get-erc1155-balance |
Check ERC1155 balance | tokenAddress (address/ENS), tokenId, ownerAddress (address/ENS), network |
transfer-erc1155 |
Transfer ERC1155 tokens | privateKey, tokenAddress (address/ENS), tokenId, amount, toAddress (address/ENS), network |
Blockchain services
| Tool Name | Description | Key Parameters |
|---|---|---|
get-chain-info |
Get network information | network |
get-balance |
Get native token balance | address (address/ENS), network |
transfer-eth |
Send native tokens | privateKey, to (address/ENS), amount, network |
get-transaction |
Get transaction details | txHash, network |
read-contract |
Read smart contract state | contractAddress (address/ENS), abi, functionName, args, network |
write-contract |
Write to smart contract | contractAddress (address/ENS), abi, functionName, args, privateKey, network |
is-contract |
Check if address is a contract | address (address/ENS), network |
resolve-ens |
Resolve ENS name to address | ensName, network |
Resources
The server exposes blockchain data through the following MCP resource URIs. All resource URIs that accept addresses also support ENS names, which are automatically resolved to addresses.
Blockchain Resources
| Resource URI Pattern | Description |
|---|---|
evm://{network}/chain |
Chain information for a specific network |
evm://chain |
Ethereum mainnet chain information |
evm://{network}/block/{blockNumber} |
Block data by number |
evm://{network}/block/latest |
Latest block data |
evm://{network}/address/{address}/balance |
Native token balance |
evm://{network}/tx/{txHash} |
Transaction details |
evm://{network}/tx/{txHash}/receipt |
Transaction receipt with logs |
Token Resources
| Resource URI Pattern | Description |
|---|---|
evm://{network}/token/{tokenAddress} |
ERC20 token information |
evm://{network}/token/{tokenAddress}/balanceOf/{address} |
ERC20 token balance |
evm://{network}/nft/{tokenAddress}/{tokenId} |
NFT (ERC721) token information |
evm://{network}/nft/{tokenAddress}/{tokenId}/isOwnedBy/{address} |
NFT ownership verification |
evm://{network}/erc1155/{tokenAddress}/{tokenId}/uri |
ERC1155 token URI |
evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address} |
ERC1155 token balance |
🔒 Security Considerations
- Private keys are used only for transaction signing and are never stored by the server
- Consider implementing additional authentication mechanisms for production use
- Use HTTPS for the HTTP server in production environments
- Implement rate limiting to prevent abuse
- For high-value services, consider adding confirmation steps
📁 Project Structure
mcp-evm-server/
├── src/
│ ├── index.ts # Main stdio server entry point
│ ├── server/ # Server-related files
│ │ ├── http-server.ts # HTTP server with SSE
│ │ └── server.ts # General server setup
│ ├── core/
│ │ ├── chains.ts # Chain definitions and utilities
│ │ ├── resources.ts # MCP resources implementation
│ │ ├── tools.ts # MCP tools implementation
│ │ ├── prompts.ts # MCP prompts implementation
│ │ └── services/ # Core blockchain services
│ │ ├── index.ts # Operation exports
│ │ ├── balance.ts # Balance services
│ │ ├── transfer.ts # Token transfer services
│ │ ├── utils.ts # Utility functions
│ │ ├── tokens.ts # Token metadata services
│ │ ├── contracts.ts # Contract interactions
│ │ ├── transactions.ts # Transaction services
│ │ └── blocks.ts # Block services
│ │ └── clients.ts # RPC client utilities
├── package.json
├── tsconfig.json
└── README.md
🛠️ Development
To modify or extend the server:
- Add new services in the appropriate file under
src/core/services/ - Register new tools in
src/core/tools.ts - Register new resources in
src/core/resources.ts - Add new network support in
src/core/chains.ts - To change server configuration, edit the hardcoded values in
src/server/http-server.ts
📄 License
This project is licensed under the terms of the MIT License.
Star History
Repository Owner
Organization
Repository Details
Programming Languages
Tags
Topics
Join Our Newsletter
Stay updated with the latest AI tools, news, and offers by subscribing to our weekly newsletter.
Related MCPs
Discover similar Model Context Protocol servers
Blockchain MCP powered by Tatum
MCP server for universal blockchain data access across 130+ networks.
Blockchain MCP powered by Tatum is a Model Context Protocol (MCP) server that enables large language models (LLMs) to read and write blockchain data across more than 130 networks. It provides unified access to both the Tatum Blockchain Data API and direct RPC gateways, supporting tools for retrieving balances, portfolios, transactions, and more. The platform is designed for seamless integration via API key and configurable MCP client setups, making it easier to build blockchain-aware AI solutions. Comprehensive documentation and extensive network compatibility facilitate robust development and scalability.
- ⭐ 12
- MCP
- tatumio/blockchain-mcp
EVM MCP Server
A Model Context Protocol server providing full access to EVM JSON-RPC methods.
EVM MCP Server is a comprehensive MCP (Model Context Protocol) server offering seamless access to Ethereum Virtual Machine (EVM) JSON-RPC methods across all major EVM-compatible networks. It enables integration with node providers like Infura, Alchemy, QuickNode, and local nodes, offering 20+ specialized tools for blockchain interaction. Users can configure it easily with Claude Desktop for AI-driven workflows and manage blockchain data, transactions, and events through a standardized context protocol.
- ⭐ 0
- MCP
- JamesANZ/evm-mcp
Web3 MCP
A Model Context Protocol server for unified blockchain data access.
Web3 MCP is a Model Context Protocol server that provides access to blockchain data through Ankr's Advanced API. It allows large language models to interact seamlessly with multiple blockchain networks such as Ethereum, BSC, Polygon, and Avalanche. With support for NFT, token, and blockchain query APIs, it enables users and AI agents to retrieve on-chain data, statistics, and analytics efficiently within an MCP context.
- ⭐ 3
- MCP
- tumf/web3-mcp
MCP XRPL Server
Unified Model Context Protocol server for seamless AI-driven interaction with the XRP Ledger.
MCP XRPL Server provides a comprehensive Model Context Protocol implementation for the XRP Ledger, enabling AI agents to access blockchain services seamlessly across MainNet, TestNet, and DevNet. It offers an extensive suite of features including account management, token transfers, NFT operations, DIDs, AMM operations, and oracle interactions, all via a standardized MCP interface. The server supports context-driven interactions, making XRPL functionality readily accessible for AI-powered agents.
- ⭐ 5
- MCP
- RomThpt/mcp-xrpl
Substrate MCP Server
A Rust-based MCP server for dynamic Substrate blockchain operations.
Substrate MCP Server provides a Model Context Protocol (MCP) compliant server enabling dynamic interaction with Substrate blockchains. It supports querying balances, pallets, and storage, as well as submitting transactions and accessing block and event data. The server is fully configurable via environment variables and designed for seamless integration with tools such as Cursor, Claude, and development dashboards. Built in Rust, it interfaces with Substrate nodes using the subxt crate.
- ⭐ 11
- MCP
- ThomasMarches/substrate-mcp-rs
Starknet MCP Server
AI-ready MCP server for interacting with the Starknet blockchain
Starknet MCP Server provides a comprehensive Model Context Protocol-compliant interface for interacting with the Starknet blockchain. It enables AI agents and assistants to query blockchain data, manage assets, interact with smart contracts, and resolve Starknet identities through a consistent set of tools and resources. The server supports both read and write operations, works with both native tokens and ERC20s, integrates StarknetID resolution, and supports both stdio and HTTP transport modes. Designed for seamless use by AI assistants such as Claude and GPT, it provides robust blockchain access with security considerations in mind.
- ⭐ 5
- MCP
- mcpdotdirect/starknet-mcp-server
Didn't find tool you were looking for?