Skip to content

FLock-io/etherscan-mcp-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FLock Logo

Etherscan MCP Python Server

A complete Python implementation of the Etherscan Model Context Protocol (MCP) server, providing comprehensive access to Ethereum blockchain data through the Etherscan API.

Overview

This server provides 53+ tools for accessing Ethereum blockchain data, including:

  • Account Tools: Balance checking, transaction history, internal transactions
  • Block Tools: Block data, rewards, timing information
  • Contract Tools: Source code, ABI, verification status
  • Transaction Tools: Transaction details, receipts, status
  • Token Tools: Transfers, balances, supply information
  • Gas Tools: Gas prices, estimates, oracle data
  • Statistics Tools: Network metrics, supply data
  • RPC Tools: Ethereum RPC proxy methods
  • Logs Tools: Event logs and filtering

Requirements

  • Python 3.8+
  • Etherscan API Key

Installation

cd etherscan-mcp-python
pip install -e .

Configuration

Set your Etherscan API key as an environment variable:

export ETHERSCAN_API_KEY="your_api_key_here"

Usage

Standalone Server

python server.py

With MCP Tools (Agno Framework)

from agno.tools.mcp import MCPTools

etherscan_mcp = MCPTools(
    command="python etherscan-mcp-python/server.py",
    env={"ETHERSCAN_API_KEY": "your_api_key"},
    timeout_seconds=120
)

Complete Tool Reference

🏦 Account Tools (12 tools)

Tool Name Description Key Parameters
account_balance Get ETH balance for single address address, chainid
account_balancemulti Get ETH balance for multiple addresses (up to 20) address (comma-separated), chainid
account_txlist Get normal transactions by address address, startblock, endblock, page, offset
account_txlistinternal Get internal transactions by address address, startblock, endblock, page, offset
account_txlistinternal_byhash Get internal transactions by transaction hash txhash, chainid
account_txlistinternal_byblock Get internal transactions by block range startblock, endblock, page, offset
account_tokentx Get ERC20 token transfer events address, contractaddress, startblock, endblock
account_tokennfttx Get ERC721 (NFT) token transfer events address, contractaddress, startblock, endblock
account_token1155tx Get ERC1155 token transfer events address, contractaddress, startblock, endblock
account_fundedby Get address funding source and age address, chainid
account_getminedblocks Get blocks validated by address address, blocktype, page, offset
account_txsBeaconWithdrawal Get beacon chain withdrawals address, startblock, endblock, page, offset

🧱 Block Tools (4 tools)

Tool Name Description Key Parameters
block_getblockreward Get block mining reward and uncle rewards blockno, chainid
block_getblockcountdown Get estimated time until block is mined blockno, chainid
block_getblocknobytime Get block number by timestamp timestamp, closest, chainid
block_getblocktxnscount Get number of transactions in block blockno, chainid

πŸ“„ Contract Tools (4 tools)

Tool Name Description Key Parameters
contract_getabi Get contract ABI for verified contracts address, chainid
contract_getsourcecode Get verified contract source code address, chainid
contract_getcontractcreation Get contract creator and creation tx hash contractaddresses, chainid
contract_checkverifystatus Check contract verification status guid, chainid

πŸ”„ Transaction Tools (2 tools)

Tool Name Description Key Parameters
transaction_getstatus Get contract execution status txhash, chainid
transaction_gettxreceiptstatus Get transaction receipt status txhash, chainid

πŸͺ™ Token Tools (2 tools)

Tool Name Description Key Parameters
stats_tokensupply Get ERC20 token total supply contractaddress, chainid
account_tokenbalance Get ERC20 token balance of address contractaddress, address, chainid

β›½ Gas Tools (3 tools)

Tool Name Description Key Parameters
gas_gasestimate Get estimated confirmation time for gas price gasprice, chainid
gas_gasoracle Get current safe/proposed/fast gas prices chainid
stats_dailyavggaslimit Get historical daily average gas limit startdate, enddate, sort, chainid

πŸ“Š Statistics Tools (13 tools)

Tool Name Description Key Parameters
stats_ethsupply Get total ETH supply (excluding staking/burnt) chainid
stats_ethsupply2 Get total ETH supply (including staking/burnt) chainid
stats_ethprice Get current ETH price chainid
stats_chainsize Get blockchain size over date range startdate, enddate, clienttype, syncmode
stats_nodecount Get total discoverable nodes chainid
stats_dailytxnfee Get daily transaction fees paid to miners startdate, enddate, sort
stats_dailynewaddress Get daily new address count startdate, enddate, sort
stats_dailynetutilization Get daily network utilization percentage startdate, enddate, sort
stats_dailyavghashrate Get daily average network hash rate startdate, enddate, sort
stats_dailytx Get daily transaction count startdate, enddate, sort
stats_dailyavgnetdifficulty Get daily average mining difficulty startdate, enddate, sort
stats_ethdailyprice Get historical ETH prices startdate, enddate, sort

