npx @moly-mcp/lido
Zero-config Lido MCP Server you can run instantly with npx — no local setup required.
What is it?
@moly-mcp/lido is a standalone npm package that runs a full Lido MCP server on your machine. Any MCP-compatible AI client (Claude Desktop, Cursor, Windsurf) can connect to it and interact with Lido staking, withdrawals, wrapping, and governance — without you writing a single line of code.
The private key and API keys are stored locally in
~/.moly/config.json (chmod 600). They never leave your machine.Quick start
Terminal
# Run once — wizard launches on first use
npx @moly-mcp/lidoThe interactive wizard walks you through network, mode, optional private key, and AI provider selection. When done it prints the exact config snippet to paste into your AI client.
Commands
| Command | Description |
|---|---|
| npx @moly-mcp/lido | First run: wizard → MCP server. Subsequent runs: start server directly |
| moly setup | Re-run the full setup wizard |
| moly config | Print current configuration (keys redacted) |
| moly reset | Delete ~/.moly/config.json and start fresh |
| npx @moly-mcp/lido --server | Force-start MCP server (use this in AI client configs) |
Add to your AI client
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"moly": {
"command": "npx",
"args": ["@moly-mcp/lido", "--server"]
}
}
}Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"moly": {
"command": "npx",
"args": ["@moly-mcp/lido", "--server"]
}
}
}Windsurf
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"moly": {
"command": "npx",
"args": ["@moly-mcp/lido", "--server"]
}
}
}Available tools
Once connected, your AI client has access to all 28 tools:
| Tool | Type | Description |
|---|---|---|
| get_balance | Read | ETH, stETH, wstETH balances |
| get_rewards | Read | Staking reward history over N days |
| get_conversion_rate | Read | stETH ↔ wstETH exchange rate |
| get_withdrawal_requests | Read | Pending withdrawal NFT IDs |
| get_withdrawal_status | Read | Finalization status per request |
| get_proposals | Read | Recent Lido DAO proposals |
| get_proposal | Read | Single proposal details |
| get_total_position | Read | Cross-chain aggregated position (ETH + Base + Arbitrum) |
| get_bounds | Read | Current policy bounds |
| get_trade_history | Read | Query activity ledger with filters |
| get_staking_summary | Read | Aggregate ledger stats |
| get_settings | Read | Current mode, network, RPC |
| stake_eth | Write | Stake ETH → receive stETH |
| request_withdrawal | Write | Enter Lido withdrawal queue |
| claim_withdrawals | Write | Claim finalized withdrawals |
| wrap_steth | Write | stETH → wstETH |
| unwrap_wsteth | Write | wstETH → stETH |
| cast_vote | Write | Vote on Lido DAO proposal |
| set_bounds | Write | Update policy bounds |
| update_settings | Write | Change mode/network/RPC mid-conversation |
| get_l2_balance | Bridge | L2 balances on Base or Arbitrum (mainnet only) |
| get_bridge_quote | Bridge | Quote for bridging to Ethereum L1 |
| bridge_to_ethereum | Bridge | Bridge ETH/wstETH from L2 to L1 |
| get_bridge_status | Bridge | Track in-progress bridge transaction |
| set_alert | Alert | Create alert rule |
| list_alerts | Alert | List all configured alerts |
| remove_alert | Alert | Remove alert by ID |
| configure_alert_channels | Alert | Set Telegram/webhook notification config |
All write tools support
dry_run. In simulation mode, dry_run defaults to true — nothing is ever broadcast unless you explicitly set it to false and switch to live mode. Bridge tools only work on mainnet.