> For the complete documentation index, see [llms.txt](https://hinkal-team.gitbook.io/hinkal/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hinkal-team.gitbook.io/hinkal/hinkal-mcp/tool-reference.md).

# Tool Reference

Every tool below is live in `@hinkal/mcp`. Transaction tools take a token as either a symbol (`"USDC"`) or an on-chain address, alongside a numeric `chainId` the assistant picks the right tool from plain language, so these signatures are mainly for integrators.

### Account

| Tool                     | Description                                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `get_wallet_status()`    | Whether the wallet is set up, and its addresses if known.                                                           |
| `get_wallet_addresses()` | Your public EVM / Solana / Tron addresses, fund these before depositing.                                            |
| `export_wallet_key()`    | Reveal the wallet's access key for backup. Sensitive: full wallet control, and the key appears in the conversation. |

### Balances

| Tool                                           | Description                                                                                                                             |
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `get_all_balances()`                           | Public and private balances on every supported chain, in one call.                                                                      |
| `get_balances(chainId, refresh?)`              | Private (shielded) balances per token on one chain.                                                                                     |
| `get_public_balances(chainId, walletAddress?)` | Regular on-chain token balances of a wallet, yours by default, or any address you pass.                                                 |
| `get_stuck_balances()`                         | Funds that were shielded but never paid out — left blocked when a private send failed partway. Recover them with `recover_stuck_funds`. |

### Transactions

| Tool                                                          | Description                                                                                                                                |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `deposit(chainId, tokenAddress, amount)`                      | public → private. Gas only, no Hinkal fee.                                                                                                 |
| `deposit_for_other(chainId, tokenAddress, amount, recipient)` | deposit into another user's shielded balance.                                                                                              |
| `withdraw(chainId, tokenAddress, amount, toAddress)`          | private → public via relayer. Returns the transaction hash.                                                                                |
| `private_transfer(chainId, tokenAddress, amount, recipient)`  | private → private via relayer.                                                                                                             |
| `private_send(chainId, tokenAddress, recipients)`             | public → public to one or more addresses, no on-chain link. `recipients` is an array of `{ address, amount }`. payouts run asynchronously. |
| `check_private_send_status(scheduleId)`                       | Poll a `private_send` payout by the `scheduleId` it returned.                                                                              |
| `recover_stuck_funds(chainId, tokenAddress, toAddress)`       | recover UTXOs left stuck by an interrupted deposit-and-withdraw.                                                                           |

### Public wallet actions (visible on-chain, no privacy)

| Tool                                                                         | Description                                                |
| ---------------------------------------------------------------------------- | ---------------------------------------------------------- |
| `wallet_send(chainId, tokenAddress, amount, toAddress)`                      | Normal token transfer from your wallet.                    |
| `wallet_approve(chainId, tokenAddress, spender, amount)`                     | Set an ERC-20 / TRC-20 allowance.                          |
| `wallet_execute(chainId, to, data?, value?, functionSelector?, parameters?)` | Arbitrary contract call (EVM calldata or Tron selector).   |
| `wallet_sign_message(chainId, message)`                                      | Sign a UTF-8 message; nothing is broadcast.                |
| `wallet_sign_typed_data(chainId, domain, types, value)`                      | Sign EIP-712 typed data; nothing is broadcast.             |
| `wallet_solana_execute(chainId, transaction)`                                | Sign and broadcast a base64 Solana `VersionedTransaction`. |
| `tron_freeze(chainId, amount, resource)`                                     | Stake TRX for `ENERGY` or `BANDWIDTH`.                     |
| `tron_unfreeze(chainId, amount, resource)`                                   | Unstake TRX                                                |
| `tron_delegate_resource(chainId, toAddress, amount, resource)`               | Lend staked energy/bandwidth to another Tron address.      |

### Status & Info

| Tool                             | Description                                                      |
| -------------------------------- | ---------------------------------------------------------------- |
| `list_chains()`                  | every supported chain with `chainId`, `name`, and `type`.        |
| `ping()`                         | check the Hinkal API is reachable.                               |
| `list_tokens(chainId, search?)`  | common supported tokens for a chain.                             |
| `get_enclave_public_key()`       | enclave public key used to encrypt payloads.                     |
| `get_enclave_attestation(nonce)` | attestation document proving the enclave runs the expected code. |
| `get_contract_addresses()`       | deployed Hinkal contract addresses per chain.                    |

Parameters follow the same conventions across tools:

* `chainId` - numeric chain id (`1` Ethereum, `137` Polygon, etc.); see `list_chains`.
* `tokenAddress` - a token symbol (`"USDC"`) or on-chain address.
* `amount` - human decimal units (`"1.5"`), never wei.
* `recipient` / `toAddress` - a Hinkal private address or a public wallet address, per tool.
