MCP Tools

Complete parameter and return reference for all 25 fiat-only AgentX MCP tools across payments (accounts, OTC exchange, fiat deposit, withdrawal, history) and fixed income.

All tools are available via the Alpha Ladder MCP server at https://www.alphaladder.hk/mcp. Check module permissions before calling any module-specific tool. Cross-cutting concepts (minor units, withdrawalParty, fee enums, verification codes) are defined in Concepts.


Accounts

get_account_summary

Get a USD-equivalent balance summary across all product account categories. Read-only.

Parameters

None.

Returns

An object with keys fiat, investment_fiat, quarantine_portfolio, investment_product. Each key maps to { availableAmount, pendingAmount, totalAmount } — all high-precision USD decimal strings.


get_account_detail

Fetch per-currency breakdown for a specific product account. Read-only.

Parameters

NameTypeRequiredNotes
productCodestring (enum)yesfiat | investment_fiat | quarantine_portfolio | investment_product | named_account

Returns

On success: { data: { holderCode, productCode, availableAmount, pendingAmount, totalAmount, instrumentInfoMap } }. instrumentInfoMap is keyed by currency code; each entry has availableAmount, availableAmountDisplay, pendingAmount, pendingCreditAmount. On session expiry: { error: true, message, authUrl? }. See Accounts & Balances.


get_module_permissions

Check which financial modules the authenticated user can access. Read-only.

Parameters

None.

Returns

{ permissions: [{ module: 'deposit'|'otc'|'withdrawal'|'wealth', hasPermission: boolean }] }


get_available_currency_pairs

List all currency pairs available for OTC exchange. Read-only.

Parameters

None.

Returns

{ pairs: string[] } — each element is a tradeable pair in BASE/QUOTE format (e.g. "USD/EUR", "GBP/SGD").


OTC Exchange

Requires otc module permission. The OTC flow is two steps: get_otc_quote → confirm_otc_trade. For error handling (HTTP 410 / 409), see Response Reference.

get_exchange_quote

Fetch the current from→to exchange rate without locking a quote or checking balance. Use for browsing rates or pre-lock math. Read-only.

Parameters

NameTypeRequiredNotes
fromCurrencystringyesSource currency code (e.g. "USD", "SGD")
toCurrencystringyesTarget currency code (e.g. "EUR", "GBP")

Returns

{ rate: string } — the decimal from→to exchange rate. Multiply fromCurrency amount by rate to get the toCurrency amount. Does not lock a quote or reserve balance.


get_otc_quote

Step 1 of OTC exchange. Locks a quote at a specific amount and performs a backend balance and limit check. Read-only.

Parameters

NameTypeRequiredNotes
fromCurrencystringyesSource currency code (e.g. "USD", "EUR")
toCurrencystringyesTarget currency code (e.g. "EUR", "SGD")
totalValuestringyesAmount to exchange in source currency (e.g. "1000", "500.50")

Returns

On success: { quoteCode, exchangeRate, finalAmount, validityPeriod, fromCurrency, toCurrency, totalValue, expiry }. On failure: { success: false, message }.

FieldTypeDescription
quoteCodestringPass unchanged to confirm_otc_trade
exchangeRatestringLocked from→to rate. May be "" when pricing is unavailable — do not proceed to confirm in that case
finalAmountstringEstimated receive amount in toCurrency. May be "" when pricing is unavailable
validityPeriodnumberSeconds the user has to confirm (UX hint; the server keeps context for 5 minutes)
expirystringAbsolute expiry timestamp (ISO 8601 UTC)

Always display exchangeRate and finalAmount to the user before calling confirm_otc_trade.


confirm_otc_trade

Step 2 of OTC exchange. Executes the trade at the live rate.

Destructive — requires explicit user confirmation before calling.

The server re-fetches a fresh rate at confirm time; the executed exchangeRate and finalAmount in this response are the final settled values and may differ from the get_otc_quote values. Failures are HTTP errors: 410 = quote context expired; 409 = rate drift exceeded. On either error, do not auto-retry — call get_otc_quote again.

Parameters

NameTypeRequiredNotes
quoteCodestringyesquoteCode returned by get_otc_quote

Returns

{ id, tradeCode, point, exchangeRate?, finalAmount? }

