# TradingCalc MCP — Crypto Futures Math (remote · tradingcalc.io)

Crypto futures math: PnL, liquidation, position sizing, carry trade. 19 tools. Not AI estimates.

- Trust score: 47/100 (low)
- Change this week: −10
- Registry status: active
- Liveness: degraded
- Owner verified: no
- Last scored: 2026-08-03

> **Degraded**: one or more channels of this server are currently unreachable; their trust score is decaying and will reach 0 if they stay down.

## Components

- remote · `tradingcalc.io`: 47/100 (this document), [markdown](https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp.md), [page](https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp)

## Channel facts

- Endpoint: `https://tradingcalc.io/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.5.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the tool list to see what that exposes.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but we couldn't connect to verify it.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 4 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add --transport http skalinin909-tradingcalc https://tradingcalc.io/api/mcp
```

### Codex

```toml
[mcp_servers.skalinin909-tradingcalc]
url = "https://tradingcalc.io/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "skalinin909-tradingcalc": {
      "type": "remote",
      "url": "https://tradingcalc.io/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add skalinin909-tradingcalc --url https://tradingcalc.io/api/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  skalinin909-tradingcalc:
    url: "https://tradingcalc.io/api/mcp"
```

### Other

```json
{
  "mcpServers": {
    "skalinin909-tradingcalc": {
      "type": "http",
      "url": "https://tradingcalc.io/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 47, −12)

The score moved with no change recorded against any check. We would rather say so than guess.

### 2026-08-01 (score 59, 0)

- [security regression] Endpoint reachability: reachable → unreachable

### 2026-07-31 (score 59, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 59, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-29 (score 58, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 57, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 56)

First indexed and scored.

## MCP tools (23)

### `workflow.run_pnl_planning` (~153 tokens)

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 (%).

Input parameters:

- `entryPrice` (number, required): Entry price (positive)
- `exitPrice` (number, required): Exit price (positive)
- `feeClosePct` (number): Closing fee as fraction
- `feeOpenPct` (number): Opening fee as fraction, e.g. 0.0002 = 0.02%
- `side` (string, required): Trade direction
- `size` (number, required): Position size in base asset

### `workflow.run_liquidation_safety` (~119 tokens)

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).

Input parameters:

- `entryPrice` (number, required): Entry price (positive)
- `leverage` (number, required): Leverage multiplier, e.g. 10 for 10x
- `mmr` (number): Maintenance margin rate, default 0.005 (0.5%)
- `side` (string, required)

### `workflow.run_breakeven_planning` (~121 tokens)

Calculate the break-even exit price that covers all trading fees. Use when user asks "what price do I need to just break even?" Returns: breakevenPrice, totalFees.

Input parameters:

- `entryPrice` (number, required): Entry price (positive)
- `feeClosePct` (number): Closing fee fraction, default 0.0005
- `feeOpenPct` (number): Opening fee fraction, default 0.0002
- `side` (string, required)
- `sizeBase` (number, required): Position size in base asset

### `workflow.run_position_sizing` (~161 tokens)

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.

Input parameters:

- `entryPrice` (number, required): Entry price
- `feeClosePct` (number): Closing fee fraction, default 0.0005
- `feeOpenPct` (number): Opening fee fraction, default 0.0002
- `leverage` (number): Leverage, default 1
- `riskUsdt` (number, required): Maximum acceptable loss in USDT
- `side` (string, required)
- `stopLoss` (number, required): Stop-loss price

### `workflow.run_funding_cost` (~140 tokens)

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.

Input parameters:

- `days` (number, required): Number of days to hold
- `entryPrice` (number, required): Entry price
- `fundingRate` (number, required): Funding rate per 8h period as fraction, e.g. 0.0001
- `side` (string, required)
- `sizeBase` (number, required): Position size in base asset

### `primitive.average_entry` (~89 tokens)

Calculate the weighted average entry price from multiple buy/sell fills (DCA). Use when user has filled at multiple prices and asks "what's my average entry?" Returns: averagePrice, totalSize, totalCost.

Input parameters:

- `exchangeCode` (string): Exchange identifier (optional)
- `input` (object, required)
- `symbol` (string, required): Trading pair symbol, e.g. BTCUSDT

### `workflow.run_exit_target` (~182 tokens)

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.

Input parameters:

- `entryPrice` (number, required): Entry price
- `feeClosePct` (number): Closing fee fraction, default 0.0005
- `feeOpenPct` (number): Opening fee fraction, default 0.0002
- `leverage` (number, required): Leverage multiplier
- `side` (string, required)
- `sizeBase` (number, required): Position size in base asset
- `targetMode` (string, required): "pnl" = target in USDT, "roe" = target in %
- `targetValue` (number, required): Target value (USDT or %)

### `workflow.run_scenario_planning` (~159 tokens)

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 }.

Input parameters:

- `deltasPct` (array, required): List of price change percentages, e.g. [-10, -5, 0, 5, 10]
- `entryPrice` (number, required): Entry price
- `feeClosePct` (number): Closing fee fraction
- `feeOpenPct` (number): Opening fee fraction
- `side` (string, required)
- `size` (number, required): Position size in base asset

### `workflow.run_max_leverage` (~154 tokens)

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.

Input parameters:

- `accountSize` (number, required): Total account size in USDT
- `maxDrawdownPct` (number, required): Maximum acceptable drawdown as percentage, e.g. 10 for 10%
- `mmr` (number): Maintenance margin rate, default 0.005 (0.5%)
- `volatilityPct` (number, required): Expected daily price volatility as percentage, e.g. 3 for 3%

### `primitive.hedge_ratio` (~159 tokens)

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.

Input parameters:

- `fundingRatePct` (number): Current 8h funding rate as percentage, e.g. 0.01. Used for cost estimate.
- `hedgeRatio` (number): Percentage of spot to hedge, e.g. 100 for full hedge, 50 for half. Default 100.
- `leverage` (number): Leverage on the perp short. Default 1.
- `spotSize` (number, required): Spot position value in USDT

### `workflow.run_funding_arbitrage` (~205 tokens)

Calculate funding rate arbitrage profit: annualized yield, net profit, and breakeven days for a long/short basis trade across two exchanges. Use when user asks "is this funding arb worth it?" or "how many days to break even on transfer fees?". Returns: netProfitUsdt, annualizedYieldPct, breakevenDays.

Input parameters:

- `durationDays` (number, required): Holding period in days
- `intervalHours` (number): Funding interval: 8 (standard) or 1 (Hyperliquid)
- `longFundingRate` (number, required): Funding rate on long side (% per interval, positive = you pay)
- `positionSize` (number, required): Position size in USDT
- `shortFundingRate` (number, required): Funding rate on short side (% per interval, positive = you receive)
- `transferFeePct` (number): One-time transfer/setup fee as percentage, e.g. 0.1 for 0.1%

### `workflow.run_compound_funding` (~190 tokens)

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.

Input parameters:

- `durationDays` (number, required): Number of days to project
- `fundingRatePct` (number, required): Funding rate per interval as percentage, e.g. 0.01 for 0.01%
- `initialCapital` (number, required): Starting capital in USDT
- `intervalHours` (number): Funding interval: 8 (standard) or 1 (Hyperliquid)
- `reinvestPct` (number): Percentage of earnings reinvested each interval. 100 = full compounding, 0 = no reinvestment. Default 100.

### `workflow.run_pre_trade_check` (~337 tokens)

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. Returns: positionSize, breakeven, liquidationPrice, fundingCost, overnightBreakevenShift, verdict.

Input parameters:

- `account_balance` (number, required): Total account balance in USDT
- `entry_price` (number, required): Entry price (positive)
- `exchange` (string): Exchange code, e.g. "binance" or "bybit". Used to fetch live funding rate if funding_rate is omitted.
- `fee_close_pct` (number): Closing fee fraction, default 0.0005
- `fee_open_pct` (number): Opening fee fraction, default 0.0002
- `funding_rate` (number): Funding rate per 8h as decimal, e.g. 0.0001. If omitted, fetched live from exchange.
- `hold_hours` (number): Expected hold time in hours for overnight shift calc. Default 8.
- `leverage` (number, required): Leverage multiplier
- `mmr` (number): Maintenance margin rate, default 0.005
- `risk_pct` (number, required): Risk as % of balance, e.g. 1.0 = 1%
- `side` (string, required)
- `stop_loss` (number, required): Stop-loss price (positive)
- `symbol` (string): Perpetual symbol, e.g. "BTCUSDT".

### `workflow.run_risk_reward` (~235 tokens)

Full risk:reward analysis — the single best tool when user describes a trade with entry, stop, and target. 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. Use when user asks "is this trade worth taking?" or "what's my risk reward on this setup?".

Input parameters:

- `account_balance` (number, required): Account balance in USDT
- `entry_price` (number, required): Entry price
- `fee_close_pct` (number): Close fee rate (default 0.0005)
- `fee_open_pct` (number): Open fee rate (default 0.0002)
- `leverage` (number, required): Leverage multiplier
- `mmr` (number): Maintenance margin rate (default 0.005)
- `risk_pct` (number, required): Max risk as % of account
- `side` (string, required)
- `stop_loss` (number, required): Stop-loss price
- `take_profit` (number, required): Take-profit price

### `workflow.run_dca_entry` (~128 tokens)

DCA entry planner: weighted average entry price, breakeven, and per-level contribution from multiple fill prices and sizes. Use when user bought at several prices and asks "what's my average entry?" or "where is my DCA breakeven?". Returns: averageEntry, breakeven, per-level summary.

Input parameters:

- `entries` (array, required)
- `fee_close_pct` (number): Close fee rate (default 0.0005)
- `fee_open_pct` (number): Open fee rate (default 0.0002)
- `side` (string, required)

### `workflow.run_scale_out` (~166 tokens)

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.

Input parameters:

- `entry_price` (number, required): Entry price
- `exits` (array, required)
- `fee_close_pct` (number): Close fee rate (default 0.0005)
- `fee_open_pct` (number): Open fee rate (default 0.0002)
- `side` (string, required)
- `total_size` (number, required): Total position size in base currency

### `workflow.run_carry_trade` (~182 tokens)

Delta-neutral carry trade (funding arbitrage) analysis. Use when user asks "is this carry trade worth it?" — long on exchange A, short on exchange B, collect the funding rate spread. Returns: netYieldPct, grossProfit, netProfit, breakevenDays, verdict (profitable/marginal/loss).

Input parameters:

- `funding_rate_long` (number, required): Funding rate on long exchange per interval (decimal)
- `funding_rate_short` (number, required): Funding rate on short exchange per interval (decimal)
- `hold_days` (number, required): Hold duration in days
- `interval_hours` (number): Funding interval: 1 or 8 hours (default 8)
- `notional` (number, required): Position notional in USDT
- `transfer_fee_pct` (number): One-way transfer fee % (default 0.1)

### `workflow.run_funding_breakeven` (~181 tokens)

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.

Input parameters:

- `entry_price` (number, required): Entry price
- `fee_close_pct` (number): Close fee rate (default 0.0005)
- `fee_open_pct` (number): Open fee rate (default 0.0002)
- `funding_rate` (number, required): Funding rate per 8h period (decimal, e.g. 0.0001)
- `hold_hours` (number, required): Hold duration in hours
- `side` (string, required)
- `size` (number, required): Position size in base currency

### `workflow.run_open_analysis` (~226 tokens)

Market Profile open analysis — where and how price opened vs the prior session value area. Returns open location, open type (OD/OTD/ORR/OAIR), key levels (VAH/VAL/VPOC/IB), and bullish/bearish/neutral scenario framing. Use for "how did BTC open today?" / "what does the open imply for the session?".

Input parameters:

- `candles` (array): Optional OHLCV for the session — omit to fetch from venue (reproducible + 0 COGS when supplied)
- `instrument` (string, required): Symbol, e.g. BTCUSDT
- `prev_candles` (array): Optional OHLCV for the previous session
- `session_date` (string, required): Session date YYYY-MM-DD (UTC)
- `timeframe` (string): Candle timeframe (default 15m)
- `value_area_rule` (number): Value-area fraction 0.5–0.9 (default 0.70)
- `venue` (string, required): Exchange to fetch candles from when candles[] not supplied

### `workflow.run_session_structure` (~194 tokens)

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?".

Input parameters:

- `candles` (array): Optional OHLCV for the session — omit to fetch from venue (reproducible + 0 COGS when supplied)
- `instrument` (string, required): Symbol, e.g. BTCUSDT
- `prev_candles` (array): Optional OHLCV for the previous session
- `session_date` (string, required): Session date YYYY-MM-DD (UTC)
- `timeframe` (string): Candle timeframe (default 15m)
- `value_area_rule` (number): Value-area fraction 0.5–0.9 (default 0.70)
- `venue` (string, required): Exchange to fetch candles from when candles[] not supplied

### `workflow.run_value_migration` (~206 tokens)

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?".

Input parameters:

- `candles` (array): Optional OHLCV for the session — omit to fetch from venue (reproducible + 0 COGS when supplied)
- `instrument` (string, required): Symbol, e.g. BTCUSDT
- `lookback_sessions` (number): Sessions to compare, 1–5 (default 1)
- `prev_candles` (array): Optional OHLCV for the previous session
- `session_date` (string, required): Session date YYYY-MM-DD (UTC)
- `timeframe` (string): Candle timeframe (default 15m)
- `value_area_rule` (number): Value-area fraction 0.5–0.9 (default 0.70)
- `venue` (string, required): Exchange to fetch candles from when candles[] not supplied

### `workflow.run_breakout_acceptance` (~212 tokens)

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?".

Input parameters:

- `candles` (array): Optional OHLCV for the session — omit to fetch from venue (reproducible + 0 COGS when supplied)
- `include_delta` (boolean): Include buy/sell delta analysis (default true)
- `instrument` (string, required): Symbol, e.g. BTCUSDT
- `prev_candles` (array): Optional OHLCV for the previous session
- `session_date` (string, required): Session date YYYY-MM-DD (UTC)
- `timeframe` (string): Candle timeframe (default 15m)
- `value_area_rule` (number): Value-area fraction 0.5–0.9 (default 0.70)
- `venue` (string, required): Exchange to fetch candles from when candles[] not supplied

### `system.verify` (~54 tokens)

Run the full regression suite — 22 canonical test vectors across all 12 calculators — and return a pass/fail report with counts and timestamp. Call this before using results in production workflows to confirm the computation layer is operating correctly.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp#diagnostics

## Score history

- 2026-08-03: 47
- 2026-08-02: 47
- 2026-08-01: 59
- 2026-07-31: 59
- 2026-07-30: 59
- 2026-07-29: 58
- 2026-07-28: 57
- 2026-07-27: 57
- 2026-07-26: 56

## Links

- Remote endpoint: https://tradingcalc.io/api/mcp
- Repository: https://github.com/SKalinin909/tradingcalc-mcp
- Changelog RSS feed: https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/skalinin909-tradingcalc/api-mcp
