MCP Ledger Server
README.md
# MCP Ledger Server
A comprehensive Model Context Protocol (MCP) server for secure Ledger hardware wallet integration with Ethereum blockchain operations. Build AI agents that can safely interact with your crypto assets using hardware-level security.
## π Features
### π **Hardware Wallet Security**
- β
Ledger hardware wallet integration with latest @ledgerhq libraries
- β
Private keys never leave your device - all signing happens on hardware
- β
Transaction confirmation required on device screen
- β
Multi-account support with BIP32 derivation paths
### βοΈ **Multi-Network Support**
- β
**6 Networks**: Ethereum, Polygon, Arbitrum, Optimism, Base, Sepolia
- β
Enhanced RPC with Alchemy API integration
- β
Automatic fallback to public endpoints
- β
EIP-1559 transaction support with dynamic gas pricing
### πͺ **Complete Asset Management**
- β
Real-time ETH balances across all networks
- β
ERC20 token discovery and balances via Dune Sim API
- β
ERC721/ERC1155 NFT tracking and transfers
- β
Token approval management (approve/revoke/modify)
- β
USD pricing and portfolio valuation
### π€ **AI Agent Ready**
- β
**14 MCP tools** for complete blockchain operations
- β
One-command convenience functions (send ETH, transfer tokens, etc.)
- β
Transaction crafting with automatic gas estimation
- β
Message signing for Sign-In with Ethereum (SIWE)
- β
Real-time gas analysis and optimization
## π Available Tools
### **π Wallet & Balance Tools**
| Tool | Description | Example Use |
|------|-------------|-------------|
| `get_ledger_address` | Get Ethereum address from Ledger | Get your wallet address |
| `get_balance` | Get ETH balance for any address | Check account balance |
| `get_token_balances` | Get ERC20 token balances | View your token portfolio |
| `get_nft_balances` | Get NFT collection balances | See your NFT holdings |
### **β‘ Transaction Tools**
| Tool | Description | Example Use |
|------|-------------|-------------|
| `craft_transaction` | Create unsigned transactions | Prepare complex contract calls |
| `sign_transaction` | Sign with Ledger device | Sign prepared transactions |
| `sign_message` | Sign messages (SIWE) | Authenticate with dApps |
| `broadcast_transaction` | Send signed tx to network | Submit transactions |
### **π― Convenience Tools (One-Click Actions)**
| Tool | Description | Example Use |
|------|-------------|-------------|
| `send_eth` | Send ETH (craftβsignβbroadcast) | Send ETH to friend |
| `send_erc20_token` | Send tokens (craftβsignβbroadcast) | Send USDC payment |
| `send_erc721_token` | Send NFTs (craftβsignβbroadcast) | Transfer NFT |
| `manage_token_approval` | Manage approvals (craftβsignβbroadcast) | Approve DEX spending |
### **π οΈ Developer Tools**
| Tool | Description | Example Use |
|------|-------------|-------------|
| `get_contract_abi` | Get verified contract ABIs | Interact with contracts |
| `analyze_gas` | Gas price analysis & optimization | Optimize transaction costs |
## π Quick Start
### 1. **Install Dependencies**
```bash
# Clone and install
git clone <repository-url>
cd mcp-ledger
npm install
npm run build
```
### 2. **Get API Keys**
#### π **Required: Dune Sim API**
```bash
# Get your free API key at: https://sim.dune.com
# Required for token/NFT discovery across 60+ chains
DUNE_SIM_API_KEY=your_dune_sim_api_key_here
```
#### π **Optional: Performance APIs**
```bash
# Alchemy (recommended) - Enhanced RPC performance
# Get key at: https://alchemy.com (2M+ requests/month free)
ALCHEMY_API_KEY=your_alchemy_api_key_here
# Etherscan (optional) - Contract verification
# Get key at: https://etherscan.io/apis (100k requests/day free)
ETHERSCAN_API_KEY=your_etherscan_api_key_here
```
### 3. **Configure Environment**
```bash
# Copy template and add your keys
cp .env.example .env
# Edit .env with your API keys
```
### 4. **Connect Your Ledger**
1. π **Connect** Ledger device via USB
2. π **Unlock** device with PIN
3. π± **Open** Ethereum app
4. βοΈ **Enable** "Blind signing" in Ethereum app settings
### 5. **Test Connection**
```bash
# Test basic connection
node test-ledger-connection.js
# Test MCP server
npm start
# In another terminal:
node test-server.cjs
```
## π₯οΈ Integration with AI Tools
### **π Claude Code (Recommended)**
The easiest way to use MCP Ledger with Claude Code:
```bash
# Add MCP Ledger server to your current project
claude mcp add ledger --env DUNE_SIM_API_KEY=your_key_here -- node /absolute/path/to/mcp-ledger/dist/index.js
# Or add with all environment variables
claude mcp add ledger \
--env DUNE_SIM_API_KEY=your_dune_key \
--env ALCHEMY_API_KEY=your_alchemy_key \
--env ETHERSCAN_API_KEY=your_etherscan_key \
-- node /absolute/path/to/mcp-ledger/dist/index.js
# Check server status
claude mcp list
/mcp
# Remove server if needed
claude mcp remove ledger
```
**Configuration Scopes:**
- `--scope local` - Private to current project (default)
- `--scope project` - Shared via `.mcp.json` (team access)
- `--scope user` - Available across all your projects
### **π₯οΈ Claude Desktop** (macOS/Windows)
1. Open Claude Desktop settings
2. Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"mcp-ledger": {
"command": "node",
"args": ["/absolute/path/to/mcp-ledger/dist/index.js"],
"env": {
"DUNE_SIM_API_KEY": "your_dune_key_here",
"ALCHEMY_API_KEY": "your_alchemy_key_here",
"ETHERSCAN_API_KEY": "your_etherscan_key_here"
}
}
}
}
```
### **β
Verify Integration**
After setup, verify the server is working:
```bash
# In Claude Code
/mcp
# Should show:
β
ledger: Connected (22 tools available)
- 14 Ethereum tools + 8 Solana tools
- Networks: mainnet, polygon, arbitrum, optimism, base, sepolia, solana-mainnet, solana-devnet, solana-testnet
```
**Available Tools:**
- `get_ledger_address`, `get_balance`, `get_token_balances`, `get_nft_balances`, `craft_transaction`, `get_contract_abi`, `sign_transaction`, `sign_message`, `broadcast_transaction`, `send_eth`, `send_erc20_token`, `send_erc721_token`, `manage_token_approval`, `analyze_gas`
### **Cursor IDE**
1. Open Cursor Settings β Extensions β MCP
2. Add server configuration:
```json
{
"name": "mcp-ledger",
"command": "node",
"args": ["/path/to/mcp-ledger/dist/index.js"],
"env": {
"DUNE_SIM_API_KEY": "your_key_here"
}
}
```
### **VS Code with MCP Extension**
1. Install MCP extension
2. Add to MCP settings:
```json
{
"mcp.servers": {
"ledger": {
"command": "node",
"args": ["/absolute/path/to/mcp-ledger/dist/index.js"],
"env": {
"DUNE_SIM_API_KEY": "your_key_here"
}
}
}
}
```
### **Other MCP-Compatible Tools**
Use this general configuration pattern:
- **Command**: `node`
- **Args**: `["/path/to/mcp-ledger/dist/index.js"]`
- **Transport**: stdio
- **Environment**: Add your API keys
## π‘ Usage Examples
### **Check Your Portfolio**
```
Show me my ETH balance and top 5 token holdings on mainnet
```
### **Send Payments**
```
Send 0.1 ETH to 0x742d35Cc6631C0532925a3b8D0c7e89e5a3A5d34 on mainnet
```
### **Transfer Tokens**
```
Send 100 USDC to my friend at 0x... on polygon network
```
### **Manage Approvals (Ethereum)**
```
Revoke all token approvals for Uniswap router on mainnet
```
### **Gas Optimization**
```
Analyze current gas prices on mainnet and recommend optimal settings for an ERC20 transfer
```
### **NFT Operations (Ethereum)**
```
Transfer my CryptoPunk #1234 to 0x... and show me the transaction details
```
## π§ Advanced Configuration
### **Custom Networks**
Add custom RPC endpoints in `.env`:
```bash
# Custom RPC URLs (optional)
MAINNET_RPC_URL=https://your-custom-rpc.com
POLYGON_RPC_URL=https://polygon-custom.com
```
### **Development Mode**
```bash
# Run in development with hot reload
npm run dev
# Run comprehensive tests
npm run test:all
# Test with real hardware (Ledger required)
npm run test:hardware
```
### **Performance Tuning**
```bash
# Adjust cache and timeout settings
REQUEST_TIMEOUT=60000 # 60 second timeout
CACHE_TTL=600 # 10 minute cache
```
## π« Without Required APIs
**β οΈ Important**: Without `DUNE_SIM_API_KEY`:
- β Token discovery won't work
- β NFT discovery won't work
- β
Only basic ETH operations available
- β
Ledger signing still works
- β
Custom transaction crafting works
## π§ Troubleshooting
### **Common Issues**
**MCP Server Not Connecting:**
```bash
# Check if server is properly built
npm run build
# Test server directly
node dist/index.js
# Verify in Claude Code
/mcp
claude mcp list
```
**Ledger Device Issues:**
1. π Ensure device is connected via USB
2. π Device is unlocked with PIN
3. π± Correct app is open (Ethereum or Solana)
4. βοΈ "Blind signing" enabled in Ethereum app
5. π‘ No other applications using the device
**Environment Variables:**
```bash
# Check your environment file
cat .env
# Verify paths are absolute
which node # Use this path in configurations
pwd # Current directory for absolute paths
```
**Network Issues:**
- Use Alchemy API key for better reliability
- Consider QuickNode for production
- Check firewall settings for outbound connections
## ποΈ Architecture
### **Core Technologies**
- **TypeScript** - Full type safety with strict configuration
- **Viem** - Modern Ethereum library for blockchain interactions
- **Ledger SDK** - Official hardware wallet integration
- **MCP SDK** - Model Context Protocol compliance
- **Zod** - Runtime schema validation
### **Service Architecture**
- π **ServiceOrchestrator** - Coordinates all multi-chain operations
- π **LedgerService** - Hardware wallet communication (Ethereum + Solana)
- βοΈ **BlockchainService** - Ethereum multi-network RPC management
- π **SolanaBlockchainService** - Solana multi-network RPC management
- ποΈ **TransactionCrafter** - Smart Ethereum transaction building
- π **SolanaTransactionCrafter** - Smart Solana transaction building
- π **BlockscoutClient** - Contract verification and ABIs (Ethereum)
### **Security Model**
**π Hardware Security**:
- β
Private keys never leave Ledger device
- β
All transactions require physical confirmation on device screen
- β
BIP32 hierarchical deterministic key derivation
- β
Comprehensive input validation and sanitization
**π‘οΈ Software Security**:
- β
Zod schema validation for all inputs
- β
Multi-layer error handling
- β
Process isolation via stdio transport
- β
No authentication required for local use
## π Network Status Verification
When you start the server, you'll see configuration status:
**β
Optimal Setup**:
```
β
Dune Sim API configured for reliable token discovery
β
Enhanced RPC provider configured (Alchemy)
β
Contract verification API configured (Etherscan)
β
Ledger device connected successfully
```
**β οΈ Limited Setup**:
```
β DUNE_SIM_API_KEY is required for token discovery functionality
β οΈ No enhanced RPC provider configured. Using public endpoints.
β οΈ Ledger device not connected (can be connected later)
```
## π€ Contributing
Built with modern TypeScript practices:
- π§ͺ Comprehensive test suite (unit, integration, e2e, hardware)
- π ESLint + TypeScript strict mode
- π Automated CI/CD pipeline
- π Full API documentation
## π License
MIT License - see [LICENSE](LICENSE) file for details.
---
π **Keep Your Crypto Safe**: This tool enhances security by keeping your private keys on hardware while enabling powerful AI interactions with your crypto assets.
Built with β€οΈ by [Dennison Bertram](https://github.com/dennisonbertram)This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues