Uses dotenv for environment variable management to configure Geth node connections and server settings
Provides comprehensive access to Ethereum blockchain data and operations through Geth node integration, including querying blocks, transactions, balances, admin functions, debug tools, and transaction pool management
Built on Express.js web framework to provide HTTP endpoints for MCP tool calls and REST API access
Implemented as a Node.js application that serves as a proxy server between Ethereum Geth nodes and MCP-enabled applications
Utilizes Zod for input validation and schema definition of all MCP tool parameters to ensure type safety
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Geth MCP Proxyget the current block number"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Geth MCP Proxy
Introduction
This project is a Node.js proxy that exposes an Ethereum JSON-RPC endpoint (Geth) as MCP tools. It focuses on a beginner-friendly MCP surface with schema validation, readable responses, and a passthrough tool (eth_callRaw) for any method that is not explicitly registered.
Related MCP server: Ethereum RPC MCP Server
Features
MCP tool registration with Zod validation and friendly aliases.
Common Ethereum RPC methods plus a small set of admin/debug/txpool helpers.
Hex to decimal formatting for block numbers, balances, and gas prices.
Safe-by-default transaction broadcasting (
ALLOW_SEND_RAW_TX=1to enable).Health and discovery endpoints (
/,/health,/mcp).Passthrough JSON-RPC via
eth_callRaw(respects send-raw-tx safety).
Quickstart
Clone and install:
git clone https://github.com/John0n1/Geth-MCP-Proxy.git cd Geth-MCP-Proxy npm installCopy the env template and edit
GETH_URL:# PowerShell Copy-Item example.env .env # macOS/Linux cp example.env .envStart the server:
npm startVerify connectivity:
curl http://localhost:3000/health?upstream=1List tools:
curl -s http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Call a tool:
curl -s http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"getBlockNumber","arguments":{}}}'
Configuration
Create a .env file in the root directory:
GETH_URL is required.
Some admin/debug methods may require Geth flags such as
--http.apior--ws.api.
Usage
Root:
GET /returns basic metadata and endpoints.Health:
GET /health(add?upstream=1to verify Geth).MCP:
POST /mcpsupportsinitialize,tools/list, andtools/call.Simple REST:
GET /blockNumberreturns the current block number in hex and decimal.
MCP Client Config
If your MCP client uses a config file, point it to the server:
Available Tools
Call tools/list for the live list. Highlights include:
Core Ethereum Tools
eth_blockNumber(aliases:getBlockNumber,eth_getBlockNumber)eth_getBalance(alias:getBalance)eth_chainId(alias:getChainId)eth_gasPrice(alias:getGasPrice)eth_syncing(aliases:isSyncing,eth_isSyncing)eth_getBlockByNumber(alias:getBlock)eth_getTransactionByHasheth_call(alias:call)eth_estimateGas(alias:estimateGas)eth_getTransactionReceipt(alias:getTransactionReceipt)eth_getLogs(alias:getLogs)eth_getProof(alias:getProof)eth_sendRawTransaction(alias:sendRawTransaction, gated byALLOW_SEND_RAW_TX)eth_callRaw(alias:ethCallRaw)
Block parameters accept tags like latest/pending or decimal/hex block numbers.
Admin Tools
admin_peers(alias:getPeers)admin_nodeInfo
Debug Tools
debug_metricsdebug_traceTransaction(alias:traceTransaction)debug_blockProfile(alias:blockProfile)debug_getBlockRlp(alias:getBlockRlp)
Txpool Tools
txpool_status
Contributing
Contributions are welcome! Please open an issue or submit a pull request for bug fixes, new tools, or improvements.
License
This project is licensed under the MIT License. See the LICENSE file for details.