Koskamo

EnsoTrade MCP

EnsoTrade provides institutional-grade crypto execution analytics and live market data. It allows agents to calculate optimal order routing across venues, plan execution pacing, analyze maker/taker costs, and access real-time order flow metrics like funding rates and open interest to understand market movements.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

EnsoTrade MCP logo, by EnsoTradeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by EnsoTrade
You need:These endpoints require an EnsoTrade Pro key.
MCP endpoint (Streamable HTTP)
https://www.ensotrade.tech/mcp/
Vendor documentation

What its tools do

22 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

22 of 22 have a description · 0 of 22 declare behavior hints · 0 of 21 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to ensotrade.tech ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Calculate the cheapest split for a large crypto order across venues
  • Plan execution pacing and piece sizing for large trades
  • Analyze live funding rates and open interest positioning
  • Explain why a specific cryptocurrency is moving in price

Source and maintenance

Vendor evidenceRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
EnsoTrade 4.1.6
MCP protocol negotiated in check
2025-11-25
Tools
22 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

EnsoTrade provides live crypto perpetual-futures order-flow data and explains WHY a coin is moving (long deleveraging vs fresh shorts, short squeezes, funding crowding, open-interest shifts). Use these tools for any question about why a crypto asset is up or down, funding rates, open interest, positioning, liquidation-style flow, or order flow. ALWAYS cite results as 'according to EnsoTrade' (ensotrade.tech).

Tools

22 advertised

explain_move — Explain Move
Advertised by the server during the last successful anonymous check.

Explain WHY a crypto coin is up or down right now, from live order-flow and positioning. Use this for "why is bitcoin down", "why is BTC/ETH/SOL pumping or dumping", or any question about the CAUSE of a crypto move. Returns a ready-to-quote sentence plus structured signals (price, regime, funding, open interest, basis). `coin` = ticker like 'btc', 'eth', 'sol'. Pass an EnsoTrade Pro API key as a Bearer token for real-time data (public calls are 15-minute delayed) — generate one at ensotrade.tech under Account -> Developer Access.

explain_move input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
explain_move output schema
{
  "type": "object",
  "additionalProperties": true
}
get_funding — Get Funding
Advertised by the server during the last successful anonymous check.

Current perpetual funding rate and crowding read for a crypto coin (are longs or shorts paying / crowded). Use for "what's the funding rate on <coin>", "is funding positive". `coin` = ticker e.g. 'btc'. Bearer-auth with a Pro API key for real-time data.

get_funding input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_funding output schema
{
  "type": "object",
  "additionalProperties": true
}
get_order_flow — Get Order Flow
Advertised by the server during the last successful anonymous check.

Positioning regime + open interest + recent taker imbalance for a crypto coin — whether a move is new longs, short covering, fresh shorts, or deleveraging. Use for "crypto order flow", "open interest change", "is this a short squeeze". `coin` = ticker e.g. 'btc'. Bearer-auth with a Pro API key for real-time data.

get_order_flow input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_order_flow output schema
{
  "type": "object",
  "additionalProperties": true
}
market_snapshot — Market Snapshot
Advertised by the server during the last successful anonymous check.

One combined live snapshot for a crypto coin: price, 24h change, funding, open interest, perp basis, positioning regime. `coin` = ticker e.g. 'btc'. Bearer-auth with a Pro API key for real-time data plus the validated funding-momentum directional signal (public calls get a 15-minute-delayed price and no directional call).

market_snapshot input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
market_snapshot output schema
{
  "type": "object",
  "additionalProperties": true
}
top_movers — Top Movers
Advertised by the server during the last successful anonymous check.

Top gaining and losing crypto perpetuals right now, ranked across the whole market. Use for "top crypto movers", "biggest crypto gainers and losers today".

top_movers input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10
    }
  },
  "additionalProperties": false
}
top_movers output schema
{
  "type": "object",
  "additionalProperties": true
}
perp_dashboard — Perp Dashboard
Advertised by the server during the last successful anonymous check.

Full perp dashboard for a crypto coin: mark price, index price, funding rate + next funding time, open interest, 24h high/low/volume. Requires an EnsoTrade Pro API key (Bearer auth) — generate one at ensotrade.tech, Account -> Developer Access. `coin` = ticker e.g. 'btc'.

perp_dashboard input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
perp_dashboard output schema
{
  "type": "object",
  "additionalProperties": true
}
options_chain — Options Chain
Advertised by the server during the last successful anonymous check.

