Skip to main content

Core MCP: Available Tools

The tools exposed by the Core Wallet MCP Server, with parameters, returns, and examples.

C
Written by Chris

The Core Wallet MCP Server exposes a set of Model Context Protocol tools that let an AI agent read a user's multi-chain wallet and sign & broadcast transactions on their behalf, subject to a configurable on-chain spend policy. To configure your policies in Core web, see this article.

NOTE: You MUST enable AI interaction through the MCP Configuration tool in Core web as outlined in this article. If you do not, all attempts from your agent to interact with the MCP server will be rejected.

It is a seedless wallet server: private keys are never exposed to the agent. The agent calls high-level tools; the server resolves the account, enforces policy, signs with the seedless key, and broadcasts.

Connection

Transport

Streamable HTTP

Endpoint

Authentication

OAuth 2.0 — the agent authenticates on behalf of a wallet user; requests act on that user's accounts

All tools operate on the authenticated user's accounts. Accounts are identified by a numeric account index (0, 1, …) that is stable across chains.

Supported networks

Family

Networks

Identifier

EVM

Avalanche C-Chain, Ethereum, Base, Arbitrum, Polygon

CAIP-2 eip155:<chainId> (e.g. eip155:43114)

Avalanche

X-Chain (AVM), P-Chain (PVM) — mainnet & Fuji testnet

chainAlias "X" / "P"

Bitcoin

Mainnet & testnet

isTestnet flag

Solana

Mainnet & testnet

isTestnet flag

Policy & safety

Every signing request passes through a policy engine before the key is used. A transaction may be rejected (before signing, so no funds move) when it violates any configured rule. The Configuration tool can be found in Core.app. See this article for more info.

  • Account allowlist — only policy-enabled accounts can sign.

  • Recipient allowlist — the destination must be permitted (unless recipients mode is everyone).

NOTE: The recipient allow list is only enforced for

  • Native network tokens

  • ERC20 (EVM networks)

  • Send txns for SPL tokens (Solana).

In ERC20 and SPL token transfers, the contract call data will be parsed to the determine recipient address and check it against the allowlist. If the transaction is not one of the above token types, the destination allowlist policy is not enforced.

  • Spend limit — a rolling 24-hour USD limit. Valuation relies on transaction simulation; Transactions whose simulation is unsuccessful are rejected.

  • Network access — the target network must be enabled.

Rejections are returned as tool errors (see Errors below).

Tools

list_accounts

List all wallet accounts for the authenticated user, with their addresses grouped by chain type.

Parameters

None.

Returns

An object keyed by account index. Each account contains its per-chain addresses:

Field

Description

EVM

EVM address (0x…), shared across all EVM chains

AVM

Avalanche X-Chain address (X-…)

PVM

Avalanche P-Chain address (P-…)

CoreEth

Avalanche C-Chain (Core) address (C-…)

BITCOIN

Bitcoin address

SVM

Solana address

Example

{
  "0": {
    "EVM": "0x15268AC7514328baA9af7b50F01661b39F8834Bc",
    "SVM": "3ieUZEVKfcDEHr4gYA8qNvqAbsfjKEs5ABu69BYpnm2y",
    "CoreEth": "C-avax1g6xesvqwttn76fq9az6w8qzfd9wmg37mgh7ycv",
    "AVM": "X-avax1g6xesvqwttn76fq9az6w8qzfd9wmg37mgh7ycv",
    "PVM": "P-avax1g6xesvqwttn76fq9az6w8qzfd9wmg37mgh7ycv",
    "BITCOIN": "bc1qhazfhkr46y2y9ls3pz2zw42qvqasflrecejury"
  },
  "1": {
    "EVM": "0x1392a1503D28d3e23c2d14a7fC22540F06626056",
    "AVM": "X-avax1ppdxcjk6p8fhh3f077qhnw84sv3qq77zz0l3ps",
    "PVM": "P-avax1ppdxcjk6p8fhh3f077qhnw84sv3qq77zz0l3ps",
    "CoreEth": "C-avax1ppdxcjk6p8fhh3f077qhnw84sv3qq77zz0l3ps",
    "BITCOIN": "bc1q29z6rvyteugllexep3aqwlfyjty7ey6834au7v",
    "SVM": "7GDZmnAntrNDnbo3kBQU1TRyVXnkuWoC9J4RFdjhdGnL"
  }
}

