Alpaca Trading API integration for Model Context Protocol (MCP)
TradingCalc MCP — Crypto Futures Math is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Deterministic options, forex, risk, on-chain & futures math. 75 tools. Not AI estimates.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http tradingcalc-mcp-crypto-futures-math https://tradingcalc.io/api/mcp
# 2 — ask your agent for something these tools do
# workflow.run_pnl_planning, workflow.run_liquidation_safety, workflow.run_breakeven_planning and 73 more
TradingCalc MCP — Crypto Futures Math costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http tradingcalc-mcp-crypto-futures-math https://tradingcalc.io/api/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
76 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Calculate net PnL, ROE, fees and gross profit/loss for a futures trade. Use when user asks "what's my profit/loss on this trade?" Returns: grossPnl, fees, netPnl, netPnlUsdt, roe (%), maxLossBound (only non-null for an inverse/coin-margined short: the finite ceiling on net coin-denominated loss as price rises without limit, (size/entryPrice)×(1+feeOpenPct) - includes the opening fee, since it surv
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | Trade direction |
| entryPrice | number | yes | Entry price (positive) |
| exitPrice | number | yes | Exit price (positive) |
| size | number | yes | Position size: base asset qty for linear, USD contracts for inverse |
| feeOpenPct | number | no | Opening fee as fraction, e.g. 0.0002 = 0.02% |
| feeClosePct | number | no | Closing fee as fraction |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, pnl/fees are returned in the base coin, not USDT. |
Calculate the liquidation price for an isolated-margin futures position. Use when user asks "where will I get liquidated?" or "how close is my liq price?". Returns: liquidationPrice, distancePct (how far from entry).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entryPrice | number | yes | Entry price (positive) |
| leverage | number | yes | Leverage multiplier, e.g. 10 for 10x |
| mmr | number | no | Maintenance margin rate, default 0.005 (0.5%) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined (e.g. Deribit/Bybit/MEXC BTC-settled perps). |
Calculate the break-even exit price that covers all trading fees: this alone, nothing else. Use when user asks only "what price do I need to just break even?" and nothing more. If the user also gave a stop/target or wants a full trade-safety check, use workflow.run_risk_reward or workflow.run_pre_trade_check instead; both already include this breakeven figure plus more. Returns: breakevenPrice, to
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entryPrice | number | yes | Entry price (positive) |
| sizeBase | number | yes | Position size: base asset qty for linear, USD contracts for inverse |
| feeOpenPct | number | no | Opening fee fraction, default 0.0002 |
| feeClosePct | number | no | Closing fee fraction, default 0.0005 |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, totalFees is returned in the base coin. |
Calculate the correct position size given a maximum risk in USDT and a stop-loss price. Use when user asks "how many coins should I buy?" or "size my position so I risk exactly $X". Returns: positionSize (base), positionUsdt, marginRequired.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entryPrice | number | yes | Entry price |
| stopLoss | number | yes | Stop-loss price |
| riskUsdt | number | yes | Maximum acceptable loss in USDT |
| leverage | number | no | Leverage, default 1 |
| feeOpenPct | number | no | Opening fee fraction, default 0.0002 |
| feeClosePct | number | no | Closing fee fraction, default 0.0005 |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, sizeQuote is USD contracts and margin is returned in the base coin. |
Calculate the total funding cost (or income) for holding a perpetual futures position. Use when user asks "how much funding will I pay holding X days?" or "is funding eating my profit?". Returns: totalFundingUsdt (negative = you pay, positive = you receive), perIntervalUsdt.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| sizeBase | number | yes | Position size in base asset |
| entryPrice | number | yes | Entry price |
| fundingRate | number | yes | Funding rate per 8h period as fraction, e.g. 0.0001 |
| days | number | yes | Number of days to hold |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, sizeBase is USD contracts and cost figures come out in the base coin. |
Calculate the weighted average entry price from multiple buy/sell fills (DCA): the bare number only, no breakeven or per-fill breakdown. Use when user asks only "what's my average entry?" and wants just that figure. For breakeven and a per-level summary too, use workflow.run_dca_entry instead. Returns: averagePrice, totalSize, totalCost.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| symbol | string | yes | Trading pair symbol, e.g. BTCUSDT |
| exchangeCode | string | no | Exchange identifier (optional) |
| input | object | yes | — |
| contractType | string | no | linear = USDT-margined, average is the arithmetic mean (default). inverse = coin-margined, average is the harmonic mean (fill quantity is USD notional). |
Calculate the exact exit price needed to hit a target PnL or ROE percentage. Use when user asks "at what price do I take profit to make $500?" or "where should I set TP for 20% ROE?". Returns: targetExitPrice.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entryPrice | number | yes | Entry price |
| leverage | number | yes | Leverage multiplier |
| sizeBase | number | yes | Position size in base asset |
| targetMode | string | yes | "pnl" = target in USDT, "roe" = target in % |
| targetValue | number | yes | Target value (USDT/coin for pnl mode, or %) |
| feeOpenPct | number | no | Opening fee fraction, default 0.0002 |
| feeClosePct | number | no | Closing fee fraction, default 0.0005 |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, pnl-mode targetValue and outputs are in the base coin. |
Run a scenario analysis: compute PnL for multiple price-change percentages at once. Use when user asks "show me my P&L if BTC moves -10%, -5%, +5%, +10%". Returns: array of { deltaPct, exitPrice, netPnl, roe }.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entryPrice | number | yes | Entry price |
| size | number | yes | Position size in base asset |
| deltasPct | array | yes | List of price change percentages, e.g. [-10, -5, 0, 5, 10]. Must be at least -100 (exactly -100 only for linear contracts; inverse contracts need more than -100) |
| feeOpenPct | number | no | Opening fee fraction |
| feeClosePct | number | no | Closing fee fraction |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. For inverse, size is USD contracts and pnl/fees come out in the base coin. |
Calculate the maximum safe leverage based on account size, max acceptable drawdown, and asset daily volatility. Use when user asks "what's the max leverage I should use on BTC?" or "how much leverage is safe given 3% daily volatility?". Returns: maxLeverage, marginAtRisk.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountSize | number | yes | Total account size in USDT |
| maxDrawdownPct | number | yes | Maximum acceptable drawdown as percentage, e.g. 10 for 10% |
| volatilityPct | number | yes | Expected daily price volatility as percentage, e.g. 3 for 3% |
| mmr | number | no | Maintenance margin rate, default 0.005 (0.5%) |
Calculate the short perpetual futures position size needed to hedge a spot holding. Use when user asks "how much should I short to hedge my BTC?" or "what margin do I need for a 100% hedge?". Returns: hedgeNotional, requiredMargin, estimatedFundingCost.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spotSize | number | yes | Spot position value in USDT |
| hedgeRatio | number | no | Percentage of spot to hedge, e.g. 100 for full hedge, 50 for half. Default 100. |
| leverage | number | no | Leverage on the perp short. Default 1. |
| fundingRatePct | number | no | Current 8h funding rate as percentage, e.g. 0.01. Used for cost estimate. |
Calculate funding rate arbitrage profit: annualized yield, net profit, and breakeven days for a long/short basis trade across two exchanges: the bare numbers only, no plain-English verdict. For the same math plus a profitable/marginal/loss verdict, use workflow.run_carry_trade instead. Use when user asks "is this funding arb worth it?" or "how many days to break even on transfer fees?". Returns: n
| Parameter | Type | Required | Notes |
|---|---|---|---|
| positionSize | number | yes | Position size in USDT |
| longFundingRate | number | yes | Funding rate on long side (% per interval, positive = you pay) |
| shortFundingRate | number | yes | Funding rate on short side (% per interval, positive = you receive) |
| transferFeePct | number | no | One-time transfer/setup fee as percentage, e.g. 0.1 for 0.1% |
| durationDays | number | yes | Holding period in days |
| intervalHours | number | no | Funding interval: 8 (standard) or 1 (Hyperliquid) |
Project capital growth from reinvesting perpetual futures funding income (compounding carry). Use when user asks "how much will I make compounding 0.01% funding for 90 days?" or "what's my APY on this carry position?". Returns: finalCapital, totalEarned, apy, growthTable.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| initialCapital | number | yes | Starting capital in USDT |
| fundingRatePct | number | yes | Funding rate per interval as percentage, e.g. 0.01 for 0.01% |
| intervalHours | number | no | Funding interval: 8 (standard) or 1 (Hyperliquid) |
| durationDays | number | yes | Number of days to project |
| reinvestPct | number | no | Percentage of earnings reinvested each interval. 100 = full compounding, 0 = no reinvestment. Default 100. |
Full pre-trade decision card: orchestrates position sizing, breakeven, liquidation, and funding cost in one call. Use when user describes a full trade setup and asks "should I take this trade?" or "run the numbers on this setup". Provide exchange+symbol to fetch live funding rate automatically. For an R:R-graded verdict on an entry, stop and target, see workflow.run_risk_reward. Returns: positionS
| Parameter | Type | Required | Notes |
|---|---|---|---|
| exchange | string | no | Exchange code, e.g. "binance" or "bybit". Used to fetch live funding rate if funding_rate is omitted. |
| symbol | string | no | Perpetual symbol, e.g. "BTCUSDT". |
| side | string | yes | — |
| entry_price | number | yes | Entry price (positive) |
| stop_loss | number | yes | Stop-loss price (positive) |
| account_balance | number | yes | Total account balance in USDT |
| risk_pct | number | yes | Risk as % of balance, e.g. 1.0 = 1% |
| leverage | number | yes | Leverage multiplier |
| funding_rate | number | no | Funding rate per 8h as decimal, e.g. 0.0001. If omitted, fetched live from exchange. |
| hold_hours | number | no | Expected hold time in hours for overnight shift calc. Default 8. |
| fee_open_pct | number | no | Opening fee fraction, default 0.0002 |
| fee_close_pct | number | no | Closing fee fraction, default 0.0005 |
| mmr | number | no | Maintenance margin rate, default 0.005 |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined (e.g. Bybit BTCUSD). All returned figures (notional, margin, risk_amount, funding_cost_*) stay USD-denominated either way; recommended_size is |
Full risk:reward analysis: takes a trade with entry, stop, AND target (all three). Calculates R:R ratio, position size, liquidation price, breakeven, and P&L at both stop and target. Returns a verdict: strong (3:1+) / good (2:1+) / marginal / poor, specifically graded on the R:R ratio. For a full setup check tied to a live exchange/symbol (including funding cost), see workflow.run_pre_trade_check;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entry_price | number | yes | Entry price |
| stop_loss | number | yes | Stop-loss price |
| take_profit | number | yes | Take-profit price |
| account_balance | number | yes | Account balance in USDT |
| risk_pct | number | yes | Max risk as % of account |
| leverage | number | yes | Leverage multiplier |
| fee_open_pct | number | no | Open fee rate (default 0.0002) |
| fee_close_pct | number | no | Close fee rate (default 0.0005) |
| mmr | number | no | Maintenance margin rate (default 0.005) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined (e.g. Bybit BTCUSD). position_size/notional are USD notional (contracts) for inverse; pnl_at_stop/pnl_at_target come back denominated in the b |
Aggregates risk across multiple open positions in one call: total notional, total P&L, total margin in use, margin usage as a % of account balance (if given), and which single position sits closest to liquidation. Each position is computed through the same canonical PnL/liquidation math as the single-position tools, then rolled up. Linear (USDT-margined) positions sum into one USD total; inverse (
| Parameter | Type | Required | Notes |
|---|---|---|---|
| positions | array | yes | — |
| account_balance | number | no | Optional account balance in USD, used to compute margin_usage_pct: linear margin plus every inverse position's own margin marked to market at its mark_price, all as one USD total |
DCA entry planner: weighted average entry price, breakeven, and per-level contribution from multiple fill prices and sizes. Compared with primitive.average_entry, this one adds output for the case where breakeven or the per-level breakdown is also wanted, not just the bare average. Use when user bought at several prices and asks "what's my average entry?" or "where is my DCA breakeven?". Returns:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entries | array | yes | — |
| fee_open_pct | number | no | Open fee rate (default 0.0002) |
| fee_close_pct | number | no | Close fee rate (default 0.0005) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. Each fill's size is USD notional (contracts) for inverse; averageEntry is then the harmonic mean of fill prices, not the arithmetic mean. |
Should-I-average-down check: for an already-open position, compares adding more at a worse price against the always-available alternative of buying the same final total size fresh at today's price. Returns the new blended average entry, liquidation price and breakeven (before vs. after), margin_added (the actual cash/margin required for the add at this leverage, not the full notional), and three r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| existing_entry_price | number | yes | Entry price of the position already held |
| existing_size | number | yes | Size already held: base-asset quantity for linear, USD notional (contracts) for inverse |
| add_price | number | yes | Proposed price to add at - also treated as today's current price for the fresh-entry comparison |
| add_size | number | yes | Additional size being considered, same unit convention as existing_size |
| stop_loss | number | yes | Stop-loss price (must be below add_price for a long, above it for a short - the position should already be closed otherwise) |
| leverage | number | yes | Leverage multiplier |
| fee_open_pct | number | no | Open fee rate (default 0.0002) |
| fee_close_pct | number | no | Close fee rate (default 0.0005) |
| mmr | number | no | Maintenance margin rate (default 0.005) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. Risk figures come back denominated in the base coin for inverse. |
Scale-out planner: P&L, ROI, and cumulative P&L for each partial exit level. Use when user wants to take profit at multiple targets: "close 30% at $90k, 30% at $95k, 40% at $100k, what's my total P&L?". Returns: per-level pnl, weightedAvgExitPrice, totalRoi.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entry_price | number | yes | Entry price |
| total_size | number | yes | Total position size in base currency |
| exits | array | yes | — |
| fee_open_pct | number | no | Open fee rate (default 0.0002) |
| fee_close_pct | number | no | Close fee rate (default 0.0005) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. total_size is USD notional (contracts) for inverse, and per-level pnl comes back denominated in the base coin. |
Delta-neutral carry trade (funding arbitrage) analysis, with a profitable/marginal/loss verdict on top of the same math primitive.funding_arb uses. Compared with primitive.funding_arb, this one adds output for the case where a plain-English verdict is wanted, not just the raw numbers. Use when user asks "is this carry trade worth it?": long on exchange A, short on exchange B, collect the funding r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| notional | number | yes | Position notional in USDT |
| funding_rate_long | number | yes | Funding rate on long exchange per interval (decimal) |
| funding_rate_short | number | yes | Funding rate on short exchange per interval (decimal) |
| transfer_fee_pct | number | no | One-way transfer fee % (default 0.1) |
| hold_days | number | yes | Hold duration in days |
| interval_hours | number | no | Funding interval: 1 or 8 hours (default 8) |
Price move needed to cover funding cost + fees over a holding period. Use when user asks "how much does BTC need to move for me to profit after funding?" or "is funding killing my edge on this trade?". Returns: breakevenWithFunding, breakevenWithoutFunding, requiredMovePct.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| side | string | yes | — |
| entry_price | number | yes | Entry price |
| size | number | yes | Position size in base currency |
| funding_rate | number | yes | Funding rate per 8h period (decimal, e.g. 0.0001) |
| hold_hours | number | yes | Hold duration in hours |
| fee_open_pct | number | no | Open fee rate (default 0.0002) |
| fee_close_pct | number | no | Close fee rate (default 0.0005) |
| contractType | string | no | linear = USDT-margined (default), inverse = coin-margined. size is USD notional (contracts) for inverse; notional/funding_cost/fee_total/total_carry_cost come back denominated in the base coin. |
Pump.fun-style bonding curve calculator: exact tokens received for a buy, price impact, and graduation progress. Pure constant-product math (Uniswap V2 style) using pump.fun's official virtual-reserve constants: no live lookup needed, works for any token still on the curve (not yet graduated to a real AMM pool). Use when user asks "how many tokens do I get buying X SOL on this curve?" or "will thi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| solRaisedSoFar | number | yes | SOL already raised on the curve so far (0 for a brand-new token) |
| solToSpend | number | yes | SOL amount for this buy |
Impermanent loss for a liquidity-pool position: compares providing liquidity against simply holding the same tokens, at a manually-supplied entry and current price. Two modes: full_range (standard 50/50 constant-product pool, the textbook 2*sqrt(k)/(1+k)-1 closed form) or concentrated (a Uniswap-V3-style position confined to [lowerPrice, upperPrice] - IL is always worse than full_range for the sam
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | no | Default full_range. |
| entryPrice | number | yes | Base token's price in quote-token terms when liquidity was deposited |
| currentPrice | number | yes | Base token's current price in quote-token terms |
| lowerPrice | number | no | Range lower bound - required for concentrated mode, must be below entryPrice |
| upperPrice | number | no | Range upper bound - required for concentrated mode, must be above entryPrice |
| depositValueUsd | number | no | Optional: USD value deposited at entry, to also report dollar-denominated lpValueUsd/hodlValueUsd/lossUsd |
| feesEarnedUsd | number | no | Optional trading fees earned so far in USD (default 0), folded into netResultUsd alongside lossUsd |
Payoff, P&L, and breakeven price for a single-leg Deribit BTC/ETH option (long or short call/put) at a given scenario price at expiry. Deribit BTC/ETH options are coin-settled: premium, P&L, and the max profit/loss caps come back denominated in the base coin (BTC/ETH), not USD; a scenarioPnlUsd convenience field converts the coin P&L back to USD at the scenario price. Coin settlement means a long
| Parameter | Type | Required | Notes |
|---|---|---|---|
| currency | string | no | Underlying coin. Default BTC. |
| optionType | string | yes | — |
| position | string | yes | — |
| strike | number | yes | Strike price in USD |
| premiumCoin | number | yes | Premium paid/received per contract, in the base coin (matches Deribit's own quoted price, e.g. 0.02 BTC); must be < 1 for a call |
| quantity | number | yes | Number of contracts (Deribit BTC/ETH options have contract_size 1.0, so this is coin-denominated size) |
| scenarioPrice | number | yes | Underlying price in USD to evaluate the payoff at |
Theoretical European option price and Greeks (delta, gamma, theta, vega, rho) from Black-Scholes, given manual spot/strike/days-to-expiry/volatility/risk-free-rate inputs: no live data fetch. The live variant is workflow.run_black_scholes_live, which applies when checking a real Deribit BTC/ETH instrument, since that variant also reports how far the instrument's actual quoted price sits from what
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spot | number | yes | Underlying spot price, USD |
| strike | number | yes | Strike price, USD |
| daysToExpiry | number | yes | Calendar days until expiry (can be fractional) |
| volatilityPct | number | yes | Annualized implied volatility in percentage points, e.g. 60 for 60% |
| riskFreeRatePct | number | no | Risk-free rate in percentage points. Default 0: standard crypto-options convention. |
Payoff, P&L, and both breakeven prices for a long or short straddle/strangle (a call + a put on the same Deribit BTC/ETH underlying, both legs the same direction) at a scenario price. A straddle is callStrike === putStrike; any callStrike > putStrike makes it a strangle, same formula either way. Coin-settled like workflow.run_options_payoff: a long position's max loss is the flat total premium pai
| Parameter | Type | Required | Notes |
|---|---|---|---|
| currency | string | no | Underlying coin. Default BTC. |
| position | string | yes | — |
| callStrike | number | yes | Call leg strike, USD. Equal to putStrike for a straddle, higher for a strangle. |
| putStrike | number | yes | Put leg strike, USD. Must be <= callStrike. |
| callPremiumCoin | number | yes | Call leg premium per contract, in the base coin (e.g. 0.02 BTC) |
| putPremiumCoin | number | yes | Put leg premium per contract, in the base coin |
| quantity | number | yes | Number of straddle/strangle units (both legs sized equally) |
| scenarioPrice | number | yes | Underlying price in USD to evaluate the payoff at |
Covered call (long the coin + short a call against it, for yield) or protective put (long the coin + long a put, for downside insurance) on a Deribit BTC/ETH position. Returns the standard annualized-yield metric (premium ÷ 1 coin, annualized by 365/daysToExpiry) up front: that number doesn't depend on any price scenario. Also returns the USD value of the combined position at a given scenario pric
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strategy | string | yes | — |
| currency | string | no | Underlying coin. Default BTC. |
| spotEntry | number | yes | Price you acquired/value the underlying coin at, USD; used for the covered-call breakeven vs. cost basis |
| strike | number | yes | Option strike, USD |
| premiumCoin | number | yes | Premium received (covered_call) or paid (protective_put) per contract, in the base coin |
| daysToExpiry | number | yes | Calendar days until expiry; used to annualize the yield/cost |
| quantity | number | yes | Coin units held / contracts (1:1 covered) |
| scenarioPrice | number | yes | Underlying price in USD to evaluate the combined position's value at |
Payoff, breakeven(s), and max profit/loss for a Deribit BTC/ETH vertical spread (2 legs, same option type, opposite direction, e.g. a bull call spread) or an iron condor/butterfly (4 legs: 2 calls + 2 puts) at a scenario price. Coin-settled, and the max profit/loss are genuinely NOT the flat, textbook USD-settled values: because each leg's own payoff is divided by the settlement price, (1) a debit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| currency | string | no | Underlying coin. Default BTC. |
| legs | array | yes | Exactly 2 legs (same option type, opposite position - a vertical spread) or 4 legs (2 calls + 2 puts - an iron condor/butterfly). Each leg: { optionType: call|put, position: long|short, strike: number |
| quantity | number | yes | Number of spread/condor units |
| scenarioPrice | number | yes | Underlying price in USD to evaluate the payoff at |
Solves for the volatility that makes Black-Scholes reproduce an observed option price (Newton-Raphson with a bisection fallback for cases where vega is too flat to converge, e.g. deep ITM/OTM or very short-dated). Checks the price against its no-arbitrage bounds first and refuses to solve (converged: false + error) rather than return a garbage number when the price is impossible for the given spot
| Parameter | Type | Required | Notes |
|---|---|---|---|
| optionType | string | yes | — |
| spot | number | yes | Underlying spot price, USD |
| strike | number | yes | Strike price, USD |
| daysToExpiry | number | yes | Calendar days until expiry (can be fractional) |
| riskFreeRatePct | number | no | Risk-free rate in percentage points. Default 0: standard crypto-options convention. |
| targetPriceUsd | number | yes | The observed option price, USD, to solve the implied volatility from |
Theoretical fair value for a time-windowed crypto up/down contract (the shape ADI Predictstreet and Kalshi-style daily crypto markets use: pays out based on whether the settlement price finishes at/above or below a reference price pinned at window open, by a fixed close time): a cash-or-nothing digital option, priced with the standard N(d2) formula. Use this when there's no live market price to re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| currentPrice | number | yes | Current spot price of the coin, in USD. |
| referencePrice | number | yes | The reference/pinned price the contract resolves against (the window's open price, or a stated strike). |
| minutesToClose | number | yes | Minutes remaining until the window closes/settles. |
| volatilityPct | number | yes | Annualized volatility, in percentage points (e.g. 50 for 50%). Required; no live source for this on these contracts. |
| riskFreeRatePct | number | no | Risk-free rate in percentage points. Default 0: negligible for these short windows. |
Value of 1 pip for a given forex pair and position size, in that pair's own quote currency (e.g. EUR/USD's pip value comes back in USD, USD/JPY's in JPY): no live FX rate needed, since a pair's pip value is naturally denominated in its own quote currency. Pip size is 0.0001 for non-JPY pairs, 0.01 for JPY-quoted pairs, a universal market convention verified against real broker documentation, not b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units (1 standard lot = 100,000, mini = 10,000, micro = 1,000, nano = 100) |
Free margin and margin level % from account equity and used margin: equity/usedMargin*100, the same stop-out proximity metric every forex platform shows. Returns null (not Infinity) when usedMargin is 0, meaning no open position. Use when user asks "how close am I to a margin call?" or "what's my free margin?". Returns: freeMargin, marginLevelPct.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| equity | number | yes | Account equity (balance + floating P&L) |
| usedMargin | number | yes | Margin currently locked by open positions. 0 if none. |
Breakeven price for a forex position accounting for spread and round-trip commission, in pips and in price. Commission is quoted per standard lot (100,000 units) and expressed in the pair's own quote currency; because both commission and pip value scale with lot size, the commission-in-pips figure is independent of position size by construction. Use when user asks "where's my true breakeven after
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| side | string | yes | — |
| entryPrice | number | yes | — |
| spreadPips | number | yes | Spread at entry, in pips |
| commissionPerLotRoundTrip | number | no | Round-trip commission per standard lot, in the pair's own quote currency. Default 0 (pure-spread broker model). |
Profit or loss for a closed or hypothetical forex trade, in pips and in the pair's own quote currency, long or short. Use when user asks "what did I make/lose on this trade?" or "what would X pips be worth on Y lots?". Returns: pips (signed, positive favors the position taken), pnlQuote.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| side | string | yes | — |
| entryPrice | number | yes | — |
| exitPrice | number | yes | — |
| units | number | yes | Position size in base-currency units |
Risk and reward distance in pips from entry/stop/target, and the resulting ratio (reward/risk): a raw number, not a verdict. ratio is null when the stop sits exactly at entry (no risk distance), and also when validSetup is false (stop/target on the wrong side of entry for the given side, e.g. a long with its stop above entry) - check validSetup before trusting the ratio. Use when user asks "what's
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| side | string | yes | — |
| entryPrice | number | yes | — |
| stopPrice | number | yes | — |
| targetPrice | number | yes | — |
PnL across a range of hypothetical price moves (in pips, signed by actual price direction, not pre-adjusted for side), for a single forex position size, long or short. Use when user asks "what if price moves X pips in either direction?". Returns: scenarios[] (deltaPips, exitPrice, pnlQuote).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| side | string | yes | — |
| entryPrice | number | yes | — |
| units | number | yes | Position size in base-currency units |
| deltasPips | array | yes | Hypothetical price moves in pips, e.g. [-50, 0, 50] |
Size-weighted average entry price across multiple forex fills: plain arithmetic mean, since forex has no coin-margined analog requiring the harmonic mean the crypto average_entry tool uses for inverse contracts. Use when user asks "what's my average entry after these fills?". Returns: totalUnits, totalCost, avgEntry.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| fills | array | yes | Fills to average, each with a price and a size in base-currency units |
Notional and margin required for a forex position, in the pair's own quote currency: no live FX rate needed. Never built for Phase 1 of this domain since a margin figure has no natural currency-neutral form the way pip value does. The live variant is workflow.run_forex_margin_required_live, which applies when the account currency differs from the pair's quote currency. Use when user asks "how much
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units |
| price | number | yes | Entry or current price |
| leverage | number | yes | Leverage multiplier, e.g. 50 for 50:1 |
Converts an amount between currencies using a manually supplied rate: no live data fetch. The live variant is workflow.run_forex_currency_converter_live, which has the rate fetched automatically. Use when user already knows the exact rate they want applied. Returns: converted.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount | number | yes | Amount in the source currency |
| rate | number | yes | Exchange rate to apply (1 unit of source currency = rate units of target currency) |
Total swap/rollover cost (or credit) for holding a forex position overnight, in the pair's own quote currency: no live FX rate needed. Swap rates are broker-set with no free live feed available, so swapPerLotPerNight is always a manual input (quoted per standard lot, matching how commission is quoted in workflow.run_forex_breakeven), not fetched. Negative = cost (you pay), positive = credit (you r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units |
| swapPerLotPerNight | number | yes | Swap rate per standard lot (100,000 units) per night, in the pair's quote currency. Negative = cost, positive = credit. Broker-set: get this from the user's broker platform, there is no live source fo |
| nights | integer | yes | Number of nights the position is held |
Correlation coefficient and minimum-variance hedge ratio between two price series of matching length, computed on daily % returns (not raw price levels, which would give spuriously high correlation between two unrelated but both-trending series). hedgeRatio follows Hull's standard futures-hedging formula: cov(returns1,returns2)/var(returns2), "how many units of series 2 per unit of series 1 minimi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| rates1 | array | yes | First price series, chronological order, one price per date |
| rates2 | array | yes | Second price series, chronological order, same length and same dates as rates1 |
Parametric Value at Risk (VaR) and Conditional VaR / Expected Shortfall (CVaR), the variance-covariance method (assumes normally distributed returns), plus Modified VaR (Cornish-Fisher skew/kurtosis correction, Boudt/Peterson/Croux) when a return series is supplied. Supply either a return series or a mean/stdev pair directly, at a confidence level. Output is at the same periodicity as the input (n
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | no | Return series (e.g. daily % returns as decimals). Provide this OR mean+stdev, not both. |
| mean | number | no | Mean return, if not supplying returns[] directly |
| stdev | number | no | Standard deviation of returns, if not supplying returns[] directly |
| confidence | number | no | Confidence level, 0-1 exclusive (default 0.95) |
Sharpe ratio with the Lo (2002) serial-correlation-aware annualization correction (the naive sqrt(periods_per_year) scaling overstates or understates the true annualized Sharpe when returns are autocorrelated), plus the Probabilistic Sharpe Ratio (Bailey & Lopez de Prado): the probability the true Sharpe exceeds a benchmark, adjusted for the sample's skewness/kurtosis and length, not just its poin
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | Return series, one value per period |
| periods_per_year | number | no | Periods per year for annualization (default 365, crypto convention - trades every day) |
| benchmark_sharpe | number | no | Benchmark Sharpe ratio for the PSR test, same periodicity as returns (default 0) |
Hurst exponent via rescaled-range (R/S) analysis: is this return/price series trending/persistent (H>0.5, a move tends to be followed by a move in the same direction), mean-reverting/anti-persistent (H<0.5), or consistent with a random walk (H~0.5)? Use when user asks "is this asset trending or mean-reverting?" or "does this series show long-range dependence?". Takes a return series, not raw price
| Parameter | Type | Required | Notes |
|---|---|---|---|
| values | array | yes | Return series (not raw price levels) |
| min_window | number | no | Smallest R/S analysis window size (default 8) |
Engle-Granger two-step cointegration test for a pair of price series: do they share a long-run equilibrium relationship (their spread is stationary/mean-reverting)? The standard pairs-trading signal test. Returns the cointegrating regression's hedge ratio (beta) and an ADF t-statistic on the residuals, compared against 1%/5%/10% critical values. Use when user asks "are these two assets cointegrate
| Parameter | Type | Required | Notes |
|---|---|---|---|
| y | array | yes | First price series (the dependent variable in the cointegrating regression) |
| x | array | yes | Second price series, same length and dates as y |
Core risk/return tearsheet from a single return series: annualized return (compounded, not linear) and volatility, Sharpe (plain + Lo 2002-corrected + Pezier-White skew/kurtosis-adjusted), Sortino, max drawdown, Calmar ratio, the drawdown-ratio cluster (Ulcer Index/Martin ratio, Pain Index/Pain ratio, Burke ratio + modified), Omega-Sharpe ratio, Upside Potential Ratio, skewness, kurtosis, Probabil
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | Return series, one value per period |
| periods_per_year | number | no | Periods per year for annualization (default 365) |
| mar | number | no | Minimum acceptable return for the Sortino ratio, same periodicity as returns (default 0) |
| benchmark_sharpe | number | no | Benchmark Sharpe ratio for the PSR figure, same periodicity as returns (default 0) |
GARCH(1,1) volatility model, fit by maximum likelihood on a return series: estimates omega/alpha/beta (the variance-persistence parameters) and forecasts next-period volatility. Use when user asks "what's my GARCH volatility forecast?" or "how persistent is volatility in this return series?". This is a backward-looking statistical fit, not a market prediction guarantee. Returns: mu, omega, alpha,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | Return series, one value per period, at least 50 values (GARCH needs real sample depth to identify persistence) |
Risk-parity (equal or custom risk contribution) portfolio weights for N assets: given a covariance matrix (or N return series to compute one from), finds long-only weights where each asset contributes its target share of total portfolio risk. Use when user asks "what weights give each asset equal risk contribution?" or "how do I risk-parity-weight this portfolio?". A portfolio-construction calcula
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | no | One return series per asset (2+ assets, all series the same length). Provide this OR covariance, not both. |
| covariance | array | no | Direct NxN covariance matrix, if not supplying returns[][] directly. |
| risk_budgets | array | no | Target risk share per asset, one per asset (need not sum to 1, normalized internally). Default: equal (1/N each). |
Deflated Sharpe Ratio (Bailey & Lopez de Prado): given how many strategy variants you tried (and how correlated they are), what Sharpe ratio would the *best of N* clear by luck alone, and does your actual strategy still clear that higher bar? Use when user asks "is my backtested Sharpe ratio real, or did I get lucky trying many variants?" or "how many independent trials does this really represent?
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | The candidate strategy's own return series |
| trial_sharpes | array | no | Observed Sharpe ratios of all N trials tried, if tracked. Takes priority over n_trials if both are given. |
| n_trials | number | no | Number of strategy variants tried, if trial_sharpes were not tracked individually |
| avg_correlation | number | no | Average pairwise correlation between trials, 0-1 (default 0 = independent). Only used with n_trials; lowers the effective trial count via Kish's design effect. |
Kelly growth-security frontier (MacLean, Ziemba & Blazenko 1992): for a strategy compounding at a fraction lambda of full Kelly, the probability wealth ever falls to a fraction alpha of its starting value is P = alpha^(2/lambda-1). Provide either lambda_fraction (to compute that probability) or max_probability (to solve for the largest lambda that keeps the ruin probability at or below it). Use wh
| Parameter | Type | Required | Notes |
|---|---|---|---|
| alpha | number | yes | Fraction of starting capital, 0-1 exclusive (e.g. 0.5 = "ever falls to half my starting bankroll") |
| lambda_fraction | number | no | Fraction of full Kelly being bet (1 = full Kelly, 0.5 = half Kelly). Provide this OR max_probability, not both. |
| max_probability | number | no | Target ceiling on the ruin probability, 0-1 exclusive. Provide this to solve for the safe lambda_fraction instead of supplying it directly. |
Return "unsmoothing" for infrequently-marked/illiquid or appraisal-based series: Getmansky-Lo-Makarov (2004) MA(2) smoothing index plus Blundell-Ward (1987) AR(1) volatility inflation, two complementary models answering "this return series looks smoother than it really is; what's the true volatility?". Use when user asks "how much is appraisal smoothing understating my real volatility?" or "what's
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | The observed (possibly smoothed) return series, at least 20 values |
Extreme Value Theory tail risk (Peaks-Over-Threshold): fits a Generalized Pareto Distribution to the losses beyond a high threshold via Grimshaw's (1993) profile-likelihood MLE, then extrapolates VaR/Expected Shortfall at the requested confidence, without assuming a normal distribution. Use when user asks "what's my tail VaR without assuming normality?" or "how fat is my loss tail, really?". Compl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| returns | array | yes | Return series, one value per period, at least 100 values (POT needs real sample depth in the tail) |
| threshold_percentile | number | no | Percentile (0-100 exclusive) of the loss distribution used as the POT threshold u. Default 90. |
| confidence | number | no | VaR/ES confidence level, 0-1 exclusive. Default 0.99. Must satisfy 1-confidence < the threshold's own exceedance rate. |
Order-book "walk the book" impact/capacity: given order-book levels (price, size in base-asset units) and EITHER a target notional or an impact budget in bps, computes VWAP and price impact for that size, or (via bisection) the largest notional that stays inside the impact budget. Use when user asks "what's my price impact if I trade $X" or "how much can I trade before impact exceeds Y bps". side=
| Parameter | Type | Required | Notes |
|---|---|---|---|
| bids | array | yes | Bid levels as [price, size_base] pairs, any order |
| asks | array | yes | Ask levels as [price, size_base] pairs, any order |
| side | string | yes | "buy" walks the asks, "sell" walks the bids |
| notional_usd | number | no | Target notional to walk the book for. Provide this OR impact_budget_bps, not both. |
| impact_budget_bps | number | no | Max acceptable impact in bps; solves for the largest notional within it. Provide this OR notional_usd, not both. |
Market Profile open analysis: where and how price opened vs the prior session value area. Use for "how did BTC open today?" / "what does the open imply for the session?". Returns: open_location, open_type (OD/OTD/ORR/OAIR) with description/implication, confidence, key_levels (VAH/VAL/VPOC/IB), tails (session-high/low rejection tails and single prints), scenario_framing (bullish/bearish/neutral), i
| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrument | string | yes | Symbol, e.g. BTCUSDT |
| venue | string | yes | Exchange to fetch candles from when candles[] not supplied |
| session_date | string | yes | Session date YYYY-MM-DD (UTC) |
| timeframe | string | no | Candle timeframe (default 15m) |
| value_area_rule | number | no | Value-area fraction 0.5–0.9 (default 0.70) |
| candles | array | no | Optional OHLCV for the session; omit to fetch from venue (reproducible + 0 COGS when supplied) |
| prev_candles | array | no | Optional OHLCV for the previous session |
Market Profile day-type classifier: trend / balance / neutral_trend / normal / normal_var, from TPO, initial balance, range extension and value migration. Use for "is this a trend day or a balance day?". Returns: structure (the day-type label), description, bias, key_signals, key_levels (VAH/VAL/VPOC/IB/session high-low), tails (session-high/low rejection tails and single prints), scenario_framing
| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrument | string | yes | Symbol, e.g. BTCUSDT |
| venue | string | yes | Exchange to fetch candles from when candles[] not supplied |
| session_date | string | yes | Session date YYYY-MM-DD (UTC) |
| timeframe | string | no | Candle timeframe (default 15m) |
| value_area_rule | number | no | Value-area fraction 0.5–0.9 (default 0.70) |
| candles | array | no | Optional OHLCV for the session; omit to fetch from venue (reproducible + 0 COGS when supplied) |
| prev_candles | array | no | Optional OHLCV for the previous session |
Market Profile value-area migration across sessions: is value migrating up, down, or overlapping (directional conviction vs balance)? Use for "is value moving higher day over day?". Returns: state, direction, migration_pct, key_levels (current vs. prior session VAH/VAL/VPOC), tails (session-high/low rejection tails and single prints), scenario_framing, invalidation level.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrument | string | yes | Symbol, e.g. BTCUSDT |
| venue | string | yes | Exchange to fetch candles from when candles[] not supplied |
| session_date | string | yes | Session date YYYY-MM-DD (UTC) |
| timeframe | string | no | Candle timeframe (default 15m) |
| value_area_rule | number | no | Value-area fraction 0.5–0.9 (default 0.70) |
| candles | array | no | Optional OHLCV for the session; omit to fetch from venue (reproducible + 0 COGS when supplied) |
| prev_candles | array | no | Optional OHLCV for the previous session |
| lookback_sessions | number | no | Sessions to compare, 1–5 (default 1) |
Market Profile breakout acceptance: did price accept (hold) beyond the value area / range, or reject back inside (fakeout)? Optional buy/sell delta. Use for "did the break above VAH get accepted?". Returns: state, accepted (boolean), direction, confidence, key_levels (VAH/VAL/VPOC), scenario_framing, invalidation level.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrument | string | yes | Symbol, e.g. BTCUSDT |
| venue | string | yes | Exchange to fetch candles from when candles[] not supplied |
| session_date | string | yes | Session date YYYY-MM-DD (UTC) |
| timeframe | string | no | Candle timeframe (default 15m) |
| value_area_rule | number | no | Value-area fraction 0.5–0.9 (default 0.70) |
| candles | array | no | Optional OHLCV for the session; omit to fetch from venue (reproducible + 0 COGS when supplied) |
| prev_candles | array | no | Optional OHLCV for the previous session |
| include_delta | boolean | no | Include buy/sell delta analysis (default true) |
Token rug-pull MECHANISM check for a Solana token (mint address): can the deployer still mint supply, freeze wallets, pull liquidity, swap metadata, or has RugCheck flagged a known scam pattern (e.g. copycat token)? Fetches live facts from RugCheck (GoPlus as fallback) and returns a transparently-weighted composite score. Deliberately does NOT score holder concentration or "whale dump" impact: tho
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mint | string | yes | Solana token mint address (base58) |
Live price-impact quote for a Solana token swap: routed through Jupiter (the same aggregator real swaps use) across every pool it knows about, not a single-pool estimate. Use when user asks "how much slippage will I eat swapping X tokens?" or "what will I actually get if I sell N tokens?". Returns: outputAmount, priceImpactPct, effectivePrice, marketPriceUsd, liquidityUsd, routable (false + error
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mint | string | yes | Solana mint address of the token being sold (base58) |
| amount | number | yes | Amount of the token to swap, in human units (not raw base units) |
| outputAsset | string | no | Asset to receive. Default USDC. |
Compares two tokens' live market caps (Solana or any of 5 EVM chains; the two tokens can be on different chains) and projects what an investment would be worth if the first token's market cap matched the second's. Narrative-agnostic ("if X reaches Y's market cap"): works for any token pair, not tied to one hype cycle or one chain. A snapshot ratio, not a forecast: assumes fixed supply on both side
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tokenChain | string | no | Chain of the token you hold. Default solana. |
| tokenMint | string | yes | Address of the token you hold or are evaluating (base58 for Solana, 0x... for EVM chains) |
| compareToChain | string | no | Chain of the comparison token. Default solana. Can differ from tokenChain. |
| compareToMint | string | yes | Address of the token whose market cap to compare against |
| investmentUsd | number | yes | Investment amount in USD |
Live variant of workflow.run_impermanent_loss: fetches each token's current live USD price (Solana or any of 5 EVM chains) and derives currentPrice as their ratio, instead of it being supplied manually. entryPrice stays a manual, historical input (a fact the caller must supply, not something a live quote should overwrite), same convention as every other live-capable tool in this product. Use when
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | no | Default full_range. |
| entryPrice | number | yes | Base token's price in quote-token terms when liquidity was deposited (manual - a historical fact) |
| lowerPrice | number | no | Range lower bound - required for concentrated mode |
| upperPrice | number | no | Range upper bound - required for concentrated mode |
| depositValueUsd | number | no | Optional: USD value deposited at entry |
| feesEarnedUsd | number | no | Optional trading fees earned so far in USD (default 0) |
| baseChain | string | no | Chain of the base (volatile) token. Default solana. |
| baseMint | string | yes | Address of the base token |
| quoteChain | string | no | Chain of the quote token. Default solana. |
| quoteMint | string | yes | Address of the quote token |
Checks a wallet address (Solana or any of 5 EVM chains) against independent flag databases: GoPlus (malicious-address categories, all chains), Webacy (address analysis + sanctions check, all chains), and ScamSniffer (public phishing/drainer blacklist, EVM chains only), and returns each source's own facts separately, never merged into one invented score. Use when user asks "is this wallet address f
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain of the wallet address. Default solana. |
| walletAddress | string | yes | Wallet address (base58 for Solana, 0x... for EVM chains) |
Converts a probability into decimal odds, American odds, and breakeven win rate: either from a manually supplied probability, or fetched live from Kalshi, Polymarket, ADI Predictstreet, Limitless, or Myriad (five independent crypto-price prediction market venues, all public keyless market data). When a Kalshi, Polymarket, Limitless, or Myriad source is supplied, also returns the vig (the exchange'
| Parameter | Type | Required | Notes |
|---|---|---|---|
| probability | number | no | Probability as a decimal 0-1 (e.g. 0.35). Use this OR one of the live sources below, not both. |
| kalshiTicker | string | no | A Kalshi market ticker (e.g. KXBTCY-27JAN0100-T149999.99) to fetch a live price from. |
| polymarketSlug | string | no | A Polymarket market slug, from the market URL (e.g. will-bitcoin-reach-100k-in-september-2026), to fetch a live price from. |
| adiSymbol | string | no | An ADI Predictstreet market symbol (e.g. BTC1D-20260920T0000). Currently always returns available:false; these contracts have no live trading volume yet. |
| limitlessSlug | string | no | A Limitless Exchange market slug, from the market URL (e.g. btc-up-or-down-5-min-1790249100), to fetch a live price from. On-chain (Base), mostly short-duration (5min/15min/daily) crypto up/down contr |
| myriadSlug | string | no | A Myriad Markets market slug, from the market URL (e.g. eth-at-three-digits-when-bitcoin-goes-below-50k), to fetch a live price from. On-chain (Abstract L2); not every market has a Yes/No outcome, som |
Reads the same real-world bet's live price from 2-5 prediction-market venues at once (Kalshi, Polymarket, ADI Predictstreet, Limitless, Myriad) and reports the spread between the cheapest and most expensive. The caller supplies each venue's own identifier for what they've confirmed is the same underlying bet; this tool never auto-matches events across venues, only reads and compares prices for ide
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quotes | array | yes | One entry per venue you want to compare: 2 to 5 total. Each must genuinely be the same real-world bet; this tool does not verify that for you. |
Checks 2-5 quotes for the SAME real-world binary bet across venues (or manually-supplied probabilities) for a guaranteed, direction-independent arbitrage: buy "Yes" at whichever venue quotes it cheapest, buy "No" at whichever venue quotes "Yes" most expensively (its own "No" price is assumed to be 1 minus its own "Yes" price, the standard complementary-binary convention). Reports isArbitrage, the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quotes | array | no | Live mode: one entry per venue, 2-5 total. Provide this OR manualProbabilitiesPct, not both. |
| manualProbabilitiesPct | array | no | Manual mode: 2-5 probabilities (0.01-99.99) already known for the same bet across different venues, when you don't want a live fetch. Provide this OR quotes, not both. |
| stakeUsd | number | yes | Total capital to deploy across both legs |
| feePctPerLeg | number | no | Optional per-leg trading-fee rate, e.g. 0.02 for 2% (default 0) |
Reads Kalshi's full live BTC or ETH year-end price ladder (a set of mutually-exclusive prediction markets covering the whole price range) and reports what the market itself implies: the median (50th-percentile) price bucket, the single most-likely (mode) bucket, and the probability of ending the year at or above any real bucket boundary. Deliberately does not compute an expected value or interpola
| Parameter | Type | Required | Notes |
|---|---|---|---|
| coin | string | no | Which coin's year-end ladder to read. Default BTC. |
| thresholdUsd | number | no | Optional price threshold: returns the probability of ending the year at or above the nearest real bucket boundary at or below this value. |
Black-Scholes theoretical price and Greeks for a REAL, live Deribit BTC/ETH option instrument: pulls that instrument's own spot, strike, days to expiry, and implied volatility from Deribit, then reports how far Deribit's actual quoted mark price sits from what Black-Scholes implies at that IV (priceDiscrepancyPct). This is the trust-check tool: "is this exchange's quoted price consistent with its
| Parameter | Type | Required | Notes |
|---|---|---|---|
| instrumentName | string | yes | Exact Deribit instrument name, e.g. BTC-27FEB27-90000-C. Get one from Deribit's options chain; this tool does not browse the chain, it prices one named instrument. |
| riskFreeRatePct | number | no | Risk-free rate in percentage points. Default 0: standard crypto-options convention. |
Value of 1 pip for a forex pair and position size, converted to a given account currency via a live FX rate: TrueFX for its 10 quoted majors (genuinely live tick data), frankfurter.app daily ECB reference rate as the fallback for every other currency (30 total). Use when user asks "what's 1 pip worth in my account currency?" and the account currency differs from the pair's own quote currency (if i
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units |
| accountCurrency | string | yes | 3-letter account currency code, e.g. "GBP" |
Notional and margin required for a forex position, converted to a given account currency via a live FX rate (same TrueFX/frankfurter.app source as workflow.run_forex_pip_value_live). Use when user asks "how much margin do I need in my account currency?" and the account currency differs from the pair's own quote currency. Returns everything workflow.run_forex_margin_required does, plus accountCurre
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units |
| price | number | yes | Entry or current price |
| leverage | number | yes | Leverage multiplier, e.g. 50 for 50:1 |
| accountCurrency | string | yes | 3-letter account currency code, e.g. "GBP" |
Position size (units and standard lots) from a risk amount and stop distance, in a given account currency, via a live FX rate to convert pip value into that currency (same TrueFX/frankfurter.app source as the other forex _live tools). Never has a meaningful account-currency-agnostic form: sizing a position from a risk budget genuinely requires knowing what 1 pip is worth in the currency that budge
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| entryPrice | number | yes | — |
| stopPrice | number | yes | — |
| riskAmount | number | yes | Amount to risk, in accountCurrency |
| accountCurrency | string | yes | 3-letter account currency code, e.g. "USD" |
Converts an amount between currencies using a live FX rate: TrueFX for its 10 quoted majors (genuinely live tick data), frankfurter.app daily ECB reference rate as the fallback for every other currency pair (30 total). Use when user asks "what's $X worth in EUR?" or any currency conversion where the rate itself isn't already known. Returns: converted, rate, source (truefx/frankfurter/identity), as
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount | number | yes | Amount in the source currency |
| from | string | yes | 3-letter source currency code, e.g. "USD" |
| to | string | yes | 3-letter target currency code, e.g. "EUR" |
Total swap/rollover cost (or credit) for holding a forex position overnight, converted to a given account currency via a live FX rate (same TrueFX/frankfurter.app source as the other forex _live tools). swapPerLotPerNight is still always a manual input: swap rates are broker-set, with no free live feed available for them. Use when user asks "how much will holding this position overnight cost me in
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair | string | yes | Currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| units | number | yes | Position size in base-currency units |
| swapPerLotPerNight | number | yes | Swap rate per standard lot per night, in the pair's quote currency. Negative = cost, positive = credit. |
| nights | integer | yes | Number of nights the position is held |
| accountCurrency | string | yes | 3-letter account currency code, e.g. "GBP" |
Correlation coefficient and minimum-variance hedge ratio between two forex pairs, fetched live: historical daily rates for both pairs over the given lookback window (frankfurter.app's daily ECB reference time series, business days only), aligned by matching date, computed on daily % returns. hedgeRatio follows Hull's standard futures-hedging formula: "how many units of pair2 per unit of pair1 mini
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pair1 | string | yes | First currency pair in BASE/QUOTE format, e.g. "EUR/USD" |
| pair2 | string | yes | Second currency pair in BASE/QUOTE format, e.g. "GBP/USD" |
| days | integer | no | Calendar days to look back, 14-365. Default 30. Business-day-only data means fewer actual points than this number. |
Cross-exchange agreement check for one perpetual futures price: fetches the same asset USDT/USDC-margined perpetual from a reference set of 7 liquid exchanges (Binance, Bybit, OKX, Gate, KuCoin, Hyperliquid, MEXC; the chosen one is compared against the rest) and reports the median of the others, the spread across all, and how far the chosen exchange sits from that median. Says the exchanges disagr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| exchange | string | yes | Exchange code of the price being checked, e.g. bybit, binance, okx, gate, kucoin, hyperliquid, mexc |
| symbol | string | yes | That exchange's own perpetual symbol, e.g. BTCUSDT (bybit/binance), ETH-USDT-SWAP (okx), BTCUSDC (hyperliquid) |
Compares your own probability estimate for an event against a prediction market's price (manual entry, or a live Kalshi ticker, Limitless slug, or Myriad slug) and sizes a bet using fractional Kelly criterion bet sizing (default: quarter-Kelly, a standard conservative haircut on full Kelly, stated explicitly as a convention). Returns zero recommended stake whenever your probability doesn't exceed
| Parameter | Type | Required | Notes |
|---|---|---|---|
| yourProbabilityPct | number | yes | Your own probability estimate, 0.01-99.99 |
| marketProbabilityPct | number | no | The market's probability (price), 0.01-99.99. Use this OR one of the live sources below, not both. |
| kalshiTicker | string | no | A Kalshi market ticker to fetch the market probability from live instead of supplying it manually. |
| limitlessSlug | string | no | A Limitless Exchange market slug to fetch the market probability from live instead of supplying it manually. |
| myriadSlug | string | no | A Myriad Markets market slug to fetch the market probability from live instead of supplying it manually. Not every market has a Yes/No outcome. |
| bankrollUsd | number | yes | Bankroll available for this bet, in USD |
| kellyFractionCap | number | no | Fraction of full Kelly to actually stake, 0.01-1. Default 0.25 (quarter-Kelly). |
Run the full regression suite: 43 canonical test vectors (linear and inverse/coin-margined) across all 12 calculators, and return a pass/fail report with counts and timestamp. Useful as a health check before relying on results in production workflows.
No parameter schema on file.
Return the ECDSA P-256 public key (PEM + JWK) and canonical signing format used to sign tool responses, so results can be verified offline without calling back to TradingCalc. Every tools/call result includes a signed second content block when signing is configured; also available at GET /api/mcp/pubkey.
No parameter schema on file.
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install TradingCalc MCP — Crypto Futures Math or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| workflow.run_pnl_planning | no tags | |
| workflow.run_liquidation_safety | no tags | |
| workflow.run_breakeven_planning | no tags | |
| workflow.run_position_sizing | no tags | |
| workflow.run_funding_cost | no tags | |
| primitive.average_entry | no tags | |
| workflow.run_exit_target | no tags | |
| workflow.run_scenario_planning | no tags | |
| workflow.run_max_leverage | no tags | |
| primitive.hedge_ratio | no tags | |
| workflow.run_funding_arbitrage | no tags | |
| workflow.run_compound_funding | no tags | |
| workflow.run_pre_trade_check | untrusted-input | untrusted-input: keyword "fetch" |
| workflow.run_risk_reward | no tags | |
| workflow.run_portfolio_risk | no tags | |
| workflow.run_dca_entry | no tags | |
| workflow.run_average_down | no tags | |
| workflow.run_scale_out | no tags | |
| workflow.run_carry_trade | no tags | |
| workflow.run_funding_breakeven | no tags | |
| workflow.run_bonding_curve | no tags | |
| workflow.run_impermanent_loss | no tags | |
| workflow.run_options_payoff | no tags | |
| workflow.run_black_scholes | untrusted-input | untrusted-input: keyword "fetch" |
| workflow.run_straddle_strangle | no tags | |
| workflow.run_covered_call_protective_put | no tags | |
| workflow.run_spread_payoff | no tags | |
| workflow.run_implied_volatility | no tags | |
| workflow.run_window_fair_value | no tags | |
| workflow.run_forex_pip_value | no tags | |
| workflow.run_forex_margin_level | no tags | |
| workflow.run_forex_breakeven | no tags | |
| workflow.run_forex_pnl | no tags | |
| workflow.run_forex_risk_reward | no tags | |
| workflow.run_forex_scenario | no tags | |
| workflow.run_forex_average_entry | no tags | |
| workflow.run_forex_margin_required | no tags | |
| workflow.run_forex_currency_converter | untrusted-input | untrusted-input: keyword "fetch" |
| workflow.run_forex_swap_cost | no tags | |
| workflow.run_forex_correlation | no tags | |
| workflow.run_var_cvar | no tags | |
| workflow.run_sharpe_stats | no tags | |
| workflow.run_hurst_exponent | no tags | |
| workflow.run_cointegration | no tags | |
| workflow.run_portfolio_tearsheet | no tags | |
| workflow.run_garch | no tags | |
| workflow.run_risk_parity | no tags | |
| workflow.run_dsr | no tags | |
| workflow.run_kelly_frontier | no tags | |
| workflow.run_unsmoothing | no tags | |
| workflow.run_evt_tail_risk | no tags | |
| workflow.run_orderbook_impact | no tags | |
| workflow.run_open_analysis | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_session_structure | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_value_migration | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_breakout_acceptance | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_token_risk_check | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_swap_price_impact | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_market_cap_comparison | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_impermanent_loss_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_wallet_flag_check | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_odds_converter | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_spread_reader | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_cross_venue_arbitrage | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_market_implied_odds | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_black_scholes_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_pip_value_live | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_margin_required_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_position_size_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_currency_converter_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_swap_cost_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_forex_correlation_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_price_consensus | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| workflow.run_prediction_market_edge | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| system.verify | no tags | |
| system.pubkey | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 2.14.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish TradingCalc MCP — Crypto Futures Math can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.