Skip to main content
Glama
account.py23.1 kB
from fastmcp import FastMCP from pydantic import Field from okx.Account import AccountAPI from .config import * ACCOUNT = AccountAPI( api_key=OKX_API_KEY, api_secret_key=OKX_API_SECRET, passphrase=OKX_PASSPHRASE, flag=OKX_TRADE_FLAG, domain=OKX_BASE_URL, ) def add_tools(mcp: FastMCP): @mcp.tool( title="Get account configuration", description="Retrieve current OKX account configuration. " "It is recommended to use this tool to obtain account configuration information before using all other tools", ) def account_config(): resp = ACCOUNT.get_account_config() or {} if int(resp.get("code", 0)): return resp resp["_response_schema"] = """ uid String Account ID of current request mainUid String Main Account ID of current request. The current request account is main account if uid = mainUid. The current request account is sub-account if uid != mainUid. acctLv String Account mode 1: Spot mode 2: Futures mode 3: Multi-currency margin 4: Portfolio margin acctStpMode String Account self-trade prevention mode: cancel_maker/cancel_taker/cancel_both The default value is cancel_maker. Users can log in to the webpage through the master account to modify this configuration posMode String Position mode. long_short_mode: long/short, only applicable to FUTURES/SWAP; net_mode: net autoLoan Boolean Whether to borrow coins automatically true: borrow coins automatically false: not borrow coins automatically feeType String Fee type 0: fee is charged in the currency you receive from the trade 1: fee is always charged in the quote currency of the trading pair level String The user level of the current real trading volume on the platform, e.g Lv1, which means regular user level levelTmp String Temporary experience user level of special users, e.g Lv1 ctIsoMode String Contract isolated margin trading settings. automatic: Auto transfers; autonomy: Manual transfers mgnIsoMode String Margin isolated margin trading settings auto_transfers_ccy: New auto transfers, enabling both base and quote currency as the margin for isolated margin trading automatic: Auto transfers quick_margin: Quick Margin Mode (For new accounts, including subaccounts, some defaults will be automatic, and others will be quick_margin) roleType String Role type 0: General user 1: Leading trader 2: Copy trader traderInsts Array of strings Leading trade instruments, only applicable to Leading trader spotRoleType String SPOT copy trading role type. 0: General user; 1: Leading trader; 2: Copy trader spotTraderInsts Array of strings Spot lead trading instruments, only applicable to lead trader opAuth String Whether the optional trading was activated. 0: not activate; 1: activated kycLv String Main account KYC level 0: No verification 1: level 1 completed 2: level 2 completed 3: level 3 completed If the request originates from a subaccount, kycLv is the KYC level of the main account. If the request originates from the main account, kycLv is the KYC level of the current account. label String API key note of current request API key. No more than 50 letters (case sensitive) or numbers, which can be pure letters or pure numbers ip String IP addresses that linked with current API key, separate with commas if more than one. It is an empty string "" if there is no IP bonded. perm String The permission of the current requesting API key or Access token. read_only: Read; trade: Trade; withdraw: Withdraw liquidationGear String The maintenance margin ratio level of liquidation alert 3 and -1 means that you will get hourly liquidation alerts on app and channel "Position risk warning" when your margin level drops to or below 300%. -1 is the initial value which has the same effect as -3 0 means that there is not alert enableSpotBorrow Boolean Whether borrow is allowed or not in Spot mode. true: Enabled; false: Disabled spotBorrowAutoRepay Boolean Whether auto-repay is allowed or not in Spot mode. true: Enabled; false: Disabled type String Account type 0: Main account 1: Standard sub-account 2: Managed trading sub-account 5: Custody trading sub-account - Copper 9: Managed trading sub-account - Copper 12: Custody trading sub-account - Komainu settleCcy String Current account's USD-margined contract settle currency settleCcyList String Current account's USD-margined contract settle currency list, like ["USD", "USDC", "USDG"] """ return resp @mcp.tool( title="Get account balance", description="Retrieve a list of assets (with non-zero balance), remaining balance, and available amount in the OKX trading account", ) def account_balance( ccy: str = Field("", description="Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH." "Optional, all by default if not passed"), ): resp = ACCOUNT.get_account_balance(ccy) or {} if int(resp.get("code", 0)): return resp resp["_response_schema"] = """ totalEq: The total amount of equity in USD isoEq: Isolated margin equity in USD. Applicable to Futures mode/Multi-currency margin/Portfolio margin adjEq: Adjusted / Effective equity in USD. The net fiat value of the assets in the account that can provide margins for spot, expiry futures, perpetual futures and options under the cross-margin mode. In multi-ccy or PM mode, the asset and margin requirement will all be converted to USD value to process the order check or liquidation. Due to the volatility of each currency market, our platform calculates the actual USD value of each currency based on discount rates to balance market risks. Applicable to Spot mode/Multi-currency margin and Portfolio margin availEq: Account level available equity, excluding currencies that are restricted due to the collateralized borrowing limit. Applicable to Multi-currency margin/Portfolio margin ordFroz: Cross margin frozen for pending orders in USD. Only applicable to Spot mode/Multi-currency margin/Portfolio margin imr: Initial margin requirement in USD. The sum of initial margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin mmr: Maintenance margin requirement in USD. The sum of maintenance margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin borrowFroz: Potential borrowing IMR of the account in USD. Only applicable to Spot mode/Multi-currency margin/Portfolio margin. It is "" for other margin modes. mgnRatio: Maintenance margin ratio in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin notionalUsd: Notional value of positions in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin notionalUsdForBorrow: Notional value for Borrow in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin notionalUsdForSwap: Notional value of positions for Perpetual Futures in USD. Applicable to Multi-currency margin/Portfolio margin notionalUsdForFutures: Notional value of positions for Expiry Futures in USD. Applicable to Multi-currency margin/Portfolio margin notionalUsdForOption: Notional value of positions for Option in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin upl: Cross-margin info of unrealized profit and loss at the account level in USD. Applicable to Multi-currency margin/Portfolio margin details: Detailed asset information in all currencies details.ccy: Currency details.eq: Equity of currency details.cashBal: Cash balance details.disEq: Discount equity of currency in USD. Applicable to Spot mode(enabled spot borrow)/Multi-currency margin/Portfolio margin details.fixedBal: Frozen balance for Dip Sniper and Peak Sniper details.availBal: Available balance of currency details.frozenBal: Frozen balance of currency details.ordFrozen: Margin frozen for open orders. Applicable to Spot mode/Futures mode/Multi-currency margin details.liab: Liabilities of currency. It is a positive value, e.g. 21625.64; Applicable to Spot mode/Multi-currency margin/Portfolio margin details.uplLiab: Liabilities due to Unrealized loss of currency. Applicable to Multi-currency margin/Portfolio margin details.crossLiab: Cross liabilities of currency. Applicable to Spot mode/Multi-currency margin/Portfolio margin details.rewardBal: Trial fund balance details.isoLiab: Isolated liabilities of currency. Applicable to Multi-currency margin/Portfolio margin details.interest: Accrued interest of currency. It is a positive value, e.g. 9.01; Applicable to Spot mode/Multi-currency margin/Portfolio margin details.twap: Risk indicator of forced repayment. Divided into multiple levels from 0 to 5, the larger the number, the more likely the forced repayment will be triggered. Applicable to Spot mode/Multi-currency margin/Portfolio margin details.frpType: Forced repayment (FRP) type. 0: no FRP; 1: user based FRP; 2: platform based FRP; Return 1/2 when twap is >= 1, applicable to Spot mode/Multi-currency margin/Portfolio margin details.maxLoan: Max loan of currency. Applicable to cross of Spot mode/Multi-currency margin/Portfolio margin details.eqUsd: Equity in USD of currency details.borrowFroz: Potential borrowing IMR of currency in USD. Applicable to Multi-currency margin/Portfolio margin. It is "" for other margin modes. details.notionalLever: Leverage of currency. Applicable to Futures mode details.stgyEq: Strategy equity details.isoUpl: Isolated unrealized profit and loss of currency. Applicable to Futures mode/Multi-currency margin/Portfolio margin details.spotInUseAmt: Spot in use amount. Applicable to Portfolio margin details.clSpotInUseAmt: User-defined spot risk offset amount. Applicable to Portfolio margin details.maxSpotInUse: Max possible spot risk offset amount. Applicable to Portfolio margin details.spotIsoBal: Spot isolated balance. Applicable to copy trading. Applicable to Spot mode/Futures mode. details.smtSyncEq: Smart sync equity. The default is "0", only applicable to copy trader details.spotCopyTradingEq: Spot smart sync equity. The default is "0", only applicable to copy trader. details.spotBal: Spot balance. The unit is currency, e.g. BTC details.openAvgPx: Spot average cost price. The unit is USD details.accAvgPx: Spot accumulated cost price. The unit is USD details.spotUpl: Spot unrealized profit and loss. The unit is USD details.spotUplRatio: Spot unrealized profit and loss ratio details.totalPnl: Spot accumulated profit and loss. The unit is USD details.totalPnlRatio: Spot accumulated profit and loss ratio details.colRes: Platform level collateral restriction status. 0: The restriction is not enabled. 1: The restriction is not enabled. But the crypto is close to the platform's collateral limit. 2: The restriction is enabled. This crypto can't be used as margin for your new orders. This may result in failed orders. But it will still be included in the account's adjusted equity and doesn't impact margin ratio. details.colBorrAutoConversion: Risk indicator of auto conversion. Divided into multiple levels from 1-5, the larger the number, the more likely the repayment will be triggered. The default will be 0, indicating there is no risk currently. 5 means this user is undergoing auto conversion now, 4 means this user will undergo auto conversion soon whereas 1/2/3 indicates there is a risk for auto conversion. Applicable to Spot mode/Futures mode/Multi-currency margin/Portfolio margin. When the total liability for each crypto set as collateral exceeds a certain percentage of the platform's total limit, the auto-conversion mechanism may be triggered. This may result in the automatic sale of excess collateral crypto if you've set this crypto as collateral and have large borrowings. To lower this risk, consider reducing your use of the crypto as collateral or reducing your liabilities. details.collateralEnabled: true: Collateral enabled; false: Collateral disabled. Applicable to Multi-currency margin details.autoLendStatus: Auto lend status unsupported: auto lend is not supported by this currency off: auto lend is supported but turned off pending: auto lend is turned on but pending matching active: auto lend is turned on and matched details.autoLendMtAmt: Auto lend currency matched amount. Return "0" when autoLendStatus is unsupported/off/pending. Return matched amount when autoLendStatus is active """ return resp @mcp.tool( title="Get account positions", description="Retrieve information on your OKX positions. When the account is in net mode, net positions will be displayed, " "and when the account is in long/short mode, long or short positions will be displayed. " "Return in reverse chronological order using ctime.", ) def account_positions( instType: str = Field("", description="Instrument type: " "`SPOT`: 币币现货/" "`MARGIN`: 币币杠杆/" "`SWAP`: 永续合约/" "`FUTURES`: 交割合约/" "`OPTION`: 期权." "`instId` will be checked against `instType` when both parameters are passed. " "Optional, all by default if not passed"), instId: str = Field("", description="Instrument ID, e.g. `BTC-USDT-SWAP`. Single instrument ID or multiple instrument IDs (no more than 10) separated with comma. " "Optional, all by default if not passed"), posId: str = Field("", description="Single position ID or multiple position IDs (no more than 20) separated with comma. " "There is attribute expiration, the posId and position information will be cleared if it is more than 30 days after the last full close position. " "Optional, all by default if not passed"), ): if str(instType).upper() in ["SPOT"]: instType = "" resp = ACCOUNT.get_positions(instType, instId=instId, posId=posId) or {} if int(resp.get("code", 0)): return resp resp["_response_schema"] = """ mgnMode: Margin mode posSide: Position side. long, pos is positive; short, pos is positive; net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. For MARGIN, pos is always positive, posCcy being base currency means long position, posCcy being quote currency means short position.) pos: Quantity of positions. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred posCcy: Position currency, only applicable to MARGIN positions. availPos: Position that can be closed. Only applicable to MARGIN and OPTION. For MARGIN position, the rest of sz will be SPOT trading after the liability is repaid while closing the position. Please get the available reduce-only amount from `Get maximum available tradable amount` if you want to reduce the amount of SPOT trading as much as possible avgPx: Average open price. Under cross-margin mode, the entry price of expiry futures will update at settlement to the last settlement price, and when the position is opened or increased nonSettleAvgPx: Non-settlement entry price. The non-settlement entry price only reflects the average price at which the position is opened or increased. Applicable to cross FUTURES positions markPx: Latest Mark price upl: Unrealized profit and loss calculated by mark price uplRatio: Unrealized profit and loss ratio calculated by mark price uplLastPx: Unrealized profit and loss calculated by last price. Main usage is showing, actual value is upl uplRatioLastPx: Unrealized profit and loss ratio calculated by last price lever: Leverage. Not applicable to OPTION and positions of cross margin mode under Portfolio margin liqPx: Estimated liquidation price. Not applicable to OPTION imr: Initial margin requirement margin: Margin, can be added or reduced mgnRatio: Maintenance margin ratio mmr: Maintenance margin requirement liab: Liabilities, only applicable to MARGIN liabCcy: Liabilities currency optVal: Option Value, only applicable to OPTION pendingCloseOrdLiabVal: The amount of close orders of isolated margin liability notionalUsd: Notional value of positions in USD adl: Auto-deleveraging (ADL) indicator. Divided into 6 levels, from 0 to 5, the smaller the number, the weaker the adl intensity. Only applicable to FUTURES/SWAP/OPTION ccy: Currency used for margin last: Latest traded price idxPx: Latest underlying index price usdPx: Latest USD price of the ccy on the market, only applicable to FUTURES/SWAP/OPTION bePx: Breakeven price deltaBS: delta: Black-Scholes Greeks in dollars, only applicable to OPTION deltaPA: delta: Greeks in coins, only applicable to OPTION gammaBS: gamma: Black-Scholes Greeks in dollars, only applicable to OPTION gammaPA: gamma: Greeks in coins, only applicable to OPTION thetaBS: theta:Black-Scholes Greeks in dollars, only applicable to OPTION thetaPA: theta:Greeks in coins, only applicable to OPTION vegaBS: vega:Black-Scholes Greeks in dollars, only applicable to OPTION vegaPA: vega:Greeks in coins, only applicable to OPTION spotInUseAmt: Spot in use amount. Applicable to Portfolio margin spotInUseCcy: Spot in use unit, e.g. BTC. Applicable to Portfolio margin clSpotInUseAmt: User-defined spot risk offset amount. Applicable to Portfolio margin maxSpotInUseAmt: Max possible spot risk offset amount. Applicable to Portfolio margin bizRefId: External business id, e.g. experience coupon id bizRefType: External business type realizedPnl: Realized profit and loss. Only applicable to FUTURES/SWAP/OPTION. realizedPnl=pnl+fee+fundingFee+liqPenalty+settledPnl settledPnl: Accumulated settled profit and loss (calculated by settlement price). Only applicable to cross FUTURES pnl: Accumulated pnl of closing order(s) (excluding the fee) fee: Accumulated fee. Negative number represents the user transaction fee charged by the platform.Positive number represents rebate. fundingFee: Accumulated funding fee liqPenalty: Accumulated liquidation penalty. It is negative when there is a value closeOrderAlgo: Close position algo orders attached to the position. This array will have values only after you request 'Place algo order' with closeFraction=1 closeOrderAlgo.slTriggerPx: Stop-loss trigger price closeOrderAlgo.tpTriggerPx: Take-profit trigger price closeOrderAlgo.slTriggerPxType: Stop-loss trigger price type. last: last price index: index price mark: mark price closeOrderAlgo.tpTriggerPxType: Take-profit trigger price type. last: last price index: index price mark: mark price closeOrderAlgo.closeFraction: Fraction of position to be closed when the algo order is triggered """ return resp @mcp.tool( title="Get account position risk", description="Obtain the overall holding risk of the OKX account", ) def account_position_risk( instType: str = Field("", description="Instrument type: " "`MARGIN`: 币币杠杆/" "`SWAP`: 永续合约/" "`FUTURES`: 交割合约/" "`OPTION`: 期权. " "Optional, all by default if not passed"), ): resp = ACCOUNT.get_position_risk(instType) or {} if int(resp.get("code", 0)): return resp resp["_response_schema"] = """ adjEq: Adjusted / Effective equity in USD. Applicable to Multi-currency margin and Portfolio margin balData: Detailed asset information in all currencies balData.ccy: Currency balData.eq: Equity of currency balData.disEq: Discount equity of currency in USD posData: Detailed position information in all currencies posData.mgnMode: Margin mode: cross/isolated posData.instId: Instrument ID, e.g. BTC-USDT-SWAP posData.pos: Quantity of positions contract. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred posData.posSide: Position side: long/short net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. MARGIN: posCcy being base currency means long position, posCcy being quote currency means short position.) posData.posCcy: Position currency, only applicable to MARGIN positions posData.ccy: Currency used for margin posData.notionalCcy: Notional value of positions in coin posData.notionalUsd: Notional value of positions in USD """ return resp

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aahl/mcp-okx'

If you have feedback or need assistance with the MCP directory API, please join our Discord server