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

Trezor MCP Tools Reference

Detailed parameter reference, example payloads, supported coins, and error codes for the Trezor Suite MCP server.

Server endpoint: POST http://127.0.0.1:21340/mcp Authentication: Authorization: Bearer <token> header required on every request Protocol: JSON-RPC 2.0 (Streamable HTTP transport) MCP version: 2025-03-26


Tool Parameters

trezor_get_address

Get a receive address from the Trezor device.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol (e.g., "btc", "eth", "ltc")
pathstringYesBIP44 derivation path (e.g., "m/84'/0'/0'/0/0")
showOnTrezorbooleanNofalseDisplay the address on device screen for verification

Automatically selects the correct method (getAddress for UTXO coins, ethereumGetAddress for EVM chains) based on coin type.

trezor_get_public_key

Get the extended public key (xpub) for a derivation path.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol (e.g., "btc", "ltc")
pathstringYesBIP44 derivation path (e.g., "m/84'/0'/0'")

trezor_get_account_info

Get account information including balance, transaction history, and UTXOs.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol
pathstringNoBIP44 account-level derivation path
descriptorstringNoAccount descriptor (xpub for BTC, address for ETH). Alternative to path
detailsstringNo"basic"Detail level: "basic", "tokens", "tokenBalances", "txids", "txs"

Provide either path or descriptor (at least one recommended).

trezor_send_transaction

Compose, sign, and broadcast a cryptocurrency transaction.

Common parameters:

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol
tostringYes*Destination address (*required for EVM and XRP)
valuestringYes*Amount in native unit, e.g., "0.1" for 0.1 ETH (*required for EVM and XRP)
accountIndexnumberNo0Account index (0-based). Ignored if path is provided
pathstringNoBIP44 path override. Auto-derived from coin + accountIndex if omitted
broadcastbooleanNotrueWhether to broadcast after signing
transactionobjectNoFull transaction object for manual composition

EVM-specific parameters (eth, pol, bsc, arb, base, op, avax, etc, tsep, thod):

ParameterTypeRequiredDefaultDescription
noncestringNoauto-filledTransaction nonce
gasLimitstringNo"21000" / "100000"Gas limit (21000 for transfers, 100000 if data present)
gasPricestringNoLegacy gas price in wei. If set, uses legacy mode instead of EIP-1559
maxFeePerGasstringNoauto-estimatedEIP-1559 max fee per gas in wei
maxPriorityFeePerGasstringNoauto-estimatedEIP-1559 priority fee in wei
datastringNoContract call data (hex string)
chainIdnumberNoauto-derivedEVM chain ID

XRP-specific parameters (xrp, txrp):

ParameterTypeRequiredDefaultDescription
destinationTagnumberNoDestination tag for XRP transactions

UTXO coins (btc, ltc, bch, doge, zec): Only coin, to, and value are needed. The tool internally calls composeTransaction which handles UTXO selection, fee estimation, signing, and broadcasting.

Other chains (sol, ada, xlm, trx): Require a full transaction object with chain-specific parameters per TrezorConnect docs.

trezor_push_transaction

Broadcast a signed transaction to the network.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol
txstringYesSigned transaction hex string

trezor_sign_message

Sign a message with a private key on the Trezor device.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol
pathstringYesBIP44 derivation path for the signing key
messagestringYesThe message to sign

Automatically selects signMessage (Bitcoin) or ethereumSignMessage (EVM) based on coin type.

trezor_verify_message

Verify a signed message.

ParameterTypeRequiredDefaultDescription
coinstringYesCoin symbol
addressstringYesAddress that allegedly signed the message
messagestringYesOriginal message
signaturestringYesSignature to verify

Automatically selects verifyMessage (Bitcoin) or ethereumVerifyMessage (EVM) based on coin type.

trezor_sign_typed_data

Sign EIP-712 typed structured data using the Trezor device (EVM chains only).

ParameterTypeRequiredDefaultDescription
pathstringNoauto-derivedBIP44 derivation path (e.g., "m/44'/60'/0'/0/0")
accountIndexnumberNo0Account index (0-based). Ignored if path is provided
dataobjectYesEIP-712 typed data object (see structure below)
metamask_v4_compatbooleanNotrueUse MetaMask V4 compatibility mode for hashing

data object structure:

