Backtesting Arena vs FiatDock

A side-by-side look at the Backtesting Arena and FiatDock MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Backtesting Arena logoBacktesting ArenaFinance & Fintech · Remote HTTP/SSECrypto backtesting & Bitcoin cycle analytics. Point-in-time, DSR-corrected, look-ahead-aware.60GoodAuth: api key requiredFiatDock logoFiatDockFinance & Fintech · Local subprocess (stdio)MCP marketplace: agents pay per call in USDC via x402. Plus Base chain data and a USDC<->bank ramp.64GoodAuth: not declared

Verdict: choose Backtesting Arena for finance & fintech work over a hosted endpoint; choose FiatDock for finance & fintech as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Backtesting Arena logoChoose Backtesting Arena when

  • You need dedicated capabilities in the Finance & Fintech domain.
  • You prefer a remote HTTP/SSE transport.
  • Its auth model fits you: API key required.
  • You want tools like arena_get_pulse, arena_get_cycle, arena_get_spot_price.
Explore Backtesting Arena

FiatDock logoChoose FiatDock when

  • You need dedicated capabilities in the Finance & Fintech domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: AGENT_PRIVATE_KEY, FIATDOCK_TOOLS.
  • You want tools like get_quote, get_order_status, token_price.
Explore FiatDock

Feature & specification comparison

Rows where the two servers differ are marked.

SpecBacktesting Arena logoBacktesting ArenaFiatDock logoFiatDock
CategoryFinance & FintechFinance & Fintech
Quality signal60/100 · Good64/100 · Good
Install commandConfirmedConfirmed
TransportRemote HTTP/SSELocal subprocess (stdio)
AuthAPI key requiredNot declared
PricingFreemiumNot declared
Required env varsNone listedAGENT_PRIVATE_KEYFIATDOCK_TOOLS
Verified ownerCommunity listingCommunity listing
GitHub stars01
Directory activity 6 views 0 installs 0 upvotes 2 views 0 installs 0 upvotes
Tools4948

Tools & capabilities

