Ethereum Wallet MCP Server

A Model Context Protocol (MCP) server providing Ethereum wallet generation and HD wallet functionality. This server enables AI assistants like Claude to securely generate Ethereum wallets, work with BIP39 mnemonics, and derive multiple accounts from a single seed phrase.
Features
generate_wallet - Generate a new random Ethereum wallet
generate_wallet_with_mnemonic - Generate a wallet with BIP39 seed phrase
restore_wallet_from_mnemonic - Restore wallet from existing mnemonic
restore_wallet_from_private_key - Restore wallet from private key
derive_multiple_accounts - Derive multiple HD wallet accounts
generate_vanity_address - Generate address matching a pattern
Prompts
create_secure_wallet - Guided secure wallet creation
backup_wallet_guide - Wallet backup instructions
recover_wallet_help - Wallet recovery assistance
Resources
wallet://documentation/bip39 - BIP39 standard documentation
wallet://documentation/derivation-paths - HD derivation path docs
wallet://wordlist/{language} - BIP39 wordlists by language
Installation
pip install -e .
pip install -e ".[dev]"
Usage
Running the Server
ethereum-wallet-mcp
python -m ethereum_wallet_mcp.server
Claude Desktop Configuration
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"ethereum-wallet": {
"command": "ethereum-wallet-mcp"
}
}
}
Example Interactions
User: "Generate a new Ethereum wallet for me"
โ Returns: address, private_key, public_key
User: "Create a wallet with a 24-word seed phrase"
โ Returns: address, private_key, mnemonic (24 words), derivation_path
User: "Restore my wallet from this seed: abandon abandon abandon..."
โ Returns: restored wallet details
User: "Derive 10 accounts from my seed phrase"
โ Returns: list of 10 accounts with addresses and keys
User: "Generate a vanity address starting with 'cafe'"
โ Returns: matching address with generation stats
Security Considerations
โ ๏ธ IMPORTANT SECURITY WARNINGS:
- Never share private keys or mnemonic phrases - These give full access to funds
- This server does not persist sensitive data - Keys exist only in memory during operation
- Use hardware wallets for real funds - Software wallets are inherently less secure
- Vanity addresses carry risks - Never use for high-value storage
- Verify addresses independently - Always double-check derived addresses
Development
Running Tests
black src/ tests/
isort src/ tests/
Type Checking
API Reference
Generate a new random Ethereum wallet with no mnemonic.
Parameters: None
Returns:
address (str): Checksummed Ethereum address
private_key (str): Hex-encoded private key (0x prefixed)
public_key (str): Hex-encoded public key
Generate a new wallet with BIP39 mnemonic seed phrase.
Parameters:
word_count (int, optional): 12, 15, 18, 21, or 24. Default: 12
language (str, optional): Mnemonic language. Default: "english"
passphrase (str, optional): BIP39 passphrase. Default: ""
derivation_path (str, optional): HD path. Default: "m/44'/60'/0'/0/0"
Returns:
address, private_key, public_key
mnemonic (str): Space-separated seed words
derivation_path (str): Path used
passphrase_used (bool): Whether passphrase was applied
Restore a wallet from an existing BIP39 mnemonic.
Parameters:
mnemonic (str, required): Space-separated mnemonic phrase
passphrase (str, optional): BIP39 passphrase. Default: ""
derivation_path (str, optional): HD path. Default: "m/44'/60'/0'/0/0"
Returns: Same as generate_wallet_with_mnemonic (without mnemonic field)
Restore a wallet from a private key.
Parameters:
private_key (str, required): Hex private key (with or without 0x prefix)
Returns:
address, private_key (normalized), public_key
Derive multiple accounts from a single mnemonic.
Parameters:
mnemonic (str, required): BIP39 mnemonic
count (int, optional): Number of accounts (1-100). Default: 5
start_index (int, optional): Starting index. Default: 0
passphrase (str, optional): BIP39 passphrase. Default: ""
base_path (str, optional): Base HD path. Default: "m/44'/60'/0'/0"
Returns:
accounts (list): List of {index, derivation_path, address, private_key, public_key}
total_derived (int): Number of accounts derived
base_path (str): Base path used
Generate an address matching a vanity pattern.
Parameters:
prefix (str, optional): Desired prefix after 0x (hex chars)
suffix (str, optional): Desired suffix (hex chars)
case_sensitive (bool, optional): Match case exactly. Default: false
timeout_seconds (int, optional): Max search time. Default: 60
Returns:
address, private_key, public_key
pattern_matched (str): Matched pattern
attempts (int): Addresses tried
time_seconds (float): Time taken
difficulty (int): Estimated 1-in-N difficulty
License
MIT License
Contributing
Contributions welcome! Please read the contributing guidelines and submit pull requests.