FieldTypeDescription
idnumberInternal trade record ID
tradeCodestringTransaction reference code — show as the trade identifier
pointstringLoyalty/reward points earned (decimal string)
exchangeRatestring (optional)Actual executed exchange rate
finalAmountstring (optional)Actual amount received in toCurrency

get_otc_trade_detail

Look up the full detail of a settled or pending OTC trade by its tradeCode. Read-only.

Parameters

NameTypeRequiredNotes
tradeCodestringyesOTC trade code (e.g. the code returned by confirm_otc_trade)

Returns

{ trade: object | null } — null when no trade matches the code.

trade fields:

FieldTypeDescription
tradeCodestringUnique OTC trade code
tradeStatusnumberStatus code (e.g. 1 = pending, 4 = settled)
tradingActionnumber1 = buy base, 2 = sell base
buyerCodestringBuyer participant code
buyerNamestringBuyer display name
sellerCodestringSeller participant code
sellerNamestringSeller display name
baseCurrencystringBase currency code
quoteCurrencystringQuote currency code
baseQuantitystringQuantity of base currency
quoteAmountstringAmount of quote currency exchanged
quotePricestringQuoted rate before adjustments
finalPricestringFinal locked exchange rate
tradeTimestringTrade creation timestamp (ISO 8601)
settleTimestringScheduled settlement timestamp (ISO 8601)
updatedTimestringLast status update timestamp (ISO 8601)

Fiat Deposit

Requires deposit module permission.

get_fiat_deposit_currencies

List fiat currencies available for deposit. Read-only.

Parameters

NameTypeRequiredNotes
withdrawalPartystring (enum)no'first_party' or 'third_party'. Defaults to first-party
isSameNameAccountbooleannotrue for named-account (same-name) deposit flow

Returns

{ currencies: string[] } — available fiat currency codes (e.g. "USD", "EUR", "GBP").


get_deposit_bank_account

Get Alpha Ladder's bank account details for a given currency (where to wire funds). Read-only.

Parameters

NameTypeRequiredNotes
currencystringyesFiat currency code (e.g. "USD", "EUR", "GBP")

Returns

{ accounts: [{ ownerName, ownerAddress, ownerCountryCode, baNumber, swiftCode, bankName, bankAddress, countryCode }] } — Alpha Ladder's receiving bank account details.


get_fiat_deposit_bank_accounts

List payor bank accounts available for fiat deposit. Read-only.

Parameters

NameTypeRequiredNotes
withdrawalPartystring (enum)yes'first_party' or 'third_party'

Returns

{ accounts: [{ baNumber, ownerName, ownerAddress?, ownerCountryCode?, swiftCode?, bankName?, bankAddress?, countryCode?, ownerType?, relationship?, ownerCorporateCountryCode?, baTag?, relationType? }] } — payor bank accounts (own accounts for first-party; registered COBO payors for third-party).


get_third_party_fiat_deposit_estimate

Estimate a third-party (COBO) fiat deposit — fee calculation and bank account details. Read-only.

Parameters

NameTypeRequiredNotes
currencystringyesFiat currency code (e.g. "USD")
amountstringyesDeposit amount as positive decimal string
feePayerstring (enum)yes'paid_by_me' or 'paid_by_third_party'
baNumberstringyesPayor bank account number — must be from get_fiat_deposit_bank_accounts
isSameNameAccountbooleannotrue for named-account flow

Returns

{ accountType: 'fiat', depositType, amountSent, estimatedServiceFee, estimatedAmountReceived, payorBankAccount, receiverBankAccount }. Show fee and amounts to the user for confirmation before calling execute_third_party_fiat_deposit_submit.


execute_third_party_fiat_deposit_submit

Submit a third-party (COBO) fiat deposit request.

Destructive — requires explicit user confirmation before calling.

Call get_third_party_fiat_deposit_estimate first and confirm fee/amounts with the user before calling this tool.

Parameters

NameTypeRequiredNotes
currencystringyesFiat currency code (e.g. "USD")
amountstringyesDeposit amount as positive decimal string
feePayerstring (enum)yes'paid_by_me' or 'paid_by_third_party'
baNumberstringyesPayor bank account number (from get_fiat_deposit_bank_accounts)
isSameNameAccountbooleannotrue for named-account flow

Returns

