githubEdit

codeAPI Reference

WdkMcpServer class and all 35 built-in MCP tools

WdkMcpServer

The WdkMcpServer class extends McpServer from @modelcontextprotocol/sdk with WDK-specific wallet, pricing, indexer, and protocol capabilities.

Constructor

const server = new WdkMcpServer(name: string, version: string)
Parameter
Type
Description

name

string

Server name (shown to AI clients)

version

string

Server version string

Core Methods

useWdk(config)

Initializes the WDK wallet engine. Must be called before registerWallet() or registerProtocol().

server.useWdk(config: WdkConfig): WdkMcpServer
Parameter
Type
Required
Description

config.seed

string

Yes

BIP-39 mnemonic seed phrase

Returns: WdkMcpServer (for chaining)


registerWallet(blockchain, WalletManager, config)

Registers a wallet module for a specific blockchain.

Parameter
Type
Required
Description

blockchain

string

Yes

Chain name (e.g., 'ethereum', 'bitcoin')

WalletManager

class

Yes

Wallet module class (e.g., WalletManagerEvm)

config

object

Yes

Module-specific config (see each wallet module's docs)

Requires: useWdk() called first


registerProtocol(chain, label, Protocol, config?)

Registers a DeFi protocol (swap, bridge, lending, or fiat) for a chain.

Parameter
Type
Required
Description

chain

string

Yes

Chain name (must have a wallet registered)

label

string

Yes

Protocol identifier (e.g., 'velora', 'aave')

Protocol

class

Yes

Protocol module class

config

object

No

Protocol-specific config

Requires: useWdk() called first


useIndexer(config)

Enables the WDK Indexer client for querying token balances and transfer history.

Parameter
Type
Required
Description

config.apiKey

string

Yes

WDK Indexer API key


usePricing()

Enables the Bitfinex pricing client for current and historical prices.


registerTools(tools)

Registers multiple MCP tools at once.


registerToken(chain, symbol, token)

Registers a custom token for a chain.

Parameter
Type
Description

chain

string

Chain name

symbol

string

Token symbol (e.g., 'USDC')

token.address

string

Token contract address

token.decimals

number

Token decimal places


close()

Disposes the WDK instance and clears seed material from memory. Call this when shutting down the server.

Query Methods

Method
Returns
Description

getChains()

string[]

Registered blockchain names

getTokenInfo(chain, symbol)

TokenInfo | undefined

Token address and decimals

getRegisteredTokens(chain)

string[]

Registered token symbols for a chain

getSwapChains()

string[]

Chains with swap protocols

getSwapProtocols(chain)

string[]

Swap protocol labels for a chain

getBridgeChains()

string[]

Chains with bridge protocols

getBridgeProtocols(chain)

string[]

Bridge protocol labels for a chain

getLendingChains()

string[]

Chains with lending protocols

getLendingProtocols(chain)

string[]

Lending protocol labels for a chain

getFiatChains()

string[]

Chains with fiat protocols

getFiatProtocols(chain)

string[]

Fiat protocol labels for a chain

Getters

Getter
Type
Description

server.wdk

WalletKit

WDK instance (after useWdk())

server.indexerClient

WdkIndexerClient

Indexer client (after useIndexer())

server.pricingClient

WdkPricingClient

Pricing client (after usePricing())


Types


Built-in MCP Tools

All tools use Zodarrow-up-right for input/output validation and include MCP tool annotationsarrow-up-right that describe their behavior to AI clients.

MCP Annotations

Every tool declares these annotations:

Annotation
Type
Meaning

readOnlyHint

boolean

Tool does not modify state

destructiveHint

boolean

Tool may spend funds or make irreversible changes

idempotentHint

boolean

Calling multiple times produces the same result

openWorldHint

boolean

Tool interacts with external systems

circle-info

Human Confirmation - All tools where destructiveHint: true use MCP elicitationsarrow-up-right to show a confirmation dialog before broadcasting. The user must explicitly approve each transaction.


Wallet Tools

Requires: useWdk() + registerWallet()

getAddress

Get the wallet address for a blockchain. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain to get the address for

Output:

Field
Type
Description

address

string

The wallet address


getBalance

Get the native token balance for a blockchain (ETH, BTC, SOL, etc.). Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain to query

Output:

Field
Type
Description

balance

string

Balance in base units (wei, satoshis, etc.)


getTokenBalance

Get the balance of a registered token (USDT, USDC, etc.). Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain to query

token

string

Yes

Token symbol (e.g., "USDT")

Output:

Field
Type
Description

balance

string

Human-readable token balance

balanceBaseUnits

string

Balance in smallest unit


getFeeRates

Get current network fee rates. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain to query

Output:

Field
Type
Description

normal

string

Normal fee rate (balanced speed)

fast

string

Fast fee rate (higher cost, faster confirmation)

Fee units vary by chain: satoshis/byte (Bitcoin), wei (Ethereum), or chain-specific units.


getMaxSpendableBtc

Get the maximum spendable Bitcoin amount after fees. Read-only. Bitcoin-only.

Input: None

Output:

Field
Type
Description

amount

string

Maximum spendable amount (satoshis)

fee

string

Estimated transaction fee (satoshis)

changeValue

string

Expected change output (satoshis)


quoteSendTransaction

Estimate the fee for sending native currency. Read-only. Does not broadcast.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

to

string

Yes

Recipient address

value

string

Yes

Amount in base units (wei, satoshis)

Output:

Field
Type
Description

fee

string

Estimated transaction fee in base units


quoteTransfer

Estimate the fee for transferring a token. Read-only. Does not broadcast.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

token

string

Yes

Token symbol (e.g., "USDT")

recipient

string

Yes

Recipient address

amount

string

Yes

Amount in human-readable format (e.g., "10")

Output:

Field
Type
Description

fee

string

Estimated transaction fee in base units


sendTransaction

Send native currency (ETH, BTC, etc.). Destructive - requires user confirmation.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

to

string

Yes

Recipient address

value

string

Yes

Amount in base units (wei, satoshis)

Output:

Field
Type
Description

hash

string

Transaction hash

fee

string

Actual fee paid

circle-exclamation

transfer

Transfer a registered token. Destructive - requires user confirmation.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

token

string

Yes

Token symbol (e.g., "USDT")

to

string

Yes

Recipient address

amount

string

Yes

Amount in human-readable format (e.g., "100")

Output:

Field
Type
Description

hash

string

Transaction hash

fee

string

Actual fee paid

circle-exclamation

sign

Sign an arbitrary message with the wallet's private key. Does not reveal the private key.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

message

string

Yes

Message to sign

Output:

Field
Type
Description

signature

string

Cryptographic signature


verify

Verify that a signature is valid for a given message. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

The blockchain

message

string

Yes

Original message

signature

string

Yes

Signature to verify

Output:

Field
Type
Description

valid

boolean

Whether the signature is valid


Pricing Tools

Requires: usePricing()

getCurrentPrice

Get the current spot price from Bitfinex. Read-only.

Input:

Parameter
Type
Required
Description

base

string

Yes

Base currency (e.g., "BTC", "ETH")

quote

string

Yes

Quote currency (e.g., "USD", "USDT")

Output:

Field
Type
Description

base

string

Base currency

quote

string

Quote currency

price

number

Current spot price


getHistoricalPrice

Get historical price data (OHLCV candles) from Bitfinex. Read-only.

Input:

Parameter
Type
Required
Description

from

string

Yes

Base currency (e.g., "BTC")

to

string

Yes

Quote currency (e.g., "USD")

start

number

No

Start timestamp (ms, unix epoch)

end

number

No

End timestamp (ms, unix epoch)

Output:

Field
Type
Description

from

string

Base currency

to

string

Quote currency

start

number

Start timestamp (if provided)

end

number

End timestamp (if provided)

points

number[][]

Array of [timestamp, open, close, high, low, volume]

circle-info

Long time ranges are automatically downscaled to ≤100 data points.


Indexer Tools

Requires: useIndexer()

getIndexerTokenBalance

Get token balance for any address via the WDK Indexer API. Read-only.

Input:

Parameter
Type
Required
Description

blockchain

enum

Yes

Blockchain to query

token

enum

Yes

Token (e.g., "usdt", "xaut", "btc")

address

string

Yes

Wallet address

Output:

Field
Type
Description

tokenBalance.blockchain

string

Blockchain name

tokenBalance.token

string

Token name

tokenBalance.amount

string

Token balance

circle-info

This queries the indexed balance, which may have slight delay compared to real-time blockchain state. For your own wallet's balance, use getBalance or getTokenBalance instead.


getTokenTransfers

Get token transfer history for an address. Read-only.

Input:

Parameter
Type
Required
Description

blockchain

enum

Yes

Blockchain to query

token

enum

Yes

Token (e.g., "usdt", "xaut", "btc")

address

string

Yes

Wallet address

limit

number

No

Results per page (1–1000, default: 10)

fromTs

number

No

Start timestamp (unix seconds)

toTs

number

No

End timestamp (unix seconds)

sort

enum

No

"asc" or "desc" (default: "desc")

Output:

Field
Type
Description

transfers

object[]

Array of transfer records

transfers[].blockchain

string

Blockchain

transfers[].blockNumber

number

Block number

transfers[].transactionHash

string

Transaction hash

transfers[].token

string

Token

transfers[].amount

string

Transfer amount

transfers[].timestamp

number

Unix timestamp

transfers[].from

string

Sender address

transfers[].to

string

Recipient address


Swap Tools

Requires: registerProtocol() with a swap protocol

quoteSwap

Get a swap quote without executing. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain with swap protocol

tokenIn

string

Yes

Token to sell (e.g., "USDT")

tokenOut

string

Yes

Token to buy (e.g., "USDC")

amount

string

Yes

Amount in human-readable units

side

enum

Yes

"sell" or "buy"

Output:

Field
Type
Description

protocol

string

DEX protocol used

tokenIn

string

Input token symbol

tokenOut

string

Output token symbol

tokenInAmount

string

Input amount (human-readable)

tokenOutAmount

string

Output amount (human-readable)

fee

string

Estimated fee


swap

Execute a token swap. Destructive - requires user confirmation.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain with swap protocol

tokenIn

string

Yes

Token to sell

tokenOut

string

Yes

Token to buy

amount

string

Yes

Amount in human-readable units

side

enum

Yes

"sell" or "buy"

to

string

No

Recipient address (defaults to wallet)

Output:

Field
Type
Description

success

boolean

Whether the swap succeeded

protocol

string

DEX protocol used

hash

string

Transaction hash

tokenIn

string

Input token symbol

tokenOut

string

Output token symbol

tokenInAmount

string

Actual input amount

tokenOutAmount

string

Actual output amount

fee

string

Fee paid

circle-exclamation

Bridge Tools

Requires: registerProtocol() with a bridge protocol

quoteBridge

Get a bridge quote without executing. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Source blockchain

targetChain

string

Yes

Destination blockchain

token

string

Yes

Token to bridge (e.g., "USDT")

amount

string

Yes

Amount in human-readable units

recipient

string

No

Recipient on target chain (defaults to wallet)

Output:

Field
Type
Description

protocol

string

Bridge protocol used

sourceChain

string

Source blockchain

targetChain

string

Destination blockchain

token

string

Token symbol

amount

string

Amount to bridge

fee

string

Estimated gas fee

bridgeFee

string

Bridge protocol fee


bridge

Execute a cross-chain bridge. Destructive - requires user confirmation.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Source blockchain

targetChain

string

Yes

Destination blockchain

token

string

Yes

Token to bridge

amount

string

Yes

Amount in human-readable units

recipient

string

No

Recipient on target chain (defaults to wallet)

Output:

Field
Type
Description

success

boolean

Whether the bridge succeeded

protocol

string

Bridge protocol used

hash

string

Transaction hash

sourceChain

string

Source blockchain

targetChain

string

Destination blockchain

token

string

Token symbol

amount

string

Amount bridged

fee

string

Gas fee paid

bridgeFee

string

Bridge protocol fee paid

circle-exclamation

Lending Tools

Requires: registerProtocol() with a lending protocol

quoteSupply

Get a fee estimate for supplying tokens to a lending pool. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain with lending protocol

token

string

Yes

Token to supply

amount

string

Yes

Amount in human-readable units

onBehalfOf

string

No

Address to receive aTokens (defaults to wallet)

Output:

Field
Type
Description

protocol

string

Lending protocol used

chain

string

Blockchain

token

string

Token symbol

amount

string

Amount to supply

fee

string

Estimated gas fee


supply

Supply tokens to a lending pool. Destructive - requires user confirmation.

Same input as quoteSupply. Output includes success, protocol, hash, token, amount, and fee.


quoteWithdraw

Estimate fee for withdrawing from a lending pool. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain

token

string

Yes

Token to withdraw

amount

string

Yes

Amount in human-readable units

Output: Same structure as quoteSupply.


withdraw

Withdraw tokens from a lending pool. Destructive - requires user confirmation.

Same input as quoteWithdraw. Output includes success, protocol, hash, token, amount, and fee.


quoteBorrow

Estimate fee for borrowing from a lending pool. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain

token

string

Yes

Token to borrow

amount

string

Yes

Amount in human-readable units

Output: Same structure as quoteSupply.


borrow

Borrow tokens from a lending pool. Destructive - requires user confirmation.

Same input as quoteBorrow. Output includes success, protocol, hash, token, amount, and fee.


quoteRepay

Estimate fee for repaying a loan. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain

token

string

Yes

Token to repay

amount

string

Yes

Amount in human-readable units

Output: Same structure as quoteSupply.


repay

Repay borrowed tokens. Destructive - requires user confirmation.

Same input as quoteRepay. Output includes success, protocol, hash, token, amount, and fee.


Fiat Tools

Requires: registerProtocol() with a fiat protocol

quoteBuy

Get a quote for purchasing crypto with fiat. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain for the fiat protocol

cryptoAsset

string

Yes

Crypto asset code (e.g., "eth", "btc")

fiatCurrency

string

Yes

Fiat currency code (e.g., "USD", "EUR")

amount

string

Yes

Amount to quote

amountType

enum

Yes

"crypto" or "fiat"

Output:

Field
Type
Description

protocol

string

Fiat protocol used

cryptoAsset

string

Crypto asset code

fiatCurrency

string

Fiat currency code

cryptoAmount

string

Crypto amount (base units)

fiatAmount

string

Fiat amount (smallest units, e.g., cents)

fee

string

Total fee (fiat smallest units)

rate

string

Exchange rate


buy

Execute a fiat-to-crypto purchase. Destructive - requires user confirmation.

Same input as quoteBuy. Output includes success, protocol, redirect URL or transaction details.


quoteSell

Get a quote for selling crypto to fiat. Read-only.

Same input structure as quoteBuy. Same output structure.


sell

Execute a crypto-to-fiat sale. Destructive - requires user confirmation.

Same input as quoteSell. Output includes success, protocol, and transaction details.


getTransactionDetail

Get details of a fiat transaction by ID. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain

transactionId

string

Yes

Transaction ID from the fiat provider


getSupportedCryptoAssets

List crypto assets supported by the fiat provider. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain


getSupportedFiatCurrencies

List fiat currencies supported by the fiat provider. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain


getSupportedCountries

List countries supported by the fiat provider. Read-only.

Input:

Parameter
Type
Required
Description

chain

enum

Yes

Blockchain


Utility Exports

Utility functions for converting between human-readable amounts and blockchain base units:

parseAmountToBaseUnits(amount, decimals)

Converts a human-readable amount string to BigInt base units without floating-point errors.

formatBaseUnitsToAmount(baseUnits, decimals)

Converts BigInt base units to a human-readable string.

AmountParseError

Custom error class with a code property for programmatic handling:

Error Code
Description

EMPTY_STRING

Empty amount string

INVALID_FORMAT

Not a valid number

NEGATIVE_AMOUNT

Negative amounts not allowed

EXCESSIVE_PRECISION

More decimal places than token supports

INVALID_DECIMALS

Decimals value out of range

SCIENTIFIC_NOTATION_PRECISION

Scientific notation exceeds precision


Need Help?