FieldTypeRequiredDescription
typesobjectYesType definitions including EIP712Domain and custom types
primaryTypestringYesThe primary type being signed (e.g., "Permit", "Order")
domainobjectYesDomain separator fields (name, version, chainId, verifyingContract)
messageobjectYesThe message data matching the primaryType schema

If path is omitted, it is auto-derived for Ethereum (SLIP-44 coin type 60) from the given accountIndex. For EVM-compatible chains that use a different coin type (for example, Ethereum Classic with coin type 61), you must provide an explicit path matching that chain's derivation scheme.


Example JSON-RPC Payloads

Initialize Session

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "initialize",
    "params": {
        "protocolVersion": "2025-03-26",
        "capabilities": {},
        "clientInfo": { "name": "my-agent", "version": "1.0.0" }
    }
}

Response (note the Mcp-Session-Id header — include it in subsequent requests):

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "protocolVersion": "2025-03-26",
        "serverInfo": { "name": "trezor-suite-mcp-server", "version": "1.0.0" },
        "capabilities": { "tools": {} }
    }
}

List Tools

{
    "jsonrpc": "2.0",
    "id": "2",
    "method": "tools/list",
    "params": {}
}

Call a Tool

{
    "jsonrpc": "2.0",
    "id": "3",
    "method": "tools/call",
    "params": {
        "name": "trezor_get_account_info",
        "arguments": {
            "coin": "btc",
            "path": "m/84'/0'/0'",
            "details": "basic"
        }
    }
}

Success response:

{
    "jsonrpc": "2.0",
    "id": "3",
    "result": {
        "content": [
            {
                "type": "text",
                "text": "{\"balance\":\"123456\",\"availableBalance\":\"123456\", ...}"
            }
        ]
    }
}

Error response:

{
    "jsonrpc": "2.0",
    "id": "3",
    "result": {
        "content": [
            {
                "type": "text",
                "text": "Error: Unknown coin 'xyz' and no explicit 'path' provided."
            }
        ],
        "isError": true
    }
}

Send Transaction (EVM)

{
    "jsonrpc": "2.0",
    "id": "4",
    "method": "tools/call",
    "params": {
        "name": "trezor_send_transaction",
        "arguments": {
            "coin": "eth",
            "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18",
            "value": "0.05"
        }
    }
}

Send Transaction (BTC)

{
    "jsonrpc": "2.0",
    "id": "5",
    "method": "tools/call",
    "params": {
        "name": "trezor_send_transaction",
        "arguments": {
            "coin": "btc",
            "to": "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
            "value": "0.001"
        }
    }
}

Sign EIP-712 Typed Data

{
    "jsonrpc": "2.0",
    "id": "6",
    "method": "tools/call",
    "params": {
        "name": "trezor_sign_typed_data",
        "arguments": {
            "data": {
                "types": {
                    "EIP712Domain": [
                        { "name": "name", "type": "string" },
                        { "name": "version", "type": "string" },
                        { "name": "chainId", "type": "uint256" },
                        { "name": "verifyingContract", "type": "address" }
                    ],
                    "Mail": [
                        { "name": "from", "type": "string" },
                        { "name": "to", "type": "string" },
                        { "name": "contents", "type": "string" }
                    ]
                },
                "primaryType": "Mail",
                "domain": {
                    "name": "Example DApp",
                    "version": "1",
                    "chainId": 1,
                    "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
                },
                "message": {
                    "from": "Alice",
                    "to": "Bob",
                    "contents": "Hello, Bob!"
                }
            }
        }
    }
}

Supported Coins

Mainnet

CoinSymbolDefault PathDecimalsChain IDNotes
Bitcoinbtcm/84'/0'/i'8Also: m/49' (segwit), m/44' (legacy), m/86' (taproot)
Ethereumethm/44'/60'/0'/0/i181
Polygonpolm/44'/60'/0'/0/i18137
BNB Smart Chainbscm/44'/60'/0'/0/i1856
Arbitrum Onearbm/44'/60'/0'/0/i1842161
Basebasem/44'/60'/0'/0/i188453
Optimismopm/44'/60'/0'/0/i1810
Avalancheavaxm/44'/60'/0'/0/i1843114
Ethereum Classicetcm/44'/61'/0'/0/i1861Note: coin type 61, not 60
Litecoinltcm/84'/2'/i'8Also: m/49' (segwit), m/44' (legacy)
Bitcoin Cashbchm/44'/145'/i'8
Dogecoindogem/44'/3'/i'8
Zcashzecm/44'/133'/i'8
XRP Ledgerxrpm/44'/144'/i'/0/06
Solanasolm/44'/501'/i'/0'9Requires full transaction object
Trontrxm/44'/195'/0'/0/i6Requires full transaction object
Cardanoadam/1852'/1815'/i'6Requires full transaction object
Stellarxlmm/44'/148'/i'7Requires full transaction object

