A Go implementation of an Etherscan API client for the Model Context Protocol (MCP) that enables LLM applications to access Etherscan blockchain data.
- Access Etherscan API V2 for multi-chain support
- Use a single API key for over 50 supported chains
- Supports various blockchain data retrieval methods:
- Account balances
- Block information
- Contract data (ABI, source code)
- Gas oracle
- Token information
- Transaction data
- And more
- Etherscan API key (get from https://etherscan.io/myapikey)
-
Clone the repository:
git clone https://github.com/huahuayu/etherscan-mcp-server.git cd etherscan-mcp-server
-
Set Etherscan API key env variable:
ETHERSCAN_API_KEY=your_api_key_here
-
Build the server:
make build
-
Install the server:
make install # install to /usr/local/bin
Run the server using stdin/stdout communication (default mode):
./bin/etherscan-mcp-server
This mode is useful for direct integration with LLM applications that communicate via stdin/stdout.
MCP config:
{
"mcpServers": {
"etherscan-mcp-server": {
"command": "etherscan-mcp-server",
"env": {
"ETHERSCAN_API_KEY": "$your_api_key"
}
}
}
}
Restart cursor and check if it's success:
Run the server in Server-Sent Events mode:
./bin/etherscan-mcp-server --sse
In SSE mode, the server listens on HTTP and provides an SSE endpoint.
SSE MCP config:
{
"mcpServers": {
"etherscan-mcp-server": {
"url": "http://localhost:4000/sse",
"env": {
"ETHERSCAN_API_KEY": "$your_api_key"
}
}
}
}
--sse
: Enable SSE server mode (default is stdin/stdout mode)--port <port>
: Specify the port for SSE server (defaults to PORT env var or 4000)
When running in SSE mode, the server provides:
- SSE Endpoint:
http://localhost:4000/sse
50+ chains supported, plz refer https://docs.etherscan.io/etherscan-v2/getting-started/supported-chains
You can use natural language queries like these:
- "What's the ETH balance of address 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae?"
- "Show me the token balance for USDT on address 0x123abc... on BSC"
- "How many transactions has 0xvitalik.eth made from this address?"
- "Get information about the latest Polygon block"
- "What are the rewards for miners in block 17000000?"
- "Who mined block 16900000 on Ethereum?"
- "Show me the source code at 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984"
- "What's the ABI for the USDC contract on Polygon?"
- "Call the balanceOf function of USDT contract with my address as parameter"
- "Give me details for transaction 0x123456789abcdef..."
- "Has transaction 0xabcdef... been confirmed yet?"
- "What was the gas price used in transaction 0x789abc..."
- "What are the current gas prices on Ethereum?"
- "What's the recommended gas price for a fast transaction right now?"
- "How many transactions are pending on Ethereum network?"
- "Tell me about the LINK token contract"
- "What ERC-721 NFTs does address 0x123... own?"
- "Show recent token transfers for 0xvitalik.eth"
- "Track all USDC transfers to Binance hot wallet in the last 1000 blocks"
- "Which addresses received the most ETH in block 17000000?"
- "Compare gas usage on Ethereum vs Arbitrum for similar transactions"
The Etherscan MCP Server provides the following tools for accessing blockchain data:
- getAccountBalance - Get the balance of an account on a specific blockchain
- getBlockByNumber - Get block information by block number
- getBlockRewards - Get block rewards by block number
- getContractABI - Get the ABI for a verified contract
- getContractSourceCode - Get the source code of a verified contract
- executeContractMethod - Execute a read contract function
- getGasOracle - Get current gas price oracle output
- getTokenBalance - Get the token balance of an account on a specific blockchain
- getTokenDetails - Get comprehensive token information
- getTransactionByHash - Get transaction details by hash
- getTransactionByBlockNumberAndIndex - Get transaction by block number and index
- getTransactionCount - Get the number of transactions sent from an address
- getTransactionReceipt - Check transaction receipt status
- getTransactionStatus - Check contract execution status
- getTransactionsByAddress - Get list of transactions by address
- getInternalTransactionsByAddress - Get list of internal transactions by address
- getTokenTransfersByAddress - Get list of token transfers by address
- getERC721Transfers - Get list of ERC721 token transfers by address
- getLatestBlockNumber - Get the latest block number
Each tool accepts specific parameters and provides blockchain data in a structured format.
MIT