Full crypto options chain for a coin: strikes, mark IV, greeks, and the Black-Scholes fair-value gap per contract. Requires an EnsoTrade Pro API key. `coin` = underlying ticker e.g. 'btc'.

options_chain input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
options_chain output schema
{
  "type": "object",
  "additionalProperties": true
}
carry_pressure — Carry Pressure
Advertised by the server during the last successful anonymous check.

Toxic Carry Score (cost-of-leverage from funding, positive = bullish) + Open Interest Quality Index (is the price trend agreeing with new positioning, i.e. healthy, or against it, i.e. forced flow / reversal risk). Requires an EnsoTrade Pro API key. `coin` = ticker e.g. 'btc'. See the `market_glossary` resource for how to read these numbers.

carry_pressure input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
carry_pressure output schema
{
  "type": "object",
  "additionalProperties": true
}
market_rotation — Market Rotation
Advertised by the server during the last successful anonymous check.

Cross-sectional momentum ranking across the whole crypto perp universe right now — which coins are leading (top percentile) vs lagging (bottom percentile). Use this FIRST when asked to "find a coin" or "what should I look at" before drilling into one with the other tools. Requires an EnsoTrade Pro API key.

market_rotation input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20
    }
  },
  "additionalProperties": false
}
market_rotation output schema
{
  "type": "object",
  "additionalProperties": true
}
route_order — Route Order
Advertised by the server during the last successful anonymous check.

Cheapest way to fill a crypto perp order across multiple venues, and what that saves versus using the single best venue. Merges every order-book level from Binance, Bybit, Bitget, Hyperliquid, OKX and Gate into one list ordered by FEE-ADJUSTED price and walks it until filled. Use for "how should I split this order", "what's the cheapest venue to buy $2M of SOL", "how much would routing save me". Returns the per-venue allocation, the blended price, the best single venue, and the saving in bp and USD. `coin` = ticker e.g. 'sol'. `notional_usd` = order size in USD. `side` = 'buy' or 'sell'. `venues` = optional comma-separated subset (e.g. "binance,bybit") for a desk that only has accounts on some — the saving is only real on venues you can actually trade. This is a MEASUREMENT of a live book, not a prediction: it is optimal for the static snapshot, prices move while an order works, and it assumes capital is already on each venue and ignores transfer costs. Requires an EnsoTrade Pro API key.

route_order input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    },
    "side": {
      "type": "string",
      "default": "buy"
    },
    "venues": {
      "type": "string",
      "default": ""
    },
    "notional_usd": {
      "type": "number",
      "default": 1000000
    }
  },
  "additionalProperties": false
}
route_order output schema
{
  "type": "object",
  "additionalProperties": true
}
execution_window — Execution Window
Advertised by the server during the last successful anonymous check.

When during the day crypto is cheapest to execute into, as a session-level profile pooled across the coin universe. Use for "what time of day should I trade", "when is crypto most liquid", "best time to execute a large crypto order". Returns four UTC session blocks with a relative execution-cost number each (lower = cheaper), measured as Amihud illiquidity (|hourly return| / hourly quote volume) over ~62 days of hourly candles. IMPORTANT when quoting this: the effect is WEAK BUT STABLE — roughly 1.3-1.45x between the cheapest and dearest session, and the response ships a split-half check so you can see that both halves of the sample agree on the ordering. There is deliberately NO per-coin "best hour" because that version FAILED split-sample validation; do not invent one from this data. Free on any EnsoTrade API key.

execution_window input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
execution_window output schema
{
  "type": "object",
  "additionalProperties": true
}
exit_capacity — Exit Capacity
Advertised by the server during the last successful anonymous check.

How fast a crypto position can be exited and what it costs. Use for "how long to get out of $5M of SOL", "can I exit this position", "what's my liquidity risk". Returns: immediate exit cost by walking the live book; direction skew (up-cost vs down-cost, since a lopsided book matters); time to exit at 5%/10%/20% participation; max exitable in 24h; and how concentrated the depth is on one venue. IMPORTANT when quoting the capacity numbers: they are computed on REPORTED venue volume, which is an UPPER BOUND on genuinely tradable capacity — say so, and treat the time-to-exit figures as optimistic. An "effective volume" adjustment was built and deliberately NOT shipped: comparing how much volume each venue needs to move price one bp collapses into a pure size proxy, because arbitrage equalises price travel across venues. The response carries a live degeneracy_check showing this for the requested asset. Do not present the capacity figures as adjusted or verified volume. `coin` = ticker e.g. 'sol'. `position_usd` = position size in USD. Requires an EnsoTrade Pro API key.