Call this first when you need an address to use as a fromAddress or to for the signing tools.

get_balances

Get token balances for the authenticated user, grouped by account. Returns every token held on every supported network for each enabled account, including Avalanche X-Chain and P-Chain AVAX balances.

Parameters

None.

Returns

{ "accounts": { "<index>": [ <networkBalance>, … ] } }. Each network balance entry includes:

Field

Description

caip2Id

Network identifier

networkType

evm / avm / pvm / btc / svm

id

Address or account id the balances belong to

balances.nativeTokenBalance

Native asset (symbol, decimals, raw balance, USD price & value)

balances.erc20TokenBalances / splTokenBalances

Token holdings, where applicable

error

Per-network error, or null

Example (single network entry)

{
  "caip2Id": "avax:imji8papUf2EhV3le337w1vgFauqkJg-",
  "networkType": "avm",
  "id": "0",
  "balances": {
    "nativeTokenBalance": {
      "symbol": "AVAX",
      "decimals": 9,
      "balance": "10000000",
      "price": 6.68,
      "balanceInCurrency": 0.0668
    }
  },
  "error": null,
  "currency": "usd"
}

sign_and_send_evm_tx

Sign and broadcast an EVM transaction. Use this for Ethereum and EVM-compatible chains, including Avalanche C-Chain. Supports native transfers, ERC-20 transfers, and arbitrary contract calls (via data).

Parameters

Name

Type

Required

Description

fromAddress

string (0x + 40 hex)

Yes

Sender EVM address (from list_accounts)

caip2Id

string (eip155:<chainId>)

Yes

Target EVM network, e.g. eip155:43114 (Avalanche C-Chain)

to

string (0x + 40 hex)

Yes

Recipient — an account for native transfers, or the contract for token/contract calls

value

string (hex wei)

Amount of native token, e.g. 0x38d7ea4c68000 (0.001). Omit for pure contract calls

data

string (hex)

Calldata, e.g. an ERC-20 transfer(address,uint256)

gasLimit

string (hex)

Gas limit, e.g. 0x5208 (21000)

maxFeePerGas

string (hex wei)

EIP-1559 max fee per gas

maxPriorityFeePerGas

string (hex wei)

EIP-1559 priority fee per gas

nonce

integer

Transaction nonce. Auto-fetched from the network when omitted

Returns

{ "response": { "result": "<transactionHash>" } }

Example — native transfer (0.001 AVAX on C-Chain)

{
  "caip2Id": "eip155:43114",
  "fromAddress": "0x1392a1503D28d3e23c2d14a7fC22540F06626056",
  "to": "0x15268AC7514328baA9af7b50F01661b39F8834Bc",
  "value": "0x38d7ea4c68000"
}

Example — ERC-20 transfer (0.1 USDC)

to is the token contract; data encodes transfer(recipient, amount):

{
  "caip2Id": "eip155:43114",
  "fromAddress": "0x1392a1503D28d3e23c2d14a7fC22540F06626056",
  "to": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
  "data": "0xa9059cbb0000000000000000000000001a32bf51566f7fbe8bed1e616bbe42e40223070a00000000000000000000000000000000000000000000000000000000000186a0"
}

Note: EVM transactions are simulated for security and spend-limit valuation before signing. If simulation cannot complete, the request is rejected with Blockaid simulation was unsuccessful.

sign_and_send_avalanche_tx

Sign and broadcast an Avalanche X-Chain or P-Chain transaction. Accepts a hex-encoded unsigned transaction and its input UTXOs — matching avalanche_sendTransaction in Core. The caller is responsible for building the unsigned transaction (e.g. with @avalabs/avalanchejs); this tool signs the required inputs and broadcasts.

Parameters

Name

Type

Required

Description

fromAddress

string (X-… / P-…)

Yes

Sender X/P-Chain address (from list_accounts)

chainAlias

"X" | "P"

Yes

Target chain: X-Chain or P-Chain

transactionHex

string (hex)

Yes

Hex-encoded unsigned transaction bytes

isTestnet

boolean