πŸ“ Logs Tools (3 tools)

Tool Name Description Key Parameters
logs_getLogsByAddress Get event logs from address with block range address, fromBlock, toBlock, page, offset
logs_getLogsByTopics Get event logs filtered by topics fromBlock, toBlock, topic0-3, operators
logs_getLogsByAddressAndTopics Get event logs from address filtered by topics address, fromBlock, toBlock, topic0-3

πŸ”— RPC Proxy Tools (13 tools)

Tool Name Description Key Parameters
proxy_eth_blockNumber Get latest block number chainid
proxy_eth_getBlockByNumber Get block information by number tag, boolean, chainid
proxy_eth_getUncleByBlockNumberAndIndex Get uncle block by number and index tag, index, chainid
proxy_eth_getBlockTransactionCountByNumber Get transaction count in block tag, chainid
proxy_eth_getTransactionByHash Get transaction by hash txhash, chainid
proxy_eth_getTransactionByBlockNumberAndIndex Get transaction by block and index tag, index, chainid
proxy_eth_getTransactionCount Get transaction count by address address, tag, chainid
proxy_eth_getTransactionReceipt Get transaction receipt txhash, chainid
proxy_eth_call Execute message call without transaction to, data, tag, chainid
proxy_eth_getCode Get code at address address, tag, chainid
proxy_eth_getStorageAt Get storage value at position address, position, tag, chainid
proxy_eth_gasPrice Get current gas price chainid
proxy_eth_estimateGas Estimate gas for transaction data, to, value, gas, gasPrice

🎯 Use Cases & Examples

Basic Balance Check

# Get ETH balance for single address
account_balance(address="0x...", chainid="1")

# Get balances for multiple addresses (up to 20)
account_balancemulti(address="0x...,0x...,0x...", chainid="1")

Transaction Analysis

# Get transaction history for address
account_txlist(address="0x...", startblock="0", endblock="99999999")

# Get internal transactions (contract interactions)
account_txlistinternal(address="0x...", page="1", offset="100")

Block Information

# Get transaction count in specific block (like the web3_GAIA_test.py example)
block_getblocktxnscount(blockno="17000000", chainid="1")

# Get block mining rewards
block_getblockreward(blockno="17000000", chainid="1")

Market Data

# Get current ETH price
stats_ethprice(chainid="1")

# Get current gas prices
gas_gasoracle(chainid="1")

Smart Contract Analysis

# Get contract source code (if verified)
contract_getsourcecode(address="0x...", chainid="1")

# Get contract ABI
contract_getabi(address="0x...", chainid="1")

πŸ”§ Advanced Configuration

Multi-Chain Support

The server supports multiple Ethereum networks via the chainid parameter:

  • "1" - Ethereum Mainnet (default)
  • "5" - Goerli Testnet
  • "11155111" - Sepolia Testnet
  • And other supported networks

Error Handling

The server includes comprehensive error handling for:

  • ❌ Missing API keys
  • ❌ Invalid parameters
  • ❌ API rate limits
  • ❌ Network timeouts
  • ❌ Malformed responses

Performance Optimization

  • βœ… Synchronous HTTP client for MCP compatibility
  • βœ… Efficient JSON parsing and response formatting
  • βœ… Proper timeout handling (120 seconds default)
  • βœ… Memory-efficient tool registration

πŸ” Security & Best Practices

API Key Management

  • Store ETHERSCAN_API_KEY in environment variables
  • Never commit API keys to version control
  • Use .env files for local development
  • Rotate API keys regularly

Rate Limiting

  • Etherscan API has rate limits (free tier: 5 calls/sec)
  • The server respects these limits
  • Consider upgrading to Etherscan Pro for higher limits

Data Validation

  • All input parameters are validated
  • API responses are checked for errors
  • Malformed data is handled gracefully

πŸ†˜ Troubleshooting

Common Issues

❌ "ETHERSCAN_API_KEY not set"

  • Solution: Set the environment variable export ETHERSCAN_API_KEY="your_key"

❌ "Connection closed" or "Runtime error"

  • Solution: Ensure you're not running in nested async context
  • Check that the server.py uses synchronous main() function

❌ "Tool not found"

  • Solution: Verify tool names use underscores (account_balance not account/balance)
  • Check that tool renaming for Gemini compatibility is applied

❌ "Timeout after 120 seconds"

  • Solution: Check internet connectivity and API key validity
  • Verify Etherscan API is not experiencing outages

Debug Mode

For debugging, you can modify the server to add verbose logging:

import logging
logging.basicConfig(level=logging.DEBUG)

🀝 Contributing

Adding New Tools

  1. Choose appropriate tool category file (src/tools/)
  2. Follow existing patterns for parameter validation
  3. Add comprehensive docstrings
  4. Test with actual API calls
  5. Update this README with new tool documentation

About

A complete Python implementation of the Etherscan Model Context Protocol (MCP) server, providing comprehensive access to Ethereum blockchain data through the Etherscan API.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages