Compliance, risk, tax and audit checks for AI trading agents: pre-trade, sizing, wash sales, Reg BI.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free. Creates an API key for this agent (25 free calls a day, then prepaid credits) and attaches it to this MCP session, so the next calls use it automatically. Call this when the anonymous trial runs out. Save the key and add ?key=<key> to the MCP URL (or send Authorization: Bearer <key>) to keep using it in later sessions.
Optional name for the key, such as your agent's name.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 25, 2026.
Free. Creates an API key for this agent (25 free calls a day, then prepaid credits) and attaches it to this MCP session, so the next calls use it automatically. Call this when the anonymous trial runs out. Save the key and add ?key=<key> to the MCP URL (or send Authorization: Bearer <key>) to keep using it in later sessions.
| Argument | Type | Description |
|---|---|---|
| label | string | Optional name for the key, such as your agent's name. |
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Optional name for the key, such as your agent's name."
}
}
}Check an options book (existing or proposed legs) the way a broker's options desk would: covered, cash-secured, spread or naked; margin requirement under FINRA Rule 4210; cash-account limits; required approval level; early-assignment risk around ex-dividend dates; pin risk; auto-exercise of expiring in-the-money longs and the capital it needs; max loss; and net Greeks. Returns approve / approve_with_warnings / reject with reasons. Price: $0.01.
| Argument | Type | Description |
|---|---|---|
| legs* | array | |
| as_of | string | Date of the check (YYYY-MM-DD); defaults to today in New York. |
| policy | object | Overrides: pin_band_pct, max_requirement_pct_of_equity, max_delta_dollars_pct_of_equity, assignment_dte, low_extrinsic. |
| account* | object | |
| underlying* | object |
{
"type": "object",
"required": [
"account",
"underlying",
"legs"
],
"properties": {
"legs": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"side",
"strike",
"expiry",
"quantity"
],
"properties": {
"side": {
"enum": [
"long",
"short"
]
},
"type": {
"enum": [
"call",
"put"
]
},
"vega": {
"type": "number"
},
"delta": {
"type": "number",
"description": "Per share, long-option sign convention."
},
"gamma": {
"type": "number"
},
"theta": {
"type": "number",
"description": "Per share per day."
},
"expiry": {
"type": "string",
"description": "YYYY-MM-DD"
},
"strike": {
"type": "number"
},
"premium": {
"type": "number",
"description": "Current option price per share."
},
"quantity": {
"type": "integer",
"description": "Contracts, positive."
},
"multiplier": {
"type": "number",
"description": "Default 100."
}
}
}
},
"as_of": {
"type": "string",
"description": "Date of the check (YYYY-MM-DD); defaults to today in New York."
},
"policy": {
"type": "object",
"description": "Overrides: pin_band_pct, max_requirement_pct_of_equity, max_delta_dollars_pct_of_equity, assignment_dte, low_extrinsic."
},
"account": {
"type": "object",
"required": [
"type",
"equity"
],
"properties": {
"cash": {
"type": "number",
"description": "Settled cash; cash accounts need it for cash-secured puts."
},
"type": {
"enum": [
"cash",
"margin"
]
},
"equity": {
"type": "number"
},
"shares_held": {
"type": "number",
"description": "Shares of the underlying held long (covers short calls)."
},
"buying_power": {
"type": "number",
"description": "Broker-reported option or stock buying power, if known."
},
"options_level": {
"type": "integer",
"description": "Approved level at the broker (typical scale 1 to 4)."
}
}
},
"underlying": {
"type": "object",
"required": [
"symbol",
"price"
],
"properties": {
"price": {
"type": "number"
},
"symbol": {
"type": "string"
},
"dividend": {
"type": "number",
"description": "Dividend per share for that date."
},
"ex_dividend_date": {
"type": "string",
"description": "Next ex-dividend date (YYYY-MM-DD)."
}
}
}
}
}A periodic advisor review of a portfolio: weights, concentration (HHI and effective number of holdings), sector and asset-class exposure, drift from targets with the trades to rebalance, and, given return history, volatility, Sharpe, Sortino, drawdown, VaR/CVaR and beta. Ends with prioritized findings. Price: $0.05.
| Argument | Type | Description |
|---|---|---|
| cash | number | |
| limits | object | |
| returns | array | Periodic portfolio returns as decimals. |
| targets | object | Target weights by symbol or asset_class, summing to 1. |
| holdings* | array | |
| rebalance_band | number | Absolute drift that triggers a rebalance, default 0.05. |
| risk_free_rate | number | |
| periods_per_year | number | |
| benchmark_returns | array |
Size a position the way a risk manager would: fixed-fractional risk to a stop, volatility targeting (ATR or annualized vol), or fractional Kelly from your edge statistics. Applies a max-position cap and round lots, and explains the binding constraint. Price: $0.005.
| Argument | Type | Description |
|---|---|---|
| atr | number | volatility: average true range in price units. |
| side | any | |
| equity* | number | |
| method* | any | |
| avg_win | number | kelly: average win (any unit, same as avg_loss). |
| avg_loss | number | kelly: average loss as a positive number. |
| lot_size | integer | Round down to this multiple, default 1. |
| risk_pct | number | fixed_fractional: fraction of equity to risk, default 0.01. |
| win_rate | number | kelly: probability of a win (0-1). |
| annual_vol | number |
Run an order past a compliance officer and risk manager before sending it to the broker. Checks buying power, cash-account settlement violations, FINRA intraday margin (post-PDT) or legacy PDT limits, Reg SHO short-sale rules, wash-sale exposure, position concentration, per-trade risk versus stop, liquidity, spread, fat-finger prices, leverage and market hours. Returns approve / approve_with_warnings / reject with reasons and a resized quantity when useful. Price: $0.005.
| Argument | Type | Description |
|---|---|---|
| order* | object | |
| market | object | |
| policy | object | Override risk limits. Defaults: {"max_position_pct":0.2,"max_order_risk_pct":0.02,"max_adv_pct":0.05,"max_spread_pct":0.01,"max_gross_leverage":2,"max_limit_deviation_pct":0.1,"allow_short":true,"allow_extended_hours":false,"require_stop":false} |
| account* | object | Account state before the order. |
{
"type": "object",
"required": [
"account",
"order"
],
"properties": {
"order": {
"type": "object",
"required": [
"symbol",
"side",
"quantity"
],
"properties": {
"side": {
"enum": [
"buy",
"sell",
"sell_short",
"buy_to_cover"
]
},
"symbol": {
"type": "string"
},
"quantity": {
"type": "number"
},
"timestamp": {
"type": "string",
"description": "ISO time the order will be sent; defaults to now."
},
"order_type": {
"enum": [
"market",
"limit",
"stop",
"stop_limit"
]
},
"limit_price": {
"type": "number"
},
"stop_loss_price": {
"type": "number",
"description": "Planned protective stop, used for risk-per-trade."
},
"locate_confirmed": {
"type": "boolean"
}
}
},
"market": {
"type": "object",
"properties": {
"ask": {
"type": "number"
},
"bid": {
"type": "number"
},
"halted": {
"type": "boolean"
},
"last_price": {
"type": "number"
},
"prev_close": {
"type": "number"
},
"avg_daily_volume": {
"type": "number"
}
}
},
"policy": {
"type": "object",
"description": "Override risk limits. Defaults: {\"max_position_pct\":0.2,\"max_order_risk_pct\":0.02,\"max_adv_pct\":0.05,\"max_spread_pct\":0.01,\"max_gross_leverage\":2,\"max_limit_deviation_pct\":0.1,\"allow_short\":true,\"allow_extended_hours\":false,\"require_stop\":false}"
},
"account": {
"type": "object",
"required": [
"type",
"equity"
],
"properties": {
"cash": {
"type": "number"
},
"type": {
"enum": [
"cash",
"margin"
]
},
"equity": {
"type": "number",
"description": "Net liquidation value (USD)."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sector": {
"type": "string"
},
"symbol": {
"type": "string"
},
"avg_cost": {
"type": "number"
},
"quantity": {
"type": "number",
"description": "Negative for short."
},
"market_price": {
"type": "number"
},
"opened_today": {
"type": "boolean"
}
}
}
},
"buying_power": {
"type": "number",
"description": "Broker-reported buying power, if known."
},
"recent_sales": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"symbol": {
"type": "string"
},
"quantity": {
"type": "number"
},
"realized_pnl": {
"type": "number"
}
}
},
"description": "Sales in the last 30 days, for wash-sale checks."
},
"settled_cash": {
"type": "number",
"description": "Cash accounts: settled funds available."
},
"day_trade_regime": {
"enum": [
"intraday_margin",
"legacy_pdt"
],
"description": "Defaults by date; brokers may phase in until 2027-10-20."
},
"day_trades_last_5_days": {
"type": "integer"
}
},
"description": "Account state before the order."
}
}
}Free. The current US trading, margin, settlement and tax rules an agent must follow, with effective dates and sources. Includes changes your training data may predate, such as the June 2026 replacement of the Pattern Day Trader rule. Price: free.
| Argument | Type | Description |
|---|---|---|
| topic | string |
{
"type": "object",
"properties": {
"topic": {
"enum": [
"intraday_margin",
"legacy_pdt",
"reg_t",
"settlement",
"cash_account",
"short_sale",
"wash_sale",
"holding_period",
"options_margin",
"options_cash_account",
"options_exercise",
"reg_bi"
],
"type": "string"
}
}
}An independent performance auditor for a trading strategy or backtest. From a trade list and/or periodic returns it computes win rate, expectancy, profit factor, streaks, Sharpe/Sortino/drawdown, and tests whether the edge is real: t-stat, Probabilistic Sharpe Ratio and the Deflated Sharpe Ratio that corrects for how many variants you tried. Returns a verdict and red flags. Price: $0.1.
| Argument | Type | Description |
|---|---|---|
| trades | array | Closed trades. |
| returns | array | Periodic strategy returns as decimals. |
| n_trials | integer | How many strategy/parameter variants were tested before picking this one. Default 1. |
| starting_equity | number | For risk-of-ruin and drawdown in dollars from trades. |
| periods_per_year | number | |
| trial_sharpe_variance | number | Variance of per-period Sharpe across trials, if known. |
{
"type": "object",
"properties": {
"trades": {
"type": "array",
"items": {
"type": "object",
"properties": {
"pnl": {
"type": "number"
},
"return_pct": {
"type": "number"
}
}
},
"description": "Closed trades."
},
"returns": {
"type": "array",
"items": {
"type": "number"
},
"description": "Periodic strategy returns as decimals."
},
"n_trials": {
"type": "integer",
"default": 1,
"description": "How many strategy/parameter variants were tested before picking this one. Default 1."
},
"starting_equity": {
"type": "number",
"description": "For risk-of-ruin and drawdown in dollars from trades."
},
"periods_per_year": {
"type": "number",
"default": 252
},
"trial_sharpe_variance": {
"type": "number",
"description": "Variance of per-period Sharpe across trials, if known."
}
}
}The compliance review a robo-advisor or advisory agent should run before recommending a portfolio to a person: compares the proposal with the client's age, horizon, risk tolerance, liquidity needs and experience under Reg BI / fiduciary standards, flags complex products, and returns a timestamped, hashed suitability memo for the audit file. Price: $0.03.
| Argument | Type | Description |
|---|---|---|
| client* | object | |
| products | array | Complex products included. |
| allocation* | object | Weights by asset class: equity, bonds, cash, alternatives, crypto... summing to 1. |
| annual_fee_pct | number | All-in annual cost (advisory + fund expenses). |
| max_single_position_pct | number |
{
"type": "object",
"required": [
"client",
"allocation"
],
"properties": {
"client": {
"type": "object",
"properties": {
"age": {
"type": "number"
},
"net_worth": {
"type": "number"
},
"client_ref": {
"type": "string",
"description": "Your internal id; do not send names or account numbers."
},
"experience": {
"enum": [
"none",
"limited",
"good",
"extensive"
]
},
"objectives": {
"type": "array",
"items": {
"type": "string"
}
},
"annual_income": {
"type": "number"
},
"horizon_years": {
"type": "number"
},
"risk_tolerance": {
"description": "conservative | moderate | aggressive, or 1-10"
},
"liquidity_need_pct": {
"type": "number",
"description": "Share of assets needed within 12 months."
}
}
},
"products": {
"type": "array",
"items": {
"enum": [
"leveraged_etf",
"options",
"crypto",
"penny_stock",
"private_placement"
]
},
"description": "Complex products included."
},
"allocation": {
"type": "object",
"description": "Weights by asset class: equity, bonds, cash, alternatives, crypto... summing to 1."
},
"annual_fee_pct": {
"type": "number",
"description": "All-in annual cost (advisory + fund expenses)."
},
"max_single_position_pct": {
"type": "number"
}
}
}Act as the tax advisor for a sale: compares FIFO, LIFO, HIFO and minimum-tax lot selection, splits short- and long-term gains, estimates tax, flags wash sales, and notes lots about to turn long-term. With mode=harvest it scans positions for tax-loss harvesting. Price: $0.02.
| Argument | Type | Description |
|---|---|---|
| lots* | array | |
| mode | any | |
| sell | object | mode=sell |
| as_of | string | mode=harvest: date, default today |
| prices | object | mode=harvest: {SYMBOL: current price} |
| symbol | string | |
| tax_rates | object | |
| min_harvest_loss | number | mode=harvest: ignore losses smaller than this (USD), default 100. |
| recent_transactions | array |
{
"type": "object",
"required": [
"lots"
],
"properties": {
"lots": {
"type": "array",
"items": {
"type": "object",
"properties": {
"lot_id": {
"type": "string"
},
"symbol": {
"type": "string"
},
"quantity": {
"type": "number"
},
"acquired_date": {
"type": "string"
},
"cost_basis_per_share": {
"type": "number"
}
}
}
},
"mode": {
"enum": [
"sell",
"harvest"
],
"default": "sell"
},
"sell": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"price": {
"type": "number"
},
"quantity": {
"type": "number"
}
},
"description": "mode=sell"
},
"as_of": {
"type": "string",
"description": "mode=harvest: date, default today"
},
"prices": {
"type": "object",
"description": "mode=harvest: {SYMBOL: current price}"
},
"symbol": {
"type": "string"
},
"tax_rates": {
"type": "object",
"properties": {
"long_term": {
"type": "number"
},
"short_term": {
"type": "number"
}
}
},
"min_harvest_loss": {
"type": "number",
"description": "mode=harvest: ignore losses smaller than this (USD), default 100."
},
"recent_transactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"side": {
"enum": [
"buy",
"sell"
]
},
"symbol": {
"type": "string"
},
"quantity": {
"type": "number"
}
}
}
}
}
}{
"type": "object",
"required": [
"holdings"
],
"properties": {
"cash": {
"type": "number"
},
"limits": {
"type": "object",
"properties": {
"max_drawdown": {
"type": "number"
},
"max_sector_weight": {
"type": "number"
},
"max_single_weight": {
"type": "number"
}
}
},
"returns": {
"type": "array",
"items": {
"type": "number"
},
"description": "Periodic portfolio returns as decimals."
},
"targets": {
"type": "object",
"description": "Target weights by symbol or asset_class, summing to 1."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"price": {
"type": "number"
},
"value": {
"type": "number"
},
"sector": {
"type": "string"
},
"symbol": {
"type": "string"
},
"quantity": {
"type": "number"
},
"asset_class": {
"type": "string"
}
}
}
},
"rebalance_band": {
"type": "number",
"description": "Absolute drift that triggers a rebalance, default 0.05."
},
"risk_free_rate": {
"type": "number",
"default": 0
},
"periods_per_year": {
"type": "number",
"default": 252
},
"benchmark_returns": {
"type": "array",
"items": {
"type": "number"
}
}
}
}| volatility: annualized volatility of the asset (e.g. 0.35). |
| stop_price | number | fixed_fractional: protective stop. |
| entry_price* | number |
| atr_multiple | number | volatility: stop distance in ATRs, default 2. |
| kelly_fraction | number | kelly: fraction of full Kelly to use, default 0.25. |
| allow_fractional | boolean |
| max_position_pct | number | Cap on position value / equity, default 0.2. |
| target_annual_vol_contribution | number | volatility: target vol contribution as fraction of equity, default 0.02. |
{
"type": "object",
"required": [
"equity",
"entry_price",
"method"
],
"properties": {
"atr": {
"type": "number",
"description": "volatility: average true range in price units."
},
"side": {
"enum": [
"long",
"short"
],
"default": "long"
},
"equity": {
"type": "number"
},
"method": {
"enum": [
"fixed_fractional",
"volatility",
"kelly"
]
},
"avg_win": {
"type": "number",
"description": "kelly: average win (any unit, same as avg_loss)."
},
"avg_loss": {
"type": "number",
"description": "kelly: average loss as a positive number."
},
"lot_size": {
"type": "integer",
"description": "Round down to this multiple, default 1."
},
"risk_pct": {
"type": "number",
"description": "fixed_fractional: fraction of equity to risk, default 0.01."
},
"win_rate": {
"type": "number",
"description": "kelly: probability of a win (0-1)."
},
"annual_vol": {
"type": "number",
"description": "volatility: annualized volatility of the asset (e.g. 0.35)."
},
"stop_price": {
"type": "number",
"description": "fixed_fractional: protective stop."
},
"entry_price": {
"type": "number"
},
"atr_multiple": {
"type": "number",
"description": "volatility: stop distance in ATRs, default 2."
},
"kelly_fraction": {
"type": "number",
"description": "kelly: fraction of full Kelly to use, default 0.25."
},
"allow_fractional": {
"type": "boolean"
},
"max_position_pct": {
"type": "number",
"description": "Cap on position value / equity, default 0.2."
},
"target_annual_vol_contribution": {
"type": "number",
"description": "volatility: target vol contribution as fraction of equity, default 0.02."
}
}
}