Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Available MCP Tools

MUTX exposes 27 MCP tools.

Most tools follow one of these patterns:

  • approval in the terminal
  • autonomous execution with a valid SLK
  • direct execution for low-risk, read-only, or session-lifecycle operations

Conventions

  • Wallets are referenced by short ID (4-char prefix) or wallet name
  • slk is optional on tools that support autonomous execution
  • wallet_connect creates a pairing attempt, but the user still approves the WalletConnect proposal inside the terminal

Wallet Tools

wallet_list

List available wallets. Requires terminal approval — when the request appears, the operator picks which wallets to expose for this request. Every wallet is preselected by default; the operator deselects any wallet they want to keep hidden. With an SLK, the call returns only the SLK-permitted wallets immediately, with no prompt.

ParameterTypeRequiredDescription
slkstringnoSLK token for autonomous access

wallet_details

Get a wallet’s name, address, and network.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
slkstringnoSLK token (requires can_balance)

wallet_balance

Refresh and return the native asset balance (SOL, ETH, MATIC, BNB depending on chain) plus token balances. Triggers an RPC refresh.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
slkstringnoSLK token (requires can_balance)

wallet_receive

Get a wallet’s receive address.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
slkstringnoSLK token

wallet_send

Send the chain’s native asset to an address (SOL on Solana, ETH on Ethereum and Arbitrum, MATIC on Polygon, BNB on BNB Smart Chain, etc.).

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
recipientstringyesDestination address
amountstringyesAmount in the native asset (e.g. "1.5"), or "max" to drain the full balance (fee reserved automatically)
slkstringnoSLK token (requires can_send)

wallet_token_list

List tokens held by a wallet (SPL on Solana, ERC-20 on EVM chains).

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
slkstringnoSLK token

wallet_token_send

Send tokens (SPL on Solana, ERC-20 on EVM chains).

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
tokenstringyesToken identifier — mint address on Solana, ERC-20 contract address on EVM (legacy alias: mint)
recipientstringyesDestination address
amountstringyesToken amount, or "max" for the full token balance
slkstringnoSLK token (requires can_send_tokens)

wallet_swap

Swap tokens via a DEX (Jupiter or Raydium). Solana-only — the daemon rejects this call on EVM wallets.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
input_mintstringyesInput token (mint address or symbol like SOL, USDC)
output_mintstringyesOutput token (mint address or symbol)
amountstringyesInput amount, or "max" for full balance
slippage_bpsnumbernoSlippage tolerance in basis points (default: 50)
platformstringno"jupiter" or "raydium" (default: auto)
slkstringnoSLK token (requires can_swap)

swap_quote

Preview a swap without executing it: returns expected output, minimum after slippage, price impact, route, platform, and fee. Read-only — no funds move, no signing, no SLK budget consumed, and no approval required. Solana-only.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
inputstringyesInput token (mint address or symbol)
outputstringyesOutput token (mint address or symbol)
amountstringyesInput amount to quote
slippage_bpsnumbernoSlippage tolerance in basis points (default: 50)
slkstringnoSLK token (any active in-scope SLK is accepted; no budget consumed)

wallet_close_token

Close an empty SPL token account (associated token account) and reclaim its SOL rent to the wallet owner. The account must hold a zero balance. Solana-only. This is an on-chain signing transaction.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
token_accountstringyesThe (empty) token account address to close
slkstringnoSLK token (requires can_sign_message / can_sign_typed_data / can_sign_hash as appropriate)

wallet_transactions

Transaction history with optional filters.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
filterobjectnoSee filter fields below
slkstringnoSLK token (requires can_balance)

Filter fields:

FieldTypeDescription
directionstring"sent" or "received"
min_amountstringMinimum native-asset amount
max_amountstringMaximum native-asset amount
counterpartystringFilter by address
token_mintstringFilter by token (mint on Solana, contract address on EVM)
afternumberUnix timestamp lower bound (seconds)
beforenumberUnix timestamp upper bound (seconds)
limitnumberResults per page (default: 20, max: 100)
offsetnumberPagination offset