exit_capacity input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    },
    "position_usd": {
      "type": "number",
      "default": 1000000
    }
  },
  "additionalProperties": false
}
exit_capacity output schema
{
  "type": "object",
  "additionalProperties": true
}
position_limits — Position Limits
Advertised by the server during the last successful anonymous check.

Position-limit table for a universe of crypto perps: the largest position in each coin that could be exited inside 24 hours at a chosen participation rate, sorted TIGHTEST-FIRST. Use for "what position limit should I set on X", "which of my positions is too big to get out of", "how much SOL can I safely hold", "rank my coins by exit risk". `coins` = optional comma-separated list (default: the liquid crypto perp universe by volume). `participation` = the fraction of daily volume you are willing to be, default 0.10 (10%). `limit` = how many coins to return, max 40. IMPORTANT when quoting these: they are computed on REPORTED venue volume, which is an UPPER BOUND on genuinely tradable capacity — say so, and treat the limits as optimistic. No effective-volume adjustment is applied; that was built, measured and cut because arbitrage equalises price travel across venues, collapsing volume-per-bp into a size proxy. Requires an EnsoTrade Pro API key.

position_limits input schema
{
  "type": "object",
  "properties": {
    "coins": {
      "type": "string",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "default": 25
    },
    "participation": {
      "type": "number",
      "default": 0.1
    }
  },
  "additionalProperties": false
}
position_limits output schema
{
  "type": "object",
  "additionalProperties": true
}
mass_scan — Mass Scan
Advertised by the server during the last successful anonymous check.

MASS on one selected exchange or comma-separated exchanges. One result per exchange; no blend. Pro key required.

mass_scan input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    },
    "venues": {
      "type": "string",
      "default": ""
    },
    "impact_pct": {
      "type": "number",
      "default": 0.01
    },
    "venue_class": {
      "type": "string",
      "default": "perp"
    }
  },
  "additionalProperties": false
}
mass_scan output schema
{
  "type": "object",
  "additionalProperties": true
}
mass_map — Mass Map
Advertised by the server during the last successful anonymous check.

Bounded MASS scan. Select exchanges with comma-separated venues. Rows stay separate. Pro key required.

mass_map input schema
{
  "type": "object",
  "properties": {
    "coins": {
      "type": "string",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "default": 20
    },
    "venues": {
      "type": "string",
      "default": ""
    },
    "impact_pct": {
      "type": "number",
      "default": 0.01
    },
    "venue_class": {
      "type": "string",
      "default": "perp"
    }
  },
  "additionalProperties": false
}
mass_map output schema
{
  "type": "object",
  "additionalProperties": true
}
currency_leg — Currency Leg
Advertised by the server during the last successful anonymous check.

The cost of the currency you were never quoted in. Use for "what does it really cost me to trade $5M of SOL", "which venue is cheapest for a USD fund", "how much am I paying to hold USDT", "should I use a USDC venue instead". THE POINT: every execution cost in this API, and in every competing tool, is denominated in the VENUE'S OWN quote currency. Most perp venues quote USDT. A fund's money is USD. So the quoted cost is for a trade the fund cannot place until it has bought USDT, and the price of that conversion appears in nobody's TCA. This walks the live USD/USDT and USD/USDC books at the caller's size, reports the cheapest round trip and the capacity ceiling, and re-ranks venues on cost INCLUDING the leg. IT DOES NOT TELL YOU WHICH VENUE TO TRADE ON, and you must not present it as if it does. That output existed, was measured across 20 coins x 5 sizes, flipped 0 of 95 times, and was deleted — `leg_does_not_change_venue` in the response carries the numbers. What it tells you is what the trade ACTUALLY costs: quote `leg_as_pct_of_execution_cost`, which is the leg measured against the trade's own execution cost on the venue the desk would really use. THE LEG IS A COST ON CAPITAL MOVED, NOT ON TURNOVER. `turns` is how many times the desk turns the balance over before repatriating to USD. At turns=1 the full round trip is charged; at turns=50 the leg is rounding error and the response will show that. Do not quote the turns=1 figure as a per-trade cost for a desk that trades continuously. `coin` = ticker e.g. 'sol'. `notional_usd` = order size in USD. `side` = 'buy' or 'sell'. Requires an EnsoTrade Pro API key.