Testnet

CoinSymbolDefault PathDecimalsChain ID
Bitcoin Testnettestm/84'/1'/i'8
Bitcoin Regtestregtestm/84'/1'/i'8
Ethereum Sepoliatsepm/44'/1'/0'/0/i1811155111
Ethereum Hoodithodm/44'/1'/0'/0/i18560048
Solana Devnetdsolm/44'/501'/i'/0'9
XRP Testnettxrpm/44'/144'/i'/0/06
Stellar Testnettxlmm/44'/148'/i'7

In paths above, i is the account index (default 0).


Transaction Auto-Fill Details

EVM Chains (eth, pol, bsc, arb, base, op, avax, etc)

FieldAuto-fill method
NonceSilent getAccountInfo call → misc.nonce
Gas limit21000 for simple transfers, 100000 if data is present
FeesblockchainEstimateFee with { blocks: [2], feeLevels: 'smart' } → picks "normal" tier. Falls back to 0x0 if estimation fails (UI allows adjustment before signing)
Chain IDDerived from coin config
ValueConverted from native unit (e.g., "0.1" ETH) to wei using 18 decimals

Default mode is EIP-1559 (maxFeePerGas + maxPriorityFeePerGas). Switches to legacy mode only if gasPrice is explicitly provided.

XRP

FieldAuto-fill method
SequenceSilent getAccountInfo call → misc.sequence
FeeblockchainEstimateFee (no params) → defaults to 12 drops if fails
AmountConverted from native unit (e.g., "10" XRP) to drops using 6 decimals

UTXO Coins (btc, ltc, bch, doge, zec)

A single composeTransaction call with push: true handles everything:

  • Account discovery and UTXO selection
  • Fee estimation
  • Transaction signing
  • Broadcasting

No individual fields need to be auto-filled — the entire flow is managed internally.

Other Chains (sol, ada, xlm, trx)

No auto-fill is available. You must provide a complete transaction object with all chain-specific parameters as defined in the TrezorConnect documentation for the corresponding sign method (solanaSignTransaction, cardanoSignTransaction, stellarSignTransaction, tronSignTransaction).


Error Codes

JSON-RPC Errors (HTTP-level)

CodeNameMeaning
-32700Parse errorMalformed JSON in request body
-32601Method not foundUnknown JSON-RPC method (typo in "method" field)
-32602Invalid paramsUnknown tool name in tools/call

HTTP Status Codes

StatusMeaning
200Success
202Notification accepted (request without id)
401Unauthorized — include Authorization: Bearer <token> header (token from Trezor Suite Settings → Debug → MCP Server)
403Forbidden — request not from localhost
404Session not found — Mcp-Session-Id header doesn't match server session
405Method not allowed — GET is not supported

Tool-Level Errors

Returned as successful JSON-RPC responses with isError: true:

Error messageCause
"EVM transactions require 'to' and 'value' fields."Missing required fields for EVM send
"Failed to get account info for nonce: ..."Could not auto-fill nonce
"Unknown coin 'xyz' and no explicit 'path' provided."Unrecognized coin symbol and no fallback path
"{COIN} transactions require a 'transaction' object."Missing transaction object for sol/ada/xlm/trx

Auto-Broadcast Failure

When signing succeeds but broadcast fails, the response has success: true with both results:

{
    "success": true,
    "payload": {
        "signed": { "...sign result..." },
        "broadcastError": { "...error details..." }
    }
}

Use trezor_push_transaction to retry the broadcast manually with the signed transaction hex.


Session Management

  • Session ID is generated on the first initialize call and returned in the Mcp-Session-Id response header
  • All subsequent requests must include the Mcp-Session-Id header — requests that omit it or send a mismatched value are rejected with HTTP 404
  • If the server returns HTTP 404 "Session not found", send a new initialize request
  • Send DELETE /mcp with the session header to terminate a session
  • Sessions are in-memory only — they do not survive app restarts