Signing Tools

These tools let an agent produce a signature for an external dApp (for example a Polymarket login challenge or order) without ever touching the wallet’s private key. Every signing tool is gated the same way: an SLK with the matching capability for autonomous execution (can_sign_message / can_sign_typed_data / can_sign_hash), or the Requests-tab fallback for SLK-less calls.

wallet_sign_message

Sign an arbitrary message. EVM wallets sign via EIP-191 personal_sign; Solana wallets sign via ed25519. The message may be plain UTF-8, or a 0x-prefixed hex string (matching the WalletConnect personal_sign convention). Returns a 0x-prefixed hex signature. Use this for dApp auth challenges.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name
messagestringyesUTF-8 text, or a 0x-prefixed hex string
slkstringnoSLK token (requires can_sign_message / can_sign_typed_data / can_sign_hash as appropriate)

wallet_sign_typed_data

Sign an EIP-712 typed-data document with an EVM wallet. Pass the full {domain, types, primaryType, message} object — the same shape Polymarket, viem, and ethers produce. Solana wallets are rejected. The terminal approval preview shows domain.name, verifyingContract, chainId, and primaryType so the operator can audit what they are signing. Returns a 0x-prefixed hex signature.

ParameterTypeRequiredDescription
walletstringyesEVM wallet short ID or name
typed_dataobjectyesFull EIP-712 document {domain, types, primaryType, message}
slkstringnoSLK token (requires can_sign_message / can_sign_typed_data / can_sign_hash as appropriate)

wallet_sign_hash

Sign a raw, pre-computed 32-byte digest directly with an EVM wallet’s key — no EIP-191 prefix, no extra hashing (the input is the message hash). Returns a 0x-prefixed 65-byte r||s||v signature. Use this only for ERC-1271 / ERC-7739 smart-contract-wallet flows where the caller has already computed the final hash. Solana wallets are rejected.

This is blind signing — the operator approves an opaque hash — so always pass a clear context describing what the hash represents. For human-readable messages use wallet_sign_message; for EIP-712 use wallet_sign_typed_data.

ParameterTypeRequiredDescription
walletstringyesEVM wallet short ID or name
hashstringyes0x-prefixed 32-byte hex digest (66 chars)
contextstringnoHuman-readable description, shown verbatim in the approval preview
slkstringnoSLK token (requires can_sign_message / can_sign_typed_data / can_sign_hash as appropriate)

Wallet Lifecycle

These tools create or destroy wallets. Each one requires terminal approval (no SLK path). Wallets created through MCP are Cleartext-protected — for a password-protected wallet, use the TUI or Web UI wizard instead.

wallet_create

Create a new Cleartext-protected wallet. Returns the generated seed phrase once — store it offline immediately, it is never shown again.

ParameterTypeRequiredDescription
namestringyesWallet display name (must be unique)
networkstringyes"solana", "ethereum", or "bitcoin"

wallet_import_seed

Import a wallet from an existing BIP-39 seed phrase, as Cleartext-protected.

ParameterTypeRequiredDescription
namestringyesWallet display name (must be unique)
networkstringyes"solana", "ethereum", or "bitcoin"
seed_phrasestringyes12- or 24-word BIP-39 seed phrase

wallet_import_private_key

Import a wallet from a raw private key, as Cleartext-protected. Solana: base58-encoded 64-byte keypair. Ethereum: hex (with or without 0x).

ParameterTypeRequiredDescription
namestringyesWallet display name (must be unique)
networkstringyes"solana", "ethereum", or "bitcoin"
private_keystringyesRaw private key

wallet_delete

Delete a wallet permanently. Destructive and irreversible — back up the seed phrase before approving.

ParameterTypeRequiredDescription
walletstringyesWallet short ID or name

Wallet Access

wallet_access