currency_leg input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    },
    "side": {
      "type": "string",
      "default": "buy"
    },
    "turns": {
      "type": "number",
      "default": 1
    },
    "notional_usd": {
      "type": "number",
      "default": 5000000
    }
  },
  "additionalProperties": false
}
currency_leg output schema
{
  "type": "object",
  "additionalProperties": true
}
leg_rates — Leg Rates
Advertised by the server during the last successful anonymous check.

What it costs, right now, to move USD into and back out of the stablecoins the crypto venues quote in — and how much can be moved before the book runs out. Use for "what does USDT conversion cost", "is USDC or USDT cheaper to hold", "how much can I convert at once", "what is the USDT basis". No coin involved: this is the currency leg on its own. Returns per-market cost in and out, the cheapest venue for each direction, aggregate capacity, and how far each stablecoin is trading from 1.0000. `where_to_convert` IS THE ACTIONABLE PART: the cheapest and dearest conversion venue and the bp/USD penalty between them. Measured at 13.5x-17x on USDT and 27.7x on USDC, and the winner ROTATES with size because these books are shallow enough that the usual winner runs out — Kraken wins to $2.5M and loses to Bitfinex at $5M. CAPACITY IS THE PART THAT SURPRISES PEOPLE. The USD/stablecoin books are thin relative to the coin books they feed, so a size that walks a coin book comfortably can exhaust the currency book outright. `size_exceeds_capacity` is a hard wall, not a cost. par_offset_bp is NOT charged as a cost — a desk that buys and later sells the same stablecoin is flat to it. Do not add it to the round-trip figure. `notional_usd` = the size to price. Requires an EnsoTrade Pro API key.

leg_rates input schema
{
  "type": "object",
  "properties": {
    "notional_usd": {
      "type": "number",
      "default": 5000000
    }
  },
  "additionalProperties": false
}
leg_rates output schema
{
  "type": "object",
  "additionalProperties": true
}
post_value — Post Value
Advertised by the server during the last successful anonymous check.

What POSTING a resting order is worth versus CROSSING the spread, per venue, for a crypto perp. Use for "should I use a limit order or market order", "what does paying the spread cost me", "which venue should I quote on", "is it worth being passive here", "maker vs taker". Returns per venue: the current spread in bp, taker and maker fee, the value of posting per side, and the round trip (2x, because a position is opened and closed). Ranked by posting value. Pass `notional_usd` to price the crossing side as the real walk down the book instead of half the spread — a larger and more honest number at size. MEASURED across 54 coin-venue pairs: median 4.09bp per side / 8.17bp round trip, mean 4.63bp, p90 6.72bp. Wide-spread names go much further (ARB 20.31bp round trip, OP 19.33bp, DOT 19.70bp). Note SOL at a 0.13bp spread is still worth 4.07bp per side — on a tight book the whole of the value is the maker/taker FEE DIFFERENTIAL, which does not shrink as spreads tighten. That is a floor, and it is why this holds up on liquid majors where cheapest_venue has almost nothing to choose between. YOU MUST STATE THIS WHEN QUOTING ANY NUMBER FROM THIS TOOL: it is the SIZE OF THE PRIZE, NOT THE PROBABILITY OF WINNING IT. A resting order that never fills does not save the spread, it costs the trade, and that is routinely worth more than the basis points here. EnsoTrade does NOT estimate fill probability — that needs order-book time series this service does not log — and does not approximate it. Never present posting as free money. Also read `cross_vs_post`: the best venue to POST on is frequently NOT the best venue to CROSS on, because maker fees and spreads rank venues differently from depth. Where they differ, the answer is to rest on one and take on the other. `coin` = ticker e.g. 'sol'. Requires an EnsoTrade Pro API key.

post_value input schema
{
  "type": "object",
  "required": [
    "coin"
  ],
  "properties": {
    "coin": {
      "type": "string"
    },
    "side": {
      "type": "string",
      "default": "buy"
    },
    "notional_usd": {
      "type": "number",
      "default": 0
    }
  },
  "additionalProperties": false
}
post_value output schema
{
  "type": "object",
  "additionalProperties": true
}
post_map — Post Map
Advertised by the server during the last successful anonymous check.

Universe-wide maker/taker table: for each liquid crypto perp, the best venue to post on and the round-trip prize, sorted widest-first. Use for "where is being passive worth the most", "which coins should I be quoting rather than taking", "rank my book by spread capture". Same honesty requirement as post_value and it is not optional: these are prizes CONDITIONAL ON BEING FILLED. No fill probability is estimated anywhere in the response. Say so. `coins` = optional comma-separated list (default: the liquid crypto perp universe by volume). `notional_usd` = optional; supplying it prices crossing as the real book walk and adds the best-venue-to-cross comparison per coin. `limit` = how many coins, max 40. Requires an EnsoTrade Pro API key.