Backtesting Arena tools 49

  • arena_get_pulseHow hot is the Bitcoin market today? Daily 0-100 heat score for the Bitcoin market, aggregated from 8 components (BTC-Cycle, F&G, Altcoin-Season, Bullmarket-Ampel, Funding-Rate, Hash-Ribbons, Mayer-Multiple, MVRV-Z). Returns score, band label, color, 7d/30d delta, verdict, components breakdown, plus score_percentile ranking today’s score against its own history (e.g. 42 = 44th percentile — how hot/cold vs history, not just the raw number). score_semantics says which value you hold: the daily snapshot frozen once a day by the cron, or — before that cron has run for today — a live preliminary that still moves and whose percentile/deltas compare against frozen snapshots. band_driver names the number the band follows. Pass fields="full" for `drivers[]`: each component with value, weight, contribution (they add up to the score) and percentile_rank against its own history. [Free tier]
  • arena_get_cycleCrypto cycle position — where are we in the cycle? Default BTC: point-in-time 9-indicator aggregation (Pi-Cycle Top & Bottom, Mayer Multiple, weekly RSI, 200-week-MA distance, halving position, Fear & Greed, BTC-dominance trend, mining-difficulty trend — each indicator’s 0-100 sub-score is in the score_* fields; the weights are in drivers[] under fields="full"; components without input are excluded and weights renormalized, see indicator_coverage). Includes an `ath` block (E32): ATH on UTC daily-close basis with ath_date, days_since_ath and drawdown_from_ath_pct vs BOTH the scoring price and the live spot. Pass asset=ETH or asset=SOL for a per-coin cycle read built from the transferable price-derived indicators (Mayer, weekly-RSI, 200-week-MA distance) with renormalized weights; BTC-native indicators (halving, dominance, mining, F&G, Pi-Cycle) are returned as `not_applicable` rather than faked. All return raw + Z-Score, signal enum, and a `percentiles` block ranking each indicator against that asset’s own history. The `signal` enum is a FIXED SCORE-BAND LABEL (<25 accumulation · 25–45 recovery · 45–60 expansion · 60–75 distribution · ≥75 overheated), not an independent market-phase detection: the 45–60 band is the neutral middle, so a mid-band score reads "expansion" even in a drawdown market — the label describes the score band, not the market. BTC additionally returns `highlights[]` (rule-based markers for currently unusual indicator values — descriptive, versioned ruleset; empty array = nothing unusual) and `price_context` (price at scoring time vs live spot with drift % — the scores rest on the scoring-time price). Point-in-time scored — not reconstructable from a generic price API. The volatility series itself is arena_get_volatility_history; this tool carries the regime context around it. score_fields_note explains the four score fields: z_score/z_adj_score are the composite standardized against its own history and mapped back onto the 0-100 scale, NOT statistical z-values; halving_context.ath_days_after_halving puts the observed cycle high next to days_since_halving. Pass fields="full" (BTC) for `drivers[]`: each indicator sub-score with its renormalized weight, contribution (they add up to raw_score — the input of the z_adj_score that `signal` follows) and percentile_rank against its own history. Related: arena_get_historical_analog (what followed states like this one), arena_get_bullmarket_ampel, arena_get_pulse. [Free tier]
  • arena_get_spot_priceCurrent BTC, ETH and SOL spot price — what is Bitcoin (or ETH/SOL) worth right now? Live USDT-quoted last price plus 24h change %, high and low from Binance. Use this to anchor the connector’s own analytics (cycle, historical-analog, gem scores) with the current market price instead of switching to web search mid-analysis. [Free tier]
  • arena_get_stablecoin_supplyAggregate stablecoin supply (crypto-liquidity proxy) — is the liquidity impulse turning or accelerating? macro_regime only gives the 30d delta; this exposes the trend: current supply, 30d/90d change (USD + %) plus a daily time series (`days`, default 365; `resolution` states points and spacing) so direction and speed are visible, not just a single delta. Read `impulse` for what the supply change is doing — four states (accelerating / decelerating / reversal / flat). The neighbouring `acceleration_usd` is the signed difference last-30d minus prior-30d and gets LARGE exactly when the trend reverses, while the older boolean `accelerating` requires the same direction AND a bigger magnitude; a reversal therefore shows a big `acceleration_usd` next to `accelerating: false`. Source DefiLlama peggedUSD. [Free tier]
  • arena_get_etf_flowsSpot-ETF net flows (USD millions) — is the flow impulse turning or accelerating? The summary only gives point-in-time deltas; this exposes the trend: 30d/90d net flow, a direction label (inflows/outflows/flat) and a daily series (every US trading day: cumulative inflow + that day's net flow; `resolution` states points and spacing) so direction and speed are visible, not just a single delta. Read `impulse` for what the flow is doing — it has four states (accelerating / decelerating / reversal / flat) and is the field to quote. Two neighbouring fields measure different things and are easy to confuse: `acceleration_usd_m` is the signed difference last-30d minus prior-30d and gets LARGE precisely when the flow reverses, while the older boolean `accelerating` requires the same direction AND a bigger magnitude — so a swing from outflows to inflows shows a big positive `acceleration_usd_m` together with `accelerating: false`, which is correct and reads like a contradiction. `impulse` reports that case as 'reversal'. When `impulse` is 'reversal', `reversal_recovered_pct` says how much of the preceding counter-move has actually come back, with its denominator in `reversal_basis_usd_m` — quote it alongside, because a reversal in direction is not yet a reversal in the stock. Both are null otherwise. `source_inconsistencies` lists the days on which the source's own daily net flow and the change of its cumulative disagree (BTC: 2 of ~700 days, 2026-04-23/24 — the two-day sum matches, the day split does not); cumulative deltas and the 30d/90d windows are unaffected, per-day sums over those dates are. NYSE closing days that the source still lists come back with net_flow_usd_m null and market_closed: true (a closed market is not a zero flow). `availability` states when a day's flow was first known (measured from our own ingest; the source has no publication time) — use it for point-in-time work. For long windows pass `format: 'columns'` (parallel arrays, far smaller). Default BTC; pass asset=ETH, SOL, XRP, LTC, HBAR, DOGE, LINK, AVAX or DOT (US spot ETFs; the last seven have stored history only from 2026-09-21, so their 30d/90d windows are null until covered — `note` says so). No ZEC or NEAR ETF data. Source SoSoValue. [Free tier]
  • arena_get_altcoin_seasonIs it altcoin season? Daily Altcoin-Season indicator (v7 Native-Filter methodology). Returns BTC-, alt- and stablecoin dominance, the 4 Layer-1 signals (alt_dominance, total_market_cap, btc_dominance, stable_dominance — weekly smoothed-Heikin-Ashi directions; weights in methodology.layer1), overall color (red/yellow/green) and Layer 2: altcoin_season_pct (share of top-50 alts beating BTC over 90 days) with altcoin_season_pct_basis (beating / eligible / expected — coins without a 90-day return drop out of the denominator) and altcoin_season_pct_provenance (grade full/partial/thin; fields="full" names the missing coins), plus the top-30 CoinGecko snapshot. [Free tier]
  • arena_get_fear_greedHow fearful or greedy is the market right now? Crypto Fear & Greed Index (alternative.me). Returns the current `value` (0-100) and `classification` (extreme fear / fear / neutral / greed / extreme greed) as their own fields, plus `history` — the last 90 daily readings by default, so you can see whether today is a move or a plateau. The window is capped in SIZE but free in POSITION: `end_date` moves it anywhere in the history since 2018 (e.g. end_date=2025-10-06 reads the sentiment around the October 2025 top), and the `range` block states requested / granted / available days with the reason — a short series here is a window, not a young index. On Pro and Elite two Arena-derived blocks add what the upstream index does not publish: `cadence` (how far smoothed sentiment has travelled versus ~90 days ago) and `tempo` (how FAST the index is moving — 7d and 30d change ranked as a rolling percentile against three years of same-direction moves, not a fixed threshold; rank compares with its own history, not with "normal"). On Free both blocks are present but their values are null with a stated reason. For the regime around a reading use arena_get_cycle; for what followed comparable sentiment states use arena_get_historical_analog(preset="deep_fear"). [Free tier · cadence/tempo Pro+]
  • arena_get_bullmarket_ampelIs this still a bull market? Bitcoin Bullmarket-Ampel current state (0-5 active stages). Returns active_count, a stages[] breakdown (each stage with key, label, active and `since` = first day of its current state; null when the state predates the 400-day lookup) and stage_history — per day active_count PLUS all five per-stage booleans, so which stage flipped when is readable directly (history_days 1-365, default 30). Higher count = more bull-market signals firing. Stages evaluate weekly 20W/50W-MA conditions. [Free tier]
  • arena_get_funding_rateAre longs or shorts paying right now? Latest BTC perpetual funding rate, averaged across up to 4 exchanges (Binance, Bybit, OKX, Deribit; 8h settlement cadence). Returns the day's averaged value plus each exchange's own value (no moving average or Z-score — for the history use arena_get_funding_rate_history via arena_call_extended). Positive = longs pay shorts (bullish bias), negative = shorts pay longs (bearish bias). Read `coverage` before comparing values across dates: it says how many exchanges stand behind that day (4 = full average, 1 = a single exchange), and a day-over-day move can be a change in composition rather than in the market; `venues_present`/`venues_missing` name the exchanges. `provenance` grades the average (full = all exchanges, partial, thin = under half — never a basis for a verdict); fields="full" adds the venue spread in bps and the min/max interval of the venue values. A value of exactly 0.0001 (0.01 % per 8h) on many days is the exchanges' base-rate clamp on USDT perpetuals, not a cap in our pipeline: it means "no premium beyond the base rate", and values above it are real market readings. [Free tier]
  • arena_get_macro_regimeWhat is the macro backdrop doing? Daily Macro Regime snapshot from 18 components in 6 tiers (Liquidity 30%, Financial Conditions 20%, Risk Appetite 15%, Crypto Liquidity 10%, Business Cycle 15%, Inflation/Real Rates 10%). FRED-sourced. Returns composite_score (0-100), regime_label (risk_off/neutral/risk_on_leaning/risk_on), cycle_phase_label (contraction/early_expansion/mid_expansion/late_expansion), matrix_quadrant (sweet_spot/late_cycle_warning/crisis/recovery), tier_scores (6 sub-scores), components (flat key/value of all 18), plus stale_components_detail dating each stale input (last_good_date + age_days + discontinued flag for series the upstream has retired for good) so freshness is quantified, not a vague caveat. Two component keys mean something narrower than their name suggests, so read them carefully: `vix_score` is the derived 0-100 score (a value of 71 means VIX around 18.6), NOT the VIX index level — the raw Cboe level is not redistributed over this channel; and `broad_dollar_index` is FRED DTWEXBGS (Broad USD Index, Jan 2006 = 100), NOT the ICE DXY, so readings near 120 are normal. `fed_funds_rate` is FRED FEDFUNDS, the monthly AVERAGE effective rate (lags; not the daily DFF, not the target range); `global_m2_yoy` is NOT M2 but the YoY change of G3 central-bank balance sheets (Fed+ECB+BoJ in USD) — it can fall while US M2 hits a record. component_notes carries these definitions in the payload. The former names `vix` and `dxy` were removed on 2026-09-01 after their announced deprecation window; `consumer_confidence_value` went with them (OECD retired the series, frozen since 2024-01-01, never weighted in the composite). `provenance` says how many of the 18 weighted components formed today’s composite (grade full/partial/thin; null for rows written before 2026-10-13, when coverage was not recorded); missing components drop out and the tier renormalizes, a tier with no input at all scores a stand-in 50 and is named in `degraded.empty_tiers`. Pass fields="full" for the named missing components, sources and per-tier provenance. `move_index` and `fed_funds_cuts_priced` are always null and never weighted — slots without a source, not outages. [Free tier]
  • arena_get_btc_market_structureIs the trend up or down, and how fresh is the flip? Daily Bitcoin market structure from 1000-bar Phantomflow adaptation (BTCUSDT 1d). Returns current_trend (up/down/sideways), last trend change timestamp, counts of waves + fractals, last-5 fractals on each side (up = pivot highs, down = pivot lows), and trend_context: previous trend + its duration, flip_age_days, and a descriptive historical flip base rate over the SAME 1000 bars (total flips, share reverted within 5 bars, median trend duration) — a fresh same-day flip is the least settled observation — the base rate tells you how often such flips reverted historically, so you can weight the current one yourself. Educational analysis of price action. [Free tier]
  • arena_get_key_levelsWhich price levels matter above and below spot? Reproducible Bitcoin structural levels on BOTH sides of spot, in TWO distinct provenance classes. (1) resistance/support: swing-pivot clusters — where past pivot highs+lows cluster into price zones (touch-count, band, last-touch date, signed distance), resistance above spot, support below, nearest-first. (2) indicator_levels.above / .below: named indicator STANDS as marks — 200-day & 200-week simple moving averages, short-term-holder cost basis, Pi-Cycle legs — each carrying its source, formula and as_of date. The two classes are kept separate on purpose: pivots are where price REACTED before, indicator levels are where an indicator STANDS now. Both are measured price clusters: they say where trading has concentrated, not where anyone defends a level. [Free tier]
  • +37 more on the listing page

FiatDock tools 48

  • get_quoteFree quote before paying: the exchange rate and exactly how much lands in the bank (or wallet) NET of every provider fee — that net figure is the number to decide on. Executable estimate, not a locked rate. side=SELL (USDC->fiat) or BUY (fiat->USDC).
  • get_order_statusCheck the status of an on/off-ramp order by partnerOrderId.
  • token_priceFREE real-time price snapshot for any EVM token by contract address: USD price, 5m/1h/6h/24h change, liquidity, 24h volume, market cap/FDV and the most-liquid DEX pair (DexScreener). Or pass a major symbol (ETH/BTC) for a Coinbase spot price. Read-only, free.
  • search_servicesFind paid + free MCP services other agents have published on the FiatDock marketplace. Returns matching listings (id, name, summary, price, category, seller, verified, gatewayUrl), best match first when q is given (otherwise newest, or the sort you pass), capped at 20 per call — pass limit for more, or q/category to narrow. Use get_service for full detail and call_service to invoke one. Read-only, free.
  • get_serviceFull detail for one FiatDock marketplace listing, including how to call it: PAID listings route through the gateway via call_service (the 402 lists what to pay); FREE/first-party listings expose their real MCP endpoint to call directly. Read-only, free.
  • search_x402Find any pay-per-call x402 endpoint on the internet — the public x402 index (~15,000 priced endpoints from hundreds of hosts), not only FiatDock's own marketplace. Ranked by relevance, then by paid calls in the last 30 days (the demand signal), then by distinct payers. Each row carries the URL, the price the index recorded, the network, where the money goes, and the 30-day call/payer counts; call_x402 then reads the endpoint's own 402 and pays it directly from your wallet — FiatDock takes no fee and never touches the money. Read-only, free. Use search_services for FiatDock marketplace listings, which carry health, schemas and a call hint that the public index does not.
  • create_offramp_sessionConvert the agent's USDC to fiat in the owner's OWN bank account. Returns a checkoutUrl to forward to the human owner (valid ~2 hours) and a partnerOrderId to track — pass the owner's `email` and the server ALSO emails the checkout link to them automatically (the response echoes emailedTo). Paid endpoint ($0.01 USDC via x402) — this package pays it automatically from AGENT_PRIVATE_KEY, so the call succeeds without you seeing a 402. COMPLIANCE: own-account rule — the sending wallet and the receiving bank account must belong to the SAME person (the agent's owner); no third-party funds, no aggregation, no P2P transfers. 18+; service area: Portugal + supported EU/EEA countries (NOT the UK). Crypto is volatile; not investment advice.
  • create_onramp_sessionBuy USDC with the owner's OWN fiat and deliver it to the agent's wallet (address locked). Returns checkoutUrl (valid ~2 hours) + partnerOrderId. Paid endpoint ($0.01 USDC via x402) — this package pays it automatically from AGENT_PRIVATE_KEY, so the call succeeds without you seeing a 402. COMPLIANCE: own-account rule — the sending wallet and the receiving bank account must belong to the SAME person (the agent's owner); no third-party funds, no aggregation, no P2P transfers. 18+; service area: Portugal + supported EU/EEA countries (NOT the UK). Crypto is volatile; not investment advice.
  • token_safetyPAID ($0.0045 USDC via x402, paid automatically). On-chain safety verdict for any EVM token BEFORE you trade it: honeypot detection, buy/sell tax, contract-verified, owner privileges (mint / blacklist / pausable / hidden owner / balance-modify), holder concentration, LP-locked %, CEX listing and live DEX liquidity (GoPlus Security + DexScreener). Returns verdict safe|caution|danger with the exact risks. Not financial advice.
  • stablecoin_intelPAID ($0.002 USDC via x402, paid automatically). Supply, peg health and per-chain breakdown for USDC and other stablecoins: total circulating supply, deviation from the $1.00 peg, peg mechanism, the amount circulating on Base (with its share of total) and the top chains by supply (DefiLlama). A treasury/payments agent uses it to check its settlement asset is healthy.
  • gas_pricePAID ($0.001 USDC via x402, paid automatically). The current Base gas price in wei and gwei — a gas-aware agent samples it before submitting a tx. On any RPC failure the call returns 4xx/5xx and is NOT charged.
  • block_numberPAID ($0.001 USDC via x402, paid automatically). The latest Base block number plus its timestamp — a freshness/liveness probe for the chain head. On any RPC failure the call returns 4xx/5xx and is NOT charged.
  • +36 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Backtesting Arena

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "backtesting-arena": {
      "url": "https://tradingstrategies.work/api/mcp"
    }
  }
}

FiatDock

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "fiatdock": {
      "command": "npx",
      "args": [
        "-y",
        "fiatdock-mcp"
      ],
      "env": {
        "AGENT_PRIVATE_KEY": "YOUR_AGENT_PRIVATE_KEY_HERE",
        "FIATDOCK_TOOLS": "YOUR_FIATDOCK_TOOLS_HERE"
      }
    }
  }
}

Frequently asked questions

Backtesting Arena is categorized under Finance & Fintech and uses a remote HTTP/SSE transport. FiatDock belongs to Finance & Fintech and uses a local stdio subprocess. Pick Backtesting Arena for finance & fintech work and FiatDock for finance & fintech.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Backtesting Arena is listed as freemium — a free tier with paid plans. Auth: api key required. FiatDock has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add backtesting-arena and fiatdock as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Backtesting Arena has a quality signal of 60/100 (Good) with 6 views, 0 installs and 0 GitHub stars. FiatDock has 64/100 (Good) with 2 views, 0 installs and 1 GitHub stars.