Self-custody Ethereum agent wallet (MCP/stdio). Keys stay in a local Docker volume.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
docker run -i --rm ghcr.io/rustok-org/rustok-wallet:v0.4.2
MCP client config
{
"mcpServers": {
"rustok-wallet": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rustok-org/rustok-wallet:v0.4.2"
]
}
}
}MCP Server for Rustok — connects Claude Desktop, Cursor, and cloud agents to the Rustok wallet via Gateway.
Rustok ships two wallet products — pick the trust model you want:
rustok-wallet (agent edition) | rustok-wallet-tui (this repo) | |
|---|---|---|
| Who signs | the agent, unrestricted | you, in a separate terminal (rustok-console, y/N + PIN) |
| Where | rustokwallet.com · ClawHub · image ghcr.io/rustok-org/rustok-wallet | this repo (main) · ClawHub · image ghcr.io/rustok-org/rustok-wallet-tui |
| Line | 0.4.x (maintained from the wallet-v0.4.0 tag) | 0.5.x+ |
Install trusted cosign 3+ independently, then use the verify-before-execute bootstrap in the published release skill. It downloads over --proto '=https' --tlsv1.2, verifies the manifest signature and installer hash before running the installer. There is no pipe-to-shell path. The repository skill is an unfilled source template; install wallet binaries only from the generated release/listing package.
rustok init # you choose a 6-digit PIN; the recovery phrase prints once
rustok connect claude # read-only; also cursor / hermes / openclaw
rustok connect claude --force --capabilities read_wallet,preview_tx,execute_tx requires confirmation in the user's own terminal before expanding rights. Core policy and PIN remain separate from the capability grant. rustok update verifies a signed release and preserves explicit subsets; live sessions retain their old image/grants until a human restart. There are no hard-coded spending limits after the user acknowledges unlimited autonomy.
The wallet is one self-contained image (Core + Gateway + MCP over stdio + the
human-approval console); keys live only in a local container volume and never
leave your machine. Transactions that move funds are approved by a human in a
second terminal with rustok console — the agent cannot drive it.
The wallet skill (skills/rustok-wallet-tui/)
installs straight from this repo:
# skills CLI (Claude Code, Cursor, and other agents) — https://skills.sh
npx skills add rustok-org/mcp
# Hermes Agent
hermes skills tap add rustok-org/mcp
hermes skills install rustok-org/mcp/rustok-wallet-tui
Both editions are on ClawHub as separate listings: the agent edition at
@temrjan/rustok-wallet, and the
console edition — the maintained one — at
@rustok/wallet, published as
Rustok Agentic Wallet.
io.github.rustok-org/rustok-wallet
(OCI package ghcr.io/rustok-org/rustok-wallet, stdio). A TUI-edition
registry entry ships separately as io.github.rustok-org/rustok-wallet-tui.@rustok/wallet, and the agent
edition at @temrjan/rustok-wallet.# Install dependencies
uv sync --dev
# Run the server
uv run rustok-mcp
# Or run stdio transport
uv run rustok-mcp-stdio
docker build -t rustok-mcp .
docker run -p 127.0.0.1:3001:3001 -e RUSTOK_MCP_HOST=0.0.0.0 rustok-mcp
To run the full stack (MCP → Gateway → Core + Redis), use the compose file
in rustok-org/meta.
The network-facing SSE transport is gated by a shared bearer token.
RUSTOK_MCP_INBOUND_API_KEY) — clients must send
Authorization: Bearer <token> to reach /mcp/sse and /mcp/message.
Distinct from the outbound RUSTOK_MCP_API_KEY (MCP → Gateway).openssl rand -hex 32.EventSource API cannot set headers and is not a supported
client; use an MCP client that sends request headers./health is always public (used by the container healthcheck).⚠️ The MCP has no built-in brute-force / rate-limit protection. Terminate it behind the edge proxy (Caddy) with host-level rate limiting (see the
rustok-org/metadeploy docs); do not expose it to the internet directly.
Rustok is a self-custody AI-native crypto wallet. The MCP Server is a thin bridge between LLM agents and the Rustok Gateway — private keys never leave the Core service (they stay in the local keystore volume).
read_wallet / preview_tx / execute_tx): the
stdio transport defaults to read-only (explicit grants use
RUSTOK_MCP_CAPABILITIES); the network-facing SSE transport is bearer-gated.txguard surfaces
a risk level on preview but does not block. Opt-in limits may come later.RUSTOK_ALLOWED_CHAINS decides which ones are shown (default
1,8453,42161 — Ethereum, Base, Arbitrum). Those read out of the box: the build
carries two public nodes for each. Naming your own (RUSTOK_RPC_URLS_<id>, or an
Alchemy key) replaces the carried list rather than joining it. Any node that
reads a balance learns the address and the IP that asked — that is true of ours,
yours, and your provider's alike.preview_transaction returns the decoded call (who/what is
authorized), a pre-sign simulation (revert check), gas, and a txguard risk level.
Execution is not exposed as an MCP tool.This repository is licensed under MIT-0.
The warranty and liability terms it carries, and the limit of every safeguard this wallet advertises, are stated in full here: https://github.com/rustok-org/mcp/blob/main/DISCLAIMER.md
The Rustok Core wallet engine is a proprietary artifact built from the private rustok-org/core repository.