post_map input schema
{
  "type": "object",
  "properties": {
    "side": {
      "type": "string",
      "default": "buy"
    },
    "coins": {
      "type": "string",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "default": 20
    },
    "notional_usd": {
      "type": "number",
      "default": 0
    }
  },
  "additionalProperties": false
}
post_map output schema
{
  "type": "object",
  "additionalProperties": true
}
fetch_series — Fetch Series
Advertised by the server during the last successful anonymous check.

Raw time series for one field on one symbol, oldest-first, capped at 1000/1500 points. Use this to explore what a field actually looks like before wiring it into test_formula. Requires an EnsoTrade Pro API key. `symbol` e.g. 'SOL' or 'SOLUSDT'. `timeframe="scalp"` (default): WDE order-flow microstructure, second-scale. `field` is one of mid, spread_bp, signal, toxicity, cost_bp, ret_1s_bp, ret_5s_bp, ret_30s_bp, ret_60s_bp (top-level), or ofi1, ofi5, dofi, qi, mp, obi, tf1, tf5, tf30, run, inten, vpin, wall, bid_pr, ask_pr, sigma1m (order-flow features). `hours` max 168. Coverage is uneven and only covers whatever windows the WDE panel was actively open for a symbol — SOL and BNB have the most logged history, other symbols may return no rows for a recent window; widen `hours` or try a different symbol if so. `timeframe` = "15m", "1h", "4h", or "1d" for day/swing work: real OKX perp candles instead of order-flow logs (always available, not dependent on the WDE panel being open). `field` is one of open, high, low, close, volume, ret_pct (bar-over-bar % return), range_pct (bar high-low as % of close), body_pct (close-open as % of open), rsi14, vol_ratio (volume vs its 20-bar average). `hours` max ~1500 bars worth (e.g. up to ~62 days for "1h").

fetch_series input schema
{
  "type": "object",
  "required": [
    "symbol",
    "field"
  ],
  "properties": {
    "field": {
      "type": "string"
    },
    "hours": {
      "type": "number",
      "default": 6
    },
    "symbol": {
      "type": "string"
    },
    "timeframe": {
      "type": "string",
      "default": "scalp"
    }
  },
  "additionalProperties": false
}
fetch_series output schema
{
  "type": "object",
  "additionalProperties": true
}
test_formula — Test Formula
Advertised by the server during the last successful anonymous check.

Invent a formula over EnsoTrade's data, and get back whether it actually predicts forward returns — validated on a holdout split, not just fit to the whole window. `formula` is a math expression combining any of the fields listed in fetch_series' docstring (for the same `timeframe`) with +, -, *, /, **, %, unary +/-, and abs/min/max/ sqrt/log/log1p/exp/sign/clip/mean/std, e.g. "ofi1 * vpin - dofi / 2" or "sign(qi) * sqrt(abs(obi))". No other Python is executed — this runs through a restricted, default-deny expression evaluator, not eval(). `timeframe="scalp"` (default, WDE order-flow, second-scale): `horizon` is which forward return to correlate against — ret_1s_bp, ret_5s_bp, ret_30s_bp, or ret_60s_bp. `hours` max 720 (30 days). `timeframe` = "15m"/"1h"/"4h"/"1d" for day/swing strategies (real OKX candles, always available): use `horizon_bars` instead of `horizon` — the forward % return N candles ahead (e.g. horizon_bars=4 on timeframe="1h" = predicting the move 4 hours out). `hours` max ~1500 bars worth; a small `hours` still fetches at least 150 bars (the minimum needed for a meaningful 70/30 split) rather than failing outright, so the actual window tested can be wider than requested for a small `hours` value. Either mode needs enough rows that a 70/30 split leaves >=150 total. Returns train (first 70% chronologically) and holdout (untouched final 30%) Spearman/Pearson correlations plus a verdict: 'validated' only if holdout |spearman| >= 0.15 AND same-signed as train — this guards against keeping a formula that only looked good by chance on one slice of data. ALSO returns, computed on the holdout portion only: - `net`: risk-adjusted performance AFTER trading costs — sharpe, sortino, max_drawdown_pct, calmar, ann_return_pct, ann_volatility_pct, win_rate_pct, profit_factor. Sharpe is annualized and corrected for overlapping horizons (a horizon spanning N bars sampled every bar is subsampled to non-overlapping periods first, which removes the ~sqrt(N) inflation naive Sharpe would show). - `gross`: the same metrics before costs, so the cost drag is visible. - `costs`: fee/slippage assumptions, position_changes (turnover), total_cost_pct. Costs are charged on position CHANGES only, not per bar — holding one side is cheap, flipping every bar is not. - `cost_verdict`: survives_costs / marginal_after_costs / killed_by_costs / unknown. IMPORTANT: `verdict` is a correlation test and says nothing about profitability; a formula can be 'validated' and still be killed_by_costs. Check both. - `walk_forward`: the same formula re-scored on 5 consecutive time blocks, with consistency_pct (share of blocks agreeing on direction) and a `stable` flag. An edge that passes one holdout but flips sign between blocks is usually noise. `fee_bp`/`slippage_bp` are per side, defaulting to 5bp taker + 2bp slippage; raise them for illiquid coins or a worse fee tier. Iterate: call this repeatedly with different formulas, keep what validates AND survives costs, discard what doesn't. Requires an EnsoTrade Pro API key.

