Ethereum RPC MCP Server

A TypeScript MCP server that exposes the full Ethereum JSON-RPC surface, enabling AI assistants to query on-chain data, inspect contracts, and retrieve transaction details across EVM networks. Includes optional analytics and Zircuit-specific SLS methods.

GitHub starsnpm versionnpm downloads

Overview

The Ethereum RPC MCP Server provides a Model Context Protocol interface for standard Ethereum JSON-RPC. It lets AI assistants interact with EVM chains through familiar RPC calls like eth_blockNumber, eth_getBalance, and eth_getTransactionByHash. It supports any RPC endpoint and optionally enables analytics. When connected to Zircuit (Chain ID 48900), it automatically exposes SLS methods for quarantine checks.

Created by:

Developed by Phillip Kemper

Key Features

🧩

Full JSON-RPC Coverage

Supports standard Ethereum RPC calls for blocks, tx, accounts, logs

🌐

Multi-Chain RPC

Connect to any EVM endpoint (e.g., Ethereum, Zircuit) via URL

🛡️

Zircuit SLS Methods

Expose zirc_isQuarantined and zirc_getQuarantined on Chain ID 48900

📈

Optional Analytics

Enable request metrics and error reporting via analytics middleware

Available Tools

Quick Reference

ToolPurposeCategory
eth_blockNumberGet current block heightNetwork
eth_getBalanceGet ETH balance for addressAccount
eth_getCodeCheck if address is a contractContract
eth_getTransactionByHashRetrieve tx details by hashTransaction
zirc_isQuarantinedCheck if tx is quarantined (Zircuit only)Zircuit
zirc_getQuarantinedList quarantined txs with optional filterZircuit

Detailed Usage

eth_blockNumber

Get the latest block number.

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_blockNumber",
  arguments: {}
});

Returns a hex quantity per JSON-RPC conventions.

eth_getBalance

Get the ETH balance of an address at the latest block.

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getBalance",
  arguments: {
    address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    blockTag: "latest"
  }
});

Returns a hex-encoded wei balance.

eth_getCode

Determine if an address hosts contract bytecode.

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getCode",
  arguments: {
    address: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
    blockTag: "latest"
  }
});

Non-empty bytecode indicates a smart contract.

eth_getTransactionByHash

Retrieve a transaction by its hash.

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getTransactionByHash",
  arguments: {
    hash: "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060"
  }
});

Returns full transaction fields per JSON-RPC spec.

zirc_isQuarantined

Check if a transaction is quarantined (Zircuit endpoints only).

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "zirc_isQuarantined",
  arguments: {
    hash: "0x..."
  }
});

Available automatically when connected to Zircuit (Chain ID 48900).

Installation

{
  "mcpServers": {
    "ethereum_rpc": {
      "command": "npx",
      "args": [
        "-y",
        "ethereum-rpc-mpc",
        "https://eth.llamarpc.com",
        "Ethereum"
      ]
    }
  }
}

Custom RPC & Chain:

Replace the RPC URL and chain name with your target endpoint (e.g., https://mainnet.zircuit.com and Zircuit). Add --analytics and --db-path /path/to/analytics.db to enable analytics.

Common Use Cases

1. Get Current Block Number

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_blockNumber",
  arguments: {}
});

2. Check Address Balance

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getBalance",
  arguments: { address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e", blockTag: "latest" }
});

3. Is Address a Contract?

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getCode",
  arguments: { address: "0x6B175474E89094C44Da98b954EedeAC495271d0F", blockTag: "latest" }
});

4. Retrieve Transaction Details

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "eth_getTransactionByHash",
  arguments: { hash: "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060" }
});

5. Zircuit Quarantine Status

use_mcp_tool({
  server_name: "ethereum_rpc",
  tool_name: "zirc_isQuarantined",
  arguments: { hash: "0x..." }
});

Sources