{ depositNumber: string } — the deposit requirement number (e.g. "DP2026...").


get_named_account_currencies

List fiat currencies supported for same-name (named) account transfers. Read-only.

Parameters

None.

Returns

{ currencies: string[] } — currency codes supporting named-account deposits (e.g. "SGD", "EUR", "USD").


get_named_account_list

Get the user's registered same-name (named) bank accounts for first-party fiat transfers. Read-only.

Parameters

None.

Returns

{ accounts: [{ baNumber, ownerName, ownerAddress?, ownerCountryCode?, swiftCode?, bankName?, bankAddress?, countryCode?, ... }] } — the user's bound same-name bank account details. Call get_named_account_currencies first to confirm the selected currency supports named-account transfers.


Withdrawal

Requires withdrawal module permission. Always call get_withdrawal_quote before executing to confirm service fee and minimum amount. For third-party withdrawals, purposeOfTransaction is required on execute calls.

get_withdrawal_currencies

List fiat currencies available for withdrawal. Read-only.

Parameters

NameTypeRequiredNotes
currencyType1 (integer literal)yes1 = fiat (the only supported asset class)
withdrawalParty1 or 2 (integer literal)yes1 = first-party, 2 = third-party
isSameNameAccountbooleannotrue = same-name account path

Returns

{ currencies: string[] } — fiat currency codes available for withdrawal.


get_withdrawal_quote

Get the service fee and minimum withdrawal amount in a single call. Read-only.

Parameters

NameTypeRequiredNotes
withdrawalParty1 or 2 (integer literal)yes1 = first-party, 2 = third-party
currencystringyesUppercase alphanumeric currency code
amountstringyesWithdrawal amount as positive decimal string
isSameNameAccountbooleannoFiat only

Returns

{ fee: { serviceFee: string }, minimumAmount: { minimumAmount: number } }.


get_fiat_withdrawal_bank_accounts

List non-same-name fiat withdrawal bank accounts (regular bound accounts). Read-only.

Parameters

None.

Returns

{ accounts: [{ baNumber, ownerName, ownerAddress?, ownerCountryCode?, swiftCode?, bankName?, bankAddress?, countryCode?, ownerType?, ... }] }. For same-name accounts, use get_named_account_list instead.


execute_fiat_withdrawal

Execute a fiat withdrawal.

Destructive — requires explicit user confirmation before calling.

Confirm fee and minimum with get_withdrawal_quote and confirm the destination bank account with the user before calling this tool.

Parameters

NameTypeRequiredNotes
withdrawalParty1 or 2 (integer literal)yes1 = first-party, 2 = third-party
currencystringyesUppercase alphabetic fiat currency code
amountstringyesWithdrawal amount as positive decimal string
bankAccountNumberstringyesDestination bank account number
verificationCodestringyesOne-time verification code from Alpha Ladder authentication
chargeTypeinteger (1–3)no1 = beneficiary bears fee, 2 = sender bears fee, 3 = shared
isSameNameAccountbooleannotrue for same-name account path (fiat only)
purposeOfTransactionstringconditionalRequired when withdrawalParty = 2 (third-party)

Returns

{ txCode, currency, status, withdrawalAmount?, chargeAmount?, totalChargeAmount?, amountReceived?, to?, createAt?, updateAt? }. See Response Reference.


History

get_deposit_list

Query paginated deposit transaction records. Read-only.

Parameters

NameTypeRequiredNotes
pageNuminteger ≥ 1yesPage number, starting from 1
pageSizeinteger 1–100yesRecords per page (max 100)
payeeAccountTypenumberyes1 = fiat deposits
startTimestringnoStart of time range: "YYYY-MM-DD HH:mm:ss"
endTimestringnoEnd of time range: "YYYY-MM-DD HH:mm:ss"

Returns

{ total, list, pageNum, pageSize, pages }. Each list item: { paymentCode, status, statusDesc, currency, totalAmount, receiveAmount, chargeAmount, detail, createAt, updateAt, payerCode, payerName, payeeCode, payeeName, coboInfo, ... }.

Amounts (totalAmount, receiveAmount, chargeAmount) are integers in minor units — divide by 10^decimals. See Response Reference.


get_withdrawal_list

Query paginated withdrawal transaction records. Read-only.

Parameters

