Give your AIa wallet.Keep the leash.
Claude, Cursor and any MCP client can read your Solana wallet and propose SOL transfers. Nothing moves until you see the exact transaction — and sign it yourself.
- Tools
- 5
- Can sign
- 0
- Signer
- you
The whole idea, in one line
The AI writes the request.
You sign the transaction.
Three parties.
One of them holds the key.
Your assistant talks to LEASH over MCP. LEASH talks to you. The chain only ever hears from your wallet.
- AAssistantClaude · Cursor · any MCP client↓ proposes
- LLEASH/api/mcp · validates & holds↓ asks — you sign or reject
- YYouPhantom · Solflare · your key
- 01Propose
Your assistant calls prepare_sol_transfer with a destination and an amount.
- 02Validate
LEASH checks address, amount, balance and fee — then holds a pending request for ten minutes.
- 03Review & sign
You see the exact destination, amount and fee, and approve in Phantom or Solflare. Or reject.
- 04Verify
LEASH checks the signed transaction matches the request, broadcasts it once and reports the real on-chain status.
Five tools. Four only read. One can ask.
- 01
get_wallet_addressPublic address of the wallet you authorized.Read only - 02
get_sol_balanceCurrent SOL balance and network.Read only - 03
get_token_balancesNon-zero SPL / Token-2022 balances (mint, amount).Read only - 04
prepare_sol_transferProposes a SOL transfer. Creates a pending request — never signs.Needs your signature - 05
get_transaction_statusHonest status of a request or any signature.Read only
- Your public addressAlready public on-chain.
- SOL & SPL balancesRead from public chain data.
- Your requests & statusesOnly for the wallet you paired.
- The last 50 actionsAn activity log you can audit.
- Seed phrases or private keysNever requested, never stored, never transmitted.
- Signing on your behalfThe server holds no key. It can only prepare.
- Swaps, approvals, arbitrary programsOne instruction type: a plain SOL transfer.
- Other people's walletsEvery token is bound to exactly one wallet.
Watch a request
wait for its holder.
A simulation of the real flow. Hover to pause, click any step to jump. In the product, the request appears on your dashboard and your wallet asks for the signature.
prepare_sol_transfer({ to: "7xKX…sAsU", amount_sol: "0.25" })- Send
- 0.25 SOL
- Fee
- 0.000005 SOL
- To
- 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU
Requests are single-use. Repeating the call returns the same pending request; changing parameters creates a new one that also needs your signature. Expired or rejected requests can never be submitted.
One URL.
One bearer token.
- 1Open the dashboard and connect your wallet.
- 2Sign a one-time message to prove ownership — no transaction, no fee.
- 3Generate an MCP token. It is shown once and bound to that wallet.
- 4Add the server to your client with the snippet for it.
Transport: Streamable HTTP at /api/mcp. The dashboard shows these snippets prefilled with your URL and token.
claude mcp add --transport http leash https://your-leash.vercel.app/api/mcp \
--header "Authorization: Bearer leash_…"{
"mcpServers": {
"leash": {
"url": "https://your-leash.vercel.app/api/mcp",
"headers": {
"Authorization": "Bearer leash_…"
}
}
}
}{
"mcpServers": {
"leash": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://your-leash.vercel.app/api/mcp",
"--header",
"Authorization:${LEASH_AUTH}"
],
"env": {
"LEASH_AUTH": "Bearer leash_…"
}
}
}
}Paranoid by design.
Boring on purpose.
- Ed25519 pairing
- You prove wallet ownership by signing a message. The server verifies it and sets an httpOnly session.
- Hashed tokens
- MCP tokens are shown once and stored only as a SHA-256 hash. Rotate or revoke at any time.
- Exact-match verification
- The signed transaction must be one System transfer, from → to, for the approved lamports, plus the leash memo.
- Single-use lock
- First submit or reject wins. A request can be broadcast exactly once — then re-verified on-chain.