{
  "markdown": "# rustok-mcp\n\n[![CI](https://github.com/rustok-org/mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/rustok-org/mcp/actions/workflows/ci.yml)\n[![License: MIT-0](https://img.shields.io/badge/License-MIT--0-blue.svg)](https://github.com/rustok-org/mcp/blob/main/LICENSE)\n\n> MCP Server for Rustok — connects Claude Desktop, Cursor, and cloud agents to the Rustok wallet via Gateway.\n\n## Two editions\n\nRustok ships **two wallet products** — pick the trust model you want:\n\n| | `rustok-wallet` (agent edition) | `rustok-wallet-tui` (this repo) |\n|---|---|---|\n| Who signs | the agent, unrestricted | **you**, in a separate terminal (`rustok-console`, y/N + PIN) |\n| Where | [rustokwallet.com](https://rustokwallet.com) · [ClawHub](https://clawhub.ai/temrjan/skills/rustok-wallet) · image `ghcr.io/rustok-org/rustok-wallet` | this repo (`main`) · [ClawHub](https://clawhub.ai/rustok/skills/wallet) · image `ghcr.io/rustok-org/rustok-wallet-tui` |\n| Line | 0.4.x (maintained from the `wallet-v0.4.0` tag) | 0.5.x+ |\n\n## Install (rustok-wallet-tui, self-custody)\n\n```bash\ncurl --proto '=https' --tlsv1.2 -fsSL \\\n  https://raw.githubusercontent.com/rustok-org/mcp/wallet-tui-v0.11.0/scripts/install.sh | sh\n\nrustok init             # creates the wallet — you choose a PIN, it prints the 12 words once\nrustok connect claude   # registers it with your agent (or: cursor / hermes / openclaw)\n```\n\nThe console image is published **by version only** — there is no `latest` tag to\npull, on purpose: the installer pins the exact digest of the release it ships\nwith, and a floating tag would quietly undo that.\n\nThe installer verifies the wallet image's cosign signature **before** anything\ntouches disk, pulls it by digest, and installs the `rustok` command — it never\ntouches a secret, a keystore or your wallet. Requires podman (or docker) and\ncosign; you can read the script before running it. Full walkthrough, including\nthe by-hand setup without the shim: [Installation Guide](docs/INSTALL.md).\n\nThe wallet is one self-contained image (Core + Gateway + MCP over **stdio** + the\nhuman-approval console); keys live only in a local container volume and never\nleave your machine. Transactions that move funds are approved by a human in a\nsecond terminal with `rustok console` — the agent cannot drive it.\n\n## Install as an agent skill\n\nThe wallet skill ([`skills/rustok-wallet-tui/`](skills/rustok-wallet-tui/SKILL.md))\ninstalls straight from this repo:\n\n```bash\n# skills CLI (Claude Code, Cursor, and other agents) — https://skills.sh\nnpx skills add rustok-org/mcp\n\n# Hermes Agent\nhermes skills tap add rustok-org/mcp\nhermes skills install rustok-org/mcp/rustok-wallet-tui\n```\n\nBoth editions are on ClawHub as separate listings: the **agent edition** at\n[`@temrjan/rustok-wallet`](https://clawhub.ai/temrjan/skills/rustok-wallet), and the\n**console edition** — the maintained one — at\n[`@rustok/wallet`](https://clawhub.ai/rustok/skills/wallet), published as\n*Rustok Agentic Wallet*.\n\n## Registries\n\n- **Official MCP Registry** — the **agent edition** is published as\n  [`io.github.rustok-org/rustok-wallet`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.rustok-org/rustok-wallet)\n  (OCI package `ghcr.io/rustok-org/rustok-wallet`, stdio). A TUI-edition\n  registry entry ships separately as `io.github.rustok-org/rustok-wallet-tui`.\n- **ClawHub** — two listings: the **console edition** (maintained) at\n  [`@rustok/wallet`](https://clawhub.ai/rustok/skills/wallet), and the **agent\n  edition** at [`@temrjan/rustok-wallet`](https://clawhub.ai/temrjan/skills/rustok-wallet).\n\n## Quick Start (Development)\n\n```bash\n# Install dependencies\nuv sync --dev\n\n# Run the server\nuv run rustok-mcp\n\n# Or run stdio transport\nuv run rustok-mcp-stdio\n```\n\n## Docker\n\n```bash\ndocker build -t rustok-mcp .\ndocker run -p 127.0.0.1:3001:3001 -e RUSTOK_MCP_HOST=0.0.0.0 rustok-mcp\n```\n\nTo run the full stack (MCP → Gateway → Core + Redis), use the compose file\nin [`rustok-org/meta`](https://github.com/rustok-org/meta).\n\n## Authentication\n\nThe network-facing SSE transport is gated by a shared bearer token.\n\n- **Inbound** (`RUSTOK_MCP_INBOUND_API_KEY`) — clients must send\n  `Authorization: Bearer <token>` to reach `/mcp/sse` and `/mcp/message`.\n  Distinct from the **outbound** `RUSTOK_MCP_API_KEY` (MCP → Gateway).\n- **Dev:** leave it empty — the loopback flow stays open and the server logs a\n  warning at startup.\n- **Prod:** required. The token must travel in the request header, **never in a\n  query string** (query strings leak into access logs). Generate one with\n  `openssl rand -hex 32`.\n- The browser `EventSource` API cannot set headers and is **not** a supported\n  client; use an MCP client that sends request headers.\n- `/health` is always public (used by the container healthcheck).\n- The local **stdio** transport is process-trusted and not gated.\n\n> ⚠️ The MCP has **no built-in brute-force / rate-limit protection**. Terminate it\n> behind the edge proxy (Caddy) with host-level rate limiting (see the\n> [`rustok-org/meta`](https://github.com/rustok-org/meta) deploy docs); do not\n> expose it to the internet directly.\n\n## What is Rustok?\n\nRustok is a **self-custody AI-native crypto wallet**. The MCP Server is a thin\nbridge between LLM agents and the Rustok Gateway — private keys never leave the\nCore service (they stay in the local keystore volume).\n\n- **Self-custody**: keys are encrypted at rest (Argon2id + AES-256-GCM) and only\n  decrypted inside Core on your machine.\n- **Capability-gated tools** (`read_wallet` / `preview_tx` / `execute_tx`): the\n  stdio transport is process-trusted (all by default; restrict with\n  `RUSTOK_MCP_CAPABILITIES`); the network-facing SSE transport is bearer-gated.\n- **No spending policy by design**: no hard-coded limits, budgets, or blocklists —\n  you consciously accept the risk of funds on the agent wallet. `txguard` surfaces\n  a risk level on preview but does not block. Opt-in limits may come later.\n- **Chains**: `RUSTOK_ALLOWED_CHAINS` decides which ones are shown (default\n  `1,8453,42161` — Ethereum, Base, Arbitrum). Those read out of the box: the build\n  carries two public nodes for each. Naming your own (`RUSTOK_RPC_URLS_<id>`, or an\n  Alchemy key) replaces the carried list rather than joining it. **Any node that\n  reads a balance learns the address and the IP that asked** — that is true of ours,\n  yours, and your provider's alike.\n- **Informed preview**: `preview_transaction` returns the decoded call (who/what is\n  authorized), a pre-sign simulation (revert check), gas, and a txguard risk level.\n  Execution is not exposed as an MCP tool.\n- **Audit logging**: every action is append-only logged to SQLite in Core.\n\n## Documentation\n\n- [Installation Guide](docs/INSTALL.md)\n- [Configuration](docs/CONFIGURATION.md)\n- [Troubleshooting](docs/TROUBLESHOOTING.md)\n- [Changelog](CHANGELOG.md)\n- [Security Policy](SECURITY.md)\n\n## License\n\nThis repository is licensed under **MIT-0**.\n\nThe warranty and liability terms it carries, and the limit of every safeguard\nthis wallet advertises, are stated in full here:\n<https://github.com/rustok-org/mcp/blob/main/DISCLAIMER.md>\n\nThe Rustok Core wallet engine is a proprietary artifact built from the private `rustok-org/core` repository.\n",
  "bytes": 7261,
  "sha": "ebe48a38620b346faa85572ef3ab65618ab31fc67a4104d298e7f25b78e6080b",
  "repo_slug": "rustok-org/mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rustok_org_rustok_wallet_5b339250/readme"
}