Yes

true for Fuji testnet, false for mainnet

utxos

string[] (hex)

Yes

Hex-encoded input UTXOs referenced by the transaction (≥ 1)

externalIndices

integer[]

External address indices needed to sign

internalIndices

integer[]

Internal (change) address indices needed to sign

Returns

{ "response": { "result": "<transactionId>" } }

Example

{
  "fromAddress": "X-avax1ppdxcjk6p8fhh3f077qhnw84sv3qq77zz0l3ps",
  "chainAlias": "X",
  "transactionHex": "0x00000000000000000001ed5f…",
  "isTestnet": false,
  "utxos": ["0x9edd03c5fe95f560…"],
  "externalIndices": [0]
}

sign_and_send_btc_tx

Sign and broadcast a Bitcoin transaction. Accepts pre-selected input UTXOs and outputs; the server builds the PSBT, signs each input, finalizes, and broadcasts.

NOTE: The caller is responsible for selecting inputs and outputs, including any change output. The difference between total input value and total output value is paid as the network fee.

WARNING: Remember, if the change output is not included, the difference is considered the fee, as fee = inputsTotal - outputsTotal. Without a change address defined, you could experience a loss of funds to excessive fees.

Parameters

Name

Type

Required

Description

fromAddress

string

Yes

Sender Bitcoin address

isTestnet

boolean

Yes

true for testnet, false for mainnet

inputs

object[]

Yes

Input UTXOs to spend (≥ 1) — see below

outputs

object[]

Yes

Transaction outputs (≥ 1) — see below

inputs[]

Name

Type

Required

Description

txHash

string

Yes

Funding transaction hash

index

integer

Yes

Output index within the funding transaction

value

integer (sats)

Yes

UTXO value in satoshis

script

string

Yes

Locking script

blockHeight

integer

Yes

Block height of the UTXO

confirmations

integer

Yes

Confirmation count

txHex

string

Optional

Raw funding transaction hex

confirmedTime

string

Confirmation timestamp

outputs[]

Name

Type

Required

Description

address

string

Yes

Recipient Bitcoin address

value

integer (sats)

Yes

Amount in satoshis

Returns

{ "response": { "result": "<transactionHash>" } }

sign_and_send_solana_tx

Sign and broadcast a Solana transaction. Accepts a base64-encoded serialized transaction (legacy or versioned); the server signs with the account's Solana key and submits it.

Parameters

Name

Type

Required

Description

fromAddress

string

Yes

Signer's Solana public key (from list_accounts)

isTestnet

boolean

Yes

true for testnet, false for mainnet

base64EncodedTx

string

Yes

Base64-encoded serialized transaction

Returns

{ "response": { "result": "<transactionSignature>" } }

Errors

All tools return errors as MCP tool results with isError: true and a JSON text payload.

Pre-flight failures (e.g. network or module not found) return a plain message:

{ "content": [{ "type": "text", "text": "Network not found" }], "isError": true }

Signing / RPC / policy failures return a structured error:

{
  "error": {
    "code": -32603,
    "message": "Unable to create transaction: Failed to sign Avalanche transaction",
    "data": { "cause": { "message": "…" } }
  }
}

Common policy rejections include: Account access disabled, Recipient is not allowed. Add recipient to policy, Blockaid simulation was unsuccessful (spend-limit valuation could not simulate the transaction), and daily spend-limit breaches.

Disclaimer

The Core Knowledge Base, including all the Help articles on this site, is provided for technical support purposes only, without representation, warranty, or guarantee of any kind, and is not technical, investment, financial, accounting, tax, or legal advice. The Core Wallet MCP Server enables an authorized AI agent to sign and broadcast transactions from your wallet. The spend-policy controls described above are provided on a best-efforts basis, apply only to the transaction types and networks specified, and do not guarantee against loss — including loss resulting from agent behavior, network fees, failed or unavailable simulation, or transactions falling outside the scope of a given control. You are responsible for the accounts, recipients, networks, limits, and agents you choose to enable. Examples are illustrative only. Please review this Notice and the Terms of Use.


For any additional questions, please view our other knowledge base articles or contact a Product Support team member via the chat button. Examples are for illustrative purposes only.

Did this answer your question?