NameTypeRequiredNotes
pageNuminteger ≥ 1yesPage number, starting from 1
pageSizeinteger 1–100yesRecords per page (max 100)
payeeAccountTypenumberyes1 = fiat withdrawals
startTimestringnoStart of time range: "YYYY-MM-DD HH:mm:ss"
endTimestringnoEnd of time range: "YYYY-MM-DD HH:mm:ss"

Returns

{ total, list, pageNum, pageSize, pages }. Each list item: { paymentCode, status, statusDesc, currency, totalAmount, receiveAmount, chargeAmount, paymentType, purposeOfTransaction, pathTo, fee, feeRate, detail, createAt, updateAt, coboInfo, poboInfo, ... }.

paymentType: 21 = first-party, 22 = third-party. Amounts are integers in minor units — divide by 10^decimals. See Response Reference.


Fixed Income

Requires wealth module permission. Always call investor_precheck before fip_subscribe to verify required agreements are signed.

get_fip_products

Query available Alpha Ladder Wealth Fixed Income Products. Read-only.

Parameters

None.

Returns

{ success, code, msg, data, currencyConvertInfoList? }

data is an array of products:

FieldTypeDescription
productCodestringInternal product code
productNamestringDisplay name
productTypestringCategory (currently FIP)
termstringHuman-readable term (e.g. "Flexible", "30 Days")
termTypeinteger1 = flexible/open term, 2 = fixed term
sortintegerSort order
estAprstringEstimated APR or range (percentage string)
currencyItemListarraySupported currency options (see below)

Each currencyItemList entry:

FieldTypeDescription
idstringCurrency item unique identifier — pass to fip_subscribe
currencystringCurrency code (e.g. "USD", "EUR", "SGD")
estAprstringAPR for this currency option
termstringHuman-readable term
termTypeinteger1 = flexible, 2 = fixed
termDaysintegerTerm in days; negative values indicate flexible settlement products
liquiditystringSettlement description (e.g. "(T + 1 Settlement)")
mhpstringMinimum holding period description; empty string if not specified
issuerstringIssuer name

get_fip_agreement

Query FIP agreement documents (PDF links) for a specific product and currency. Read-only.

Parameters

NameTypeRequiredNotes
productTypestringyesProduct category (e.g. "FIP")
productCodestringyesProduct code (e.g. "FIP_OpenTerm_T+1", "FIP_30Days")
currencystringyesCurrency code (e.g. "USD", "EUR", "SGD")

Returns

{ agreements: [{ product_type, product_code, currency, url, show_name, sort, term_days }] }. url is a PDF download link. Present the agreement document to the user before subscribing.


investor_precheck

Check whether the user has completed required investor agreements and declarations. Read-only.

Parameters

None.

Returns

{
  "Master Brokerage Agreement & Trading Rules": true,
  "investorDeclarationTag": false
}
FieldTypeDescription
Master Brokerage Agreement & Trading RulesbooleanWhether the Master Brokerage Agreement has been signed
investorDeclarationTagbooleanWhether the investor declaration has been completed

If either field is false, the user must complete that step before subscribing to a FIP product.


fip_subscribe

Subscribe to a Alpha Ladder Wealth Fixed Income Product.

Destructive — requires explicit user confirmation before calling.

Call investor_precheck and present the get_fip_agreement document to the user before calling this tool.

Parameters

NameTypeRequiredNotes
idstringyesCurrency item ID from get_fip_products (currencyItemList[].id)
currencystringyesCurrency code (e.g. "USD", "EUR", "SGD")
termDaysintegeryesTerm length in days. Use negative values for flexible products (e.g. -2 for T+1 settlement, -1 for T+3)
subscriptionAmountnumberyesSubscription amount in the specified currency

Returns

{ success, code, msg, data, currencyConvertInfoList? }

data fields:

FieldTypeDescription
currencystringSubscribed currency
subscriptionAmountstringConfirmed subscription amount
subscriptionDatestring or nullSubscription date (e.g. "2026-04-09"); null if not yet determined
returnsAccrualStartDatestring or nullDate returns start accruing; null if not yet determined
initialRedemptionOpeningDaystring or nullEarliest redemption date; null if not yet determined
settlementDatestring or nullSettlement date; null if not yet determined
Was this page helpful?
© 2026 Alpha Ladder