MCP server · Solana

A wallet for every AI agent

Your agent opens its own Solana wallet through MCP. The key is made on your machine and never leaves it. You decide how much it can spend.

Get started → See the tools
$ npm install -g keyhole-money
claude · keyhole connected

Works with any client that speaks MCP

Claude CodeClaude DesktopCursorCodexWindsurfClineZedYour own agent Claude CodeClaude DesktopCursorCodexWindsurfClineZedYour own agent

No account to make. No company holding your keys. No dashboard to log in to. Your agent asks for a wallet, gets one in a second, and works inside limits that only you can change.

Why it exists

Agents need to pay for things. Handing them your wallet is a bad idea.

Agents now buy data, pay for APIs and tip other agents. Pasting your own private key into a config file gives them everything you own. A separate wallet with hard limits gives them only what you put in it.

Private by default

Keys are created and encrypted on the machine the agent runs on and never leave it. No sign-up, no account, no tracking.

Limits it can't touch

Per-send caps, a daily cap that counts fees, token limits, an allowlist and a freeze switch. The agent can read its limits. Only you can change them, and edits made behind Keyhole's back are caught and refused.

One command to connect

Add it to Claude Code, Cursor, Codex or anything else that supports MCP. Eight tools appear and your agent can use them straight away.

How it works

Three steps, about two minutes.

01

Install and lock

Install the package and create your vault with a passphrase. That passphrase encrypts every key.

keyhole init
02

Connect your agent

Register the MCP server with your client. The agent now has wallet tools.

claude mcp add keyhole -- keyhole-mcp
03

Fund and go

Ask the agent to open a wallet, send a little SOL to the address it gives you, and set limits if the defaults don't suit.

keyhole policy bot --daily 2
wallet_create
The tools

Everything a wallet does. Nothing it shouldn't.

wallet_create

Opens a fresh wallet with its own keypair and returns the address to fund.

wallet_balance

SOL and every token it holds, including Token-2022.

wallet_send_sol

Sends SOL with an optional memo, checked against your limits first.

wallet_send_token

Sends USDC or any SPL token you've allowed, and creates the recipient's token account if needed.

wallet_sign_message

Signs plain-text log-in messages, only once you switch it on. Anything shaped like a transaction is refused.

wallet_limits

Shows the agent its caps and what it has spent in the last 24 hours.

wallet_history

Recent transactions with times and status.

wallet_list

Every wallet on this machine, by label and address.

Limits

You hold the keys to the keys.

Limits live in the encrypted vault, not in the agent's reach. Change them from the owner CLI and they apply at once, even mid-conversation.

research-bot, today

Spent in the last 24h0.18 / 0.50 SOL
Send 0.05 SOL to data providersent
Send 12.5 USDC to designersent
Send 3 SOL to unknown addressover limit
Send a token you never allowedrefused

What you control

Defaults are 0.1 SOL per send and 0.5 SOL a day, all fees included. Tokens can't move and messages can't be signed until you allow them.

Per-send and daily SOL caps
Per-token caps (USDC, anything)
Only pay addresses I approve
Agents can open new wallets
Sign log-in messages
Freeze this wallet
Privacy

Where everything lives.

Private keys

Generated on your machine, encrypted with scrypt and AES-256-GCM, stored in a file only your user can read.

your machine

Your passphrase

Set in your MCP client's config on your own machine. It unlocks the vault when the server starts, and the wallet never stores it.

your machine

Limits and spend log

Kept next to the vault and sealed with a key from your passphrase. The agent can read them through MCP, has no tool that writes them, and hand edits are refused.

your machine

Balance lookups and sends

Go to the Solana RPC you choose. Point it at your own node and no third party sees them.

your RPC

Keyhole fees

Paid on chain to one public Keyhole fee address. Anyone can see that a wallet uses Keyhole, but not who owns it.

public

Accounts, emails, analytics

There aren't any.

none
Questions

Fair questions.

Do you ever see my keys?

No. The server runs on your computer and talks to your agent over a local connection. There is no hosted part that could see a key.

Can the agent raise its own limit?

Not through MCP. None of the eight tools can change limits, and if the files are edited by hand Keyhole refuses to send. If your agent can also run shell commands as you, keep your Keyhole folder and MCP config outside its sandbox. The security model explains how.

What if my agent gets tricked by a prompt?

The worst case is spending up to the limits you set, to addresses on your allowlist if you've switched that on. That's the reason for the limits. Keep only what the agent needs in each wallet.

Can I take the wallet into Phantom?

Yes. keyhole export <wallet> prints the secret key so you can import it anywhere.

Does it work on devnet?

Devnet is the default. Point KEYHOLE_RPC at a mainnet RPC when you're ready.

What does it cost?

Keyhole adds 1% on top of each send on mainnet, in the same transaction, so the recipient still gets the full amount. Those fees buy the KEY token for the treasury. Devnet is free. Normal Solana network fees apply too, a fraction of a cent.

Give your agent a wallet with a ceiling.

Install, connect, fund. Your keys stay where they are.

Read the setup guide →