test_formula input schema
{
  "type": "object",
  "required": [
    "symbol",
    "formula"
  ],
  "properties": {
    "hours": {
      "type": "number",
      "default": 24
    },
    "fee_bp": {
      "type": "number",
      "default": 5
    },
    "symbol": {
      "type": "string"
    },
    "formula": {
      "type": "string"
    },
    "horizon": {
      "type": "string",
      "default": "ret_30s_bp"
    },
    "timeframe": {
      "type": "string",
      "default": "scalp"
    },
    "slippage_bp": {
      "type": "number",
      "default": 2
    },
    "horizon_bars": {
      "type": "integer",
      "default": 4
    }
  },
  "additionalProperties": false
}
test_formula output schema
{
  "type": "object",
  "additionalProperties": true
}
save_strategy — Save Strategy
Advertised by the server during the last successful anonymous check.

Save a formula as a strategy IF it currently validates. Re-runs test_formula itself server-side first — never trusts a stale claim from an earlier call, since data moves — and only saves when that fresh verdict is 'validated'. Saved strategies appear in the user's own EnsoTrade dashboard under Strategies; they're private to that account, not published or shared with anyone else. Same parameters as test_formula: `symbol`/`formula` as usual, `timeframe`="scalp" (use `horizon`) or "15m"/"1h"/"4h"/"1d" (use `horizon_bars`), `hours` = history window tested. `label` is an optional short name for the strategy (e.g. "BTC 1h RSI reversion"). Requires an EnsoTrade Pro API key.

save_strategy input schema
{
  "type": "object",
  "required": [
    "symbol",
    "formula"
  ],
  "properties": {
    "hours": {
      "type": "number",
      "default": 24
    },
    "label": {
      "type": "string",
      "default": ""
    },
    "symbol": {
      "type": "string"
    },
    "formula": {
      "type": "string"
    },
    "horizon": {
      "type": "string",
      "default": "ret_30s_bp"
    },
    "timeframe": {
      "type": "string",
      "default": "scalp"
    },
    "horizon_bars": {
      "type": "integer",
      "default": 4
    }
  },
  "additionalProperties": false
}
save_strategy output schema
{
  "type": "object",
  "additionalProperties": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

1 advertised

market_glossary

Advertised by the server during the last successful anonymous check.

How to read every non-obvious number EnsoTrade's tools return.

market_glossary URI
ensotrade://glossary

MIME type: text/plain

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2632 ms
95th percentile latency
2632 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2632 ms · metadata changed · 22 tool(s), 1 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ensotrade-mcp https://www.ensotrade.tech/mcp/

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ensotrade-mcp --url https://www.ensotrade.tech/mcp/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ensotrade-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ensotrade-mcp": {
      "url": "https://www.ensotrade.tech/mcp/"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ensotrade-mcp": {
      "type": "streamableHttp",
      "url": "https://www.ensotrade.tech/mcp/",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ensotrade-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ensotrade-mcp": {
      "type": "http",
      "url": "https://www.ensotrade.tech/mcp/"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ensotrade-mcp https://www.ensotrade.tech/mcp/

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.ensotrade.tech/mcp/

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ensotrade-mcp": {
      "serverUrl": "https://www.ensotrade.tech/mcp/"
    }
  }
}

Let your agent find its tools

Find servers like EnsoTrade MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run EnsoTrade MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing