Monero MCP Server
Provides tools for interacting with a Monero wallet, enabling AI agents to check balances, receive payments, and send XMR through the Monero network.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Monero MCP ServerWhat's my Monero balance?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π Monero MCP Server
The world's first MCP server for Monero. Give any AI agent a private wallet.
What is this?
This is a bridge between AI agents and the Monero network. It lets any AI agent β OpenClaw, Agent Zero, Claude, or any MCP-compatible framework β check balances, receive payments, and send XMR through a simple tool interface.
Think of it as: your AI agent gets its own Monero wallet.
Wait, what's MCP?
MCP (Model Context Protocol) is a standard created by Anthropic that lets AI assistants use external tools. Instead of the AI just generating text, it can call real functions β read files, query databases, or in this case, interact with a Monero wallet.
If you've ever wanted your AI agent to autonomously receive and send XMR β whether it's an OpenClaw agent running a service, an Agent Zero instance managing its own budget, or just Claude checking your balance β that's what this does.
Why Monero? Why not Ethereum or Bitcoin?
Because AI agents need privacy more than humans do.
When a human makes transactions, there's natural noise β you buy coffee at random times, pay rent irregularly, your patterns are chaotic. An AI agent is different. Every transaction follows logic. On a transparent blockchain, anyone can watch an agent's on-chain behavior and reverse-engineer its strategy, its triggers, and how to exploit it.
Monero's privacy-by-default design means an agent's transaction history, balance, and counterparties are hidden. That's not a nice-to-have β it's a security requirement for any autonomous agent handling real value.
Privacy is not a feature for AI agents. It's infrastructure.
Features
12 tools covering everything an AI agent needs:
Category | Tools |
Balance & Info |
|
Transactions |
|
Receiving |
|
Sending |
|
Validation |
|
Optional (opt-in) |
|
Read-only by default. Sending XMR requires explicit opt-in via environment variable.
Security: Built for a hostile world
This server assumes the AI agent will encounter prompt injection attacks β malicious text designed to trick the AI into sending funds to an attacker. The AI is not our security boundary. The MCP server is.
Five defense layers, all configurable:
π‘οΈ Address Allowlist β Lock transfers to known addresses only. Prompt injection can't send to unknown wallets.
π‘οΈ Two-Step Confirmation β Transfers return a preview + one-time token. Must call confirm_transfer to execute. Attackers can't predict the token.
π‘οΈ Rate Limiting β Cooldown between transfers + daily XMR limit. Limits damage even if everything else fails.
π‘οΈ Audit Log β Every tool call logged as JSONL. Rejected transfers are logged too β those are the interesting ones.
π‘οΈ Input Sanitization β Strict base58 validation before anything reaches the RPC.
This is a tool that can move real money. We built the security for that reality.
Quickstart (5 min)
Get a mainnet receive address and verify the MCP server without downloading the blockchain:
git clone <this-repo> && cd monero-mcp
npm install && npm run build
docker compose up -d
./test-connection.shYouβll see your mainnet receive address. Send XMR to it. To test the MCP handshake (stdio):
node test-mcp-stdio.mjsOptional: run the full MCP test script (build + stdio test; runs npm install if needed):
./test-mcp.shClaude Desktop Integration
Add to your Claude Desktop config
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"monero": {
"command": "npx",
"args": ["-y", "monero-mcp@latest"],
"env": {
"MONERO_RPC_HOST": "127.0.0.1",
"MONERO_RPC_PORT": "18082",
"MONERO_NETWORK": "mainnet",
"MONERO_ALLOW_TRANSFERS": "false"
}
}
}
}Restart Claude Desktop. Ask: "What's my Monero balance?" to verify.
Cursor / Claude Code Integration
Add to .cursor/mcp.json or Claude Code MCP config:
{
"mcpServers": {
"monero": {
"command": "npx",
"args": ["-y", "monero-mcp@latest"],
"env": {
"MONERO_RPC_HOST": "127.0.0.1",
"MONERO_RPC_PORT": "18082",
"MONERO_NETWORK": "stagenet",
"MONERO_ALLOW_TRANSFERS": "false"
}
}
}
}Docker
docker run -e MONERO_RPC_HOST=host.docker.internal \
-e MONERO_RPC_PORT=18082 \
-e MONERO_NETWORK=stagenet \
ghcr.io/baltsar/monero-mcp:latestAgent Zero integration
To use this MCP server with Agent Zero in Docker:
See AGENT-ZERO-DOCKER-SETUP.md for the container run command and volume mount.
Wallet persistence: If containers are recreated, the wallet can be lost unless it runs on the host or uses a persistent volume. For the most robust setup, run
monero-wallet-rpcon the host and point MCP athost.docker.internal:18083. Details and backup steps: AGENT-ZERO-DOCKER-SETUP.md#wallet-persistence-critical.Verification (Agent Zero + Docker): Before relying on your wallet: (1) Confirm wallet-rpc is not running inside the Agent Zero container. (2) Confirm wallet files exist on the host (e.g.
~/monero-wallet/) or that you use this repoβsdocker compose(wallet lives in thewallet-datavolume). Full checklist: AGENT-ZERO-DOCKER-SETUP.md β Verification.In Agent Zero β Settings β MCP, add a server:
Field | Value |
Name |
|
Command |
|
Args |
|
Env: MONERO_RPC_HOST=host.docker.internal, MONERO_RPC_PORT=18083, MONERO_NETWORK=mainnet, MONERO_ALLOW_TRANSFERS=false (read-only).
Copy-paste config and troubleshooting: AGENT-ZERO-DOCKER-SETUP.md.
Remote nodes
The default stack uses a remote node (no local blockchain sync). Default daemon in docker-compose.yml:
Default:
rucknium.me:18081
If you get "no connection to daemon", change --daemon-address in docker-compose.yml to one of these and recreate wallet-rpc:
xmr-node.cakewallet.com:18081node.moneroworld.com:18089
To run your own node and download the chain: docker compose --profile local-node up -d.
Troubleshooting
Problem | What to do |
"no connection to daemon" | Switch remote node in |
Wallet disappeared after container recreated | Run wallet-rpc on the host, or use a persistent volume for the wallet dir and never run |
Empty address in test-connection.sh | Install |
wallet-rpc wonβt start | Check that |
test-mcp.sh: "tsc: command not found" | Run |
Manual setup (no Docker)
Prerequisites
You need a running monero-wallet-rpc instance. If you're just testing:
# Download Monero CLI from https://getmonero.org/downloads
# Start the daemon on stagenet (test network, no real money)
monerod --stagenet --detach
# Start wallet RPC on stagenet
monero-wallet-rpc --stagenet \
--rpc-bind-port 38082 \
--wallet-dir ./wallets \
--disable-rpc-loginInstall & Build
# From this repo root:
npm install
npm run buildConfigure
Copy .env.example and edit:
cp .env.example .envMONERO_RPC_HOST=127.0.0.1
MONERO_RPC_PORT=38082
MONERO_NETWORK=stagenet
# Safety defaults β read only
MONERO_ALLOW_TRANSFERS=false
MONERO_REQUIRE_CONFIRMATION=true
MONERO_TRANSFER_COOLDOWN_SECONDS=60
MONERO_AUDIT_LOG_FILE=./monero-mcp-audit.jsonlConnect to your agent
This is a standard MCP server using stdio transport. Connect it to any MCP-compatible agent or framework.
Example β start the server manually:
node build/index.jsThe server communicates over stdin/stdout using JSON-RPC (MCP protocol). Point your agent framework's MCP client config at the binary and you're good.
Works with OpenClaw, Agent Zero, Claude Code, Cursor, any local LLM setup with MCP support β whatever you run.
Test with MCP Inspector
npx @modelcontextprotocol/inspectorMCP Docs
Protocol: Model Context Protocol
TypeScript SDK: modelcontextprotocol/typescript-sdk
Configuration Reference
Variable | Default | Description |
|
| Wallet RPC host |
|
| Wallet RPC port |
| β | RPC username (digest auth) |
| β | RPC password (digest auth) |
|
|
|
|
| Enable send operations |
| β | Max XMR per single transfer |
| β | Max XMR sent per rolling 24h |
|
| Min seconds between transfers |
| β | Comma-separated address allowlist |
|
| Two-step transfer confirmation |
| β | Path for JSONL audit log |
|
| Enable |
Recommended Production Config
MONERO_ALLOW_TRANSFERS=true
MONERO_ALLOWED_ADDRESSES=4YourTrustedAddress1,4YourTrustedAddress2
MONERO_REQUIRE_CONFIRMATION=true
MONERO_DAILY_LIMIT_XMR=1.0
MONERO_TRANSFER_COOLDOWN_SECONDS=300
MONERO_AUDIT_LOG_FILE=./audit.jsonlNetworks
Network | Daemon Port | Wallet RPC Port | Address Prefix | Real Money? |
Mainnet | 18081 | 18082 |
| β Yes |
Stagenet | 38081 | 38082 |
| β No β use this for testing |
Testnet | 28081 | 28082 |
| β No |
β οΈ Status: Early Alpha
This is v0.1 β built in a night before heading to Monerotopia.
It compiles, the security layers are in place, but it has NOT been audited. Do not use with mainnet funds you can't afford to lose.
If you're a Monero developer or security researcher: tear it apart. That's how we make it production-ready.
β οΈ Important Warnings
This software is not audited. It is early-stage, open-source software that interacts with real money. Use at your own risk.
Your seed phrase is your responsibility. Write it down. Store it offline. If you lose it, your funds are gone permanently. No one can help you.
AI agents can be manipulated. The security layers in this server (address allowlists, two-step confirmation, rate limiting, audit logging) reduce risk but do not eliminate it. Always use all available protections in production.
Do not use with funds you cannot afford to lose.
Start on stagenet. Test everything there before going near mainnet. Free test XMR is available via faucets.
See DISCLAIMER.md for full details.
Contributing
We need help. This is v0.1 and there's a lot to do. See CONTRIBUTING.md for details.
Good first issues:
Better error messages for common RPC failures
Transaction memo/note support
Multiple destination transfers
Help wanted:
Tor proxy support for RPC connection
Multisig wallet operations
Cold signing workflow
Hardware wallet integration via RPC
Integration test suite with stagenet
License
MIT β do whatever you want with it.
Acknowledgments
Built with love for the Monero community.
Inspired by Monerotopia 2026 and the simple idea that if AI agents are going to handle money, they should do it privately.
If you find this useful, consider donating XMR to support development:
45CGtczedKaT6gLHUd2FDebFjGpzio3FzB2AKtx82NxWPF99cfTMeJcCs1XhF9zJTLNVmd6chvMHSNb2symioZkp2f24nfK
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Baltsar/monero-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server