Read-only view of per-wallet access state: protection mode (password/keyfile/cleartext), lock state (locked, or unlocked with the remaining seconds), whether auto-approve-while-unlocked is enabled, and the active SLKs bound to each wallet. Visibility and audit only — there is no unlock/lock action here. Unlocking a wallet is a human-only operation done in the TUI or Web UI; an agent’s authorization grant is its SLK. No approval needed.

No parameters.

Address Book

address_book_list

List saved contacts.

ParameterTypeRequiredDescription
slkstringnoSLK token (requires can_balance; returns only contacts in the SLK’s address scope)

address_book_add

Add a contact. The contact is added globally.

ParameterTypeRequiredDescription
namestringyesContact name
addressstringyesWallet address
networkstringnoNetwork (default: "solana")
memostringnoOptional note
slkstringnoSLK token (requires can_send)

WalletConnect

wallet_connect

Submit a WalletConnect pairing URI. The session proposal is approved in the terminal.

ParameterTypeRequiredDescription
uristringyesWalletConnect wc: URI

wallet_sessions

List active WalletConnect sessions. No approval needed. No parameters.

wallet_disconnect

Disconnect a WalletConnect session. No approval needed.

ParameterTypeRequiredDescription
sessionstringyesSession topic prefix or DApp name

SLK Management

request_slk

Submit a full SlkDraft for operator review. The daemon queues it as a Proposal and returns immediately with proposal_id and expires_at. Poll slk_status with target=<proposal_id> to see the operator decision. On approval the response carries the SLK raw token; pass it on every subsequent agent call. See the SLK guide for the draft shape and per-capability scope structs.

ParameterTypeRequiredDescription
draftobjectyesFull SLK draft: identity_partial, wallet_scope, capabilities, scopes, limits (optional), lifetime, proposal_ttl_seconds (optional)

slk_status

Query the typed status of either a proposal (by id) or a minted SLK (by raw token). The daemon resolves both lookup paths. Returns a snapshot with lifecycle status, cumulative usage, expiry, capabilities, and scopes. No approval needed.

ParameterTypeRequiredDescription
targetstringyesProposal UUID or SLK raw token

slk_revoke

Revoke the agent’s own SLK by raw token. Proof of possession; no human approval needed (permission-reducing). The SLK transitions to Revoked and any subsequent dispatch with this token fails closed.

ParameterTypeRequiredDescription
tokenstringyesSLK raw token

Common Workflows

Check a wallet balance

  1. wallet_list — get available wallets
  2. Pick a wallet ID or name from the response
  3. wallet_balance — returns the native asset and token balances

Send the native asset with an SLK

  1. request_slk with can_send_native and a send_native scope carrying per_tx_cap, total_budget, and recipient_whitelist
  2. Operator approves (or narrows) in the Proposals tab
  3. slk_status returns the SLK raw token
  4. wallet_send with the SLK — executes without further approval

Execute a swap autonomously

  1. swap_quote to preview output, price impact, and route (no approval, no budget)
  2. request_slk with can_swap and a swap scope (allowed_pairs, max_slippage_bps, total_budget_usdc)
  3. Operator approves
  4. wallet_swap with the SLK — quote is fetched and swap executes within slippage bounds

Sign for a dApp without exposing keys

  1. request_slk with can_sign_typed_data (or can_sign_message / can_sign_hash) scoped to the wallet and dApp domain
  2. Operator approves
  3. Use wallet_sign_message (auth challenges), wallet_sign_typed_data (EIP-712 orders), or wallet_sign_hash (ERC-1271 / ERC-7739) with the SLK
  4. The agent gets a signature; the private key never leaves MUTX

Autonomous WalletConnect session

  1. request_slk with can_wc_connect + a wc scope listing allowed dApp origins
  2. Operator approves
  3. The dApp pairs (operator or agent supplies the wc: URI). When the proposed session matches the SLK’s WC scope, the daemon approves it autonomously — no prompt in DApps. The session settles and the agent proceeds.