MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Communication & messaging

io.github.fnobbe/crashtestyourstrategy

Portfolio and strategy stress diagnostics with hedge-break detection and regime outlook. Free tier.

Checks passed
14 / 22

0 failed · 8 not measured

Median response
125 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
24

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 125 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name crashtestyourstrategy.ai.

  • Pass
    Lists tools

    tools/list returned 24 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 125 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 125 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    57 of 57 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Not measured
    Website matches publisher

    This namespace is not a reverse domain, so the website comparison does not apply.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Pass
    Repo owner matches

    The GitHub repository owner matches the namespace login.

  • Pass
    Recently updated

    Updated 2026-08-01T06:20:50.002796Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using io.github.fnobbe/crashtestyourstrategy

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http io-github-fnobbe-crashtestyourstrategy https://mcp.crashtestyourstrategy.ai/mcp

Capabilities

Tools 24

backtest_integrity

USE WHEN you have a backtest result (Sharpe, trials tried, window) and want to know whether it is likely overfit. Given an annualized Sharpe, the number of configurations tried and the window (YYYY-MM-DD), returns the DEFLATED Sharpe (the expected maximum Sharpe by chance grows with the trial count: Bailey & Lopez de Prado), which CRISIS regimes the window never contained, and a base-rate caveat. An unknown trial count flags the Sharpe as not-deflatable / UNPROVEN. All inputs optional; give as many as known. Descriptive, not advisory.

Discovered
build_portfolio

FULL TIER ONLY. Use when you want to stress a portfolio of arbitrary tickers, or construct a low-drawdown one from a universe. On this free endpoint the call returns the coded error UPGRADE_REQUIRED with how to get a token. Free alternative: portfolio_stress_test for books made of SPY, TLT, GOLD and BTC.

Discovered
challenge_strategy

USE WHEN you want to know which market regimes break a strategy (buy_and_hold or rsi_30_70) and why. Adversarial evaluation in 3 layers: (1) outcome metrics in the worst regimes, (2) a vulnerability profile over 8 dimensions with severity, (3) the regime descriptors that couple most strongly to failure. Only strategies in the pre-computed outcome matrix can be challenged: 'buy_and_hold' and 'rsi_30_70' ('-' accepted for '_'). `asset` (optional) limits the worst-regime list to one catalogue asset; the vulnerability profile still spans all 63 regimes. Other strategies: tier2_stress_test (full tier, needs an access token). Vocabulary: ontology://strategy-vulnerabilities.

Discovered
describe_regime

USE WHEN you want to understand what one named synthetic regime is, and its nearest historical episodes. Single-regime introspection: median behavioural descriptors, z-scores vs the catalogue (what makes THIS regime distinct), an English characterisation, the 2 nearest neighbours, the nearest real historical episodes and a stylized-facts audit against real history. find_similar_regime ranks neighbours of a target; this says what one regime IS.

Discovered
factor_decomposition

USE WHEN you suspect a capital-diversified portfolio hides one dominant risk factor. A portfolio can be capital-diversified while its RISK is dominated by one factor. Returns the Euler risk contribution of each holding (RC_i = w_i*(Sigma*w)_i / w'Sigma*w, summing to 1) beside the capital weights, from the empirical covariance of real returns. Proxies: SPY=equity beta, TLT=duration, GOLD=real asset, BTC=crypto. E.g. a 60/40 is ~83% equity risk, a 50/50 SPY/BTC ~86% BTC risk. Descriptive, not advisory.

Discovered
find_similar_regime

USE WHEN you want the synthetic regimes closest to a profile or to a descriptor target. Nearest-neighbour search over the regime catalogue. Give EITHER reference_profile_hint (that bundle's median descriptors become the target) OR descriptor_target (partial {descriptor: value}; only given dimensions count). `asset_filter` restricts to one asset. Returns top_n matches with similarity (0..1), z-score distance and per-descriptor signed deltas that show WHY it matched. Valid hints and descriptor names: get_started.

Discovered
get_dossier

USE WHEN you want one citable record of the diagnostics you ran, with their gate flags. Every enveloped response is recorded by request_id. Give request_ids from your own responses (compiled chronologically) or last_n for your own most recent entries (API token required). Returns the entries with their gate signals (revision_required + grounding_summary) and a ready-to-cite markdown document; the dossier's own revision_required is true when any listed entry carried a gate flag (it does not know whether you later revised). One entry's full payload and call manifest: get_run. A factual record, never advisory.

Discovered
get_investment_thesis

USE WHEN you want the full framework, portfolio and stress evidence of one thesis slug. Returns the framework (pillars with [E]/[M]/[K] evidence grades, falsifiers), the rule-based portfolio (asset blocks x conservative/balanced/offensive weights + sizing rationale) and the stress evidence (per-tier backtest, per-regime drawdown, historical episodes, claim verdicts marked by whether their rule was pre-registered, hedge behaviour). Slugs: list_investment_theses. Descriptive, not advisory; the agent decides suitability.

Discovered
get_regime_data

USE WHEN you want the raw price series behind a synthetic regime or a historical episode, to recompute a claim yourself. source='historical' + ref=<case_id> returns a real-market anchor episode (dates, closes; OHLCV with include_ohlcv) and the descriptors computed on it; source='synthetic' + ref=<profile_hint> [+ seed] returns one cached replica (closes, warmup_index) and its descriptors. An empty ref lists the available ids and sample seeds. Recompute the descriptors from the closes to verify any claim the platform made. Same data as the regime-data:// resources, for clients that cannot read resources.

Discovered
get_run

USE WHEN you want to see exactly how an earlier result was produced, or reproduce it. Returns the run manifest (tool, the arguments sent, the seed where the result has one, the data window, the release, the schema version) and the stored response of one earlier call, by request_id. Works for MCP and REST calls and needs no API token (a request_id is an unguessable capability). Entries recorded before manifests existed come back with tool and arguments marked unknown. Rerun with the same arguments to reproduce: seeds are fixed, so reruns are identical while the underlying data is unchanged.

Discovered
get_started

USE WHEN you are new here, or need the valid values and the right tool for a task. Returns, for this deployment's tier: the tools that exist and work, an intent-to-tool map, every valid value for the enumerated inputs (profile hints, strategy slugs, descriptor names, assets per tool, thesis slugs), the Generate/Challenge/Revise/Present workflow, sign and unit conventions, and how to get a full-tier token. Needs no arguments.

Discovered
historical_replay

FULL TIER ONLY. Use when you want a strategy's rules run on an asset's real price history, with buy-and-hold alongside. On this free endpoint the call returns the coded error UPGRADE_REQUIRED with how to get a token. Free alternative: backtest_integrity to check a backtest you already ran for overfitting.

Discovered
ips_gate

USE WHEN you have an Investment Policy Statement (drawdown tolerance, horizon, liquidity need) and want a portfolio checked against it. Flags a violation when the MEDIAN sustained drawdown exceeds max_drawdown_tolerance (a fraction, e.g. 0.15) or the tolerance is breached in a third or more of paths (the worst path and p90 may lie beyond it; see worst_stress); when time_horizon_years < 3 with a median drawdown of 15% or more; or when material holdings are less liquid than liquidity_need. A hard gate, not a score. Descriptive, not advisory.

Discovered
list_investment_theses

USE WHEN you want to browse the investment-thesis case studies. Each entry is a descriptive case study pairing an economic framework with a rule-based portfolio and its stress evidence. Returns one compact summary per thesis (slug, title, one-liner, tags, risk tiers, framework summary, headline finding). Full detail: get_investment_thesis(slug). Descriptive, not advisory; the agent decides suitability.

Discovered
list_strategies

USE WHEN you need to know which strategy slugs tier2_stress_test (full tier, needs an access token) accepts, with their rules and intended asset. Returns each catalogue slug with its plain-language rules, stop, take-profit, direction and the asset it is defined for (null = any ticker). Needs no arguments.

Discovered
long_horizon_stress

USE WHEN you want multi-year wealth paths for a savings plan or a withdrawal plan. Distribution of multi-year wealth paths for a savings plan (monthly_contribution) or a withdrawal plan (monthly_withdrawal, inflation-indexed by default) on a SPY/TLT/GOLD/BTC portfolio. Multi-year paths chain ~2y model blocks (block-bootstrap); long-run drift is RE-ANCHORED to stated round-number assumptions (overridable via long_run_drift; see assumptions.long_run_drift) while the model's path shape is kept; both are echoed. Costs are ON by default. Returns terminal-wealth quantiles (nominal + real), ruin/shortfall probabilities, a sequence-of-returns diagnosis and a drift sensitivity (assumptions - 2pp). Descriptive, not advisory; no rate, allocation or product is recommended.

Discovered
market_regime_map

USE WHEN you want to know what the market is doing now across 18 category proxies. One call, 18 category proxies (US large-cap + tech, 9 SPDR sectors, developed ex-US, emerging markets, long Treasuries, high-yield credit, gold, oil, Bitcoin): the operational regime, model-conditional regime probabilities on trading day 5 or 21, stress probability vs its baseline, a descriptive forward-return distribution conditional on the regime label, and an equity-factor commonality flag (US sectors re-express one factor). Per cell, only the tier that passed the preregistered out-of-sample rule ships (raw p<0.05, see tier_pvalues; tier_correction shows which survive a multiple-testing correction). No directional forecast. For one asset with as_of support: regime_outlook. Descriptive, not advisory.

Discovered
portfolio_compare

USE WHEN you revised a portfolio and want to know whether the revision made the tail better or worse. Compares A (reference) with B (candidate) on IDENTICAL simulated paths, so every delta is attributable to the weights, not seed noise. Returns drawdown-distribution deltas, probability-weighted scenario summaries, per-scenario deltas, the risk-concentration shift and which diversification failures B introduces or resolves. revision_required flags a B that deepens the worst-path drawdown or adds a failure. Provide holdings_a and holdings_b as [{asset, weight}]. Descriptive, not advisory; neither portfolio is ranked.

Discovered
portfolio_frontier

FULL TIER ONLY. Use when you want the whole return-versus-drawdown trade-off map for a set of tickers. On this free endpoint the call returns the coded error UPGRADE_REQUIRED with how to get a token. Free alternative: portfolio_compare for two SPY/TLT/GOLD/BTC books on identical paths.

Discovered
portfolio_stress_test

USE WHEN you want to stress a portfolio of SPY, TLT, GOLD and BTC across cross-asset regimes. Provide `holdings` as [{asset, weight}] (weights normalised; GLD accepted for GOLD, BTC-USD for BTC). Returns per regime (baseline / risk_off_crisis / rate_shock): return, worst-episode drawdown, per-leg decomposition and a cross_asset_finding (diversification_intact / hedge_holds / hedge_breaks / shared_drawdown / concentrated_loss), plus sustained drawdowns over the simulated paths. The joint correlation structure, including the bond hedge that can break under rate shocks, comes from a pre-computed substrate, so the call is instant. Optional `costs` ({rebalance: none|daily|monthly|quarterly|band, annual_costs: {asset: fraction}, transaction_cost_bps}) adds a cost_impact block paired on identical paths. Other tickers: build_portfolio (full tier, needs an access token) in assess mode (portfolios={name:{ticker:weight}}). Descriptive, not advisory.

Discovered
regime_outlook

USE WHEN you want the probability that SPY, QQQ, GLD or TLT is in each market regime on trading day 5 or 21. Model-conditional probabilities of BULL / SIDEWAYS / BEAR / CRISIS (operational trailing-vol/drift labels) on trading day 5 or 21, not at any point before it: stress tools answer 'what happens GIVEN regime X', this answers 'how likely is X from today's state'. Uses the preregistered covariate logit; persistence and unconditional baselines are reported beside it. On GLD at 21 days it did not beat persistence (p=0.64), so that cell uses persistence, as market_regime_map does; model.tier says which. Assets: SPY, QQQ, GLD, TLT (GOLD accepted for GLD). Optional as_of (YYYY-MM-DD) evaluates a past date. Class membership on a future day, not a forecast of returns or direction, not advisory.

Discovered
run_stress_test

USE WHEN you want buy-and-hold stressed against one named synthetic regime. Returns a 0-100 robustness score, failure-behaviour classification with confidence and the resolved regime parameters. Evaluates buy-and-hold only and takes exactly one argument, profile_hint (valid values: get_started); for other strategies use challenge_strategy or tier2_stress_test (full tier, needs an access token). Descriptive, not advisory.

Discovered
submit_feedback

USE WHEN something in a response was wrong, unclear or missing and you want to tell the operator. Persists structured feedback on a previous response: your agent identity, the request_id, and items {category, severity, observation, suggested_action?, agent_confidence 0..1}. Aggregates are readable at feedback://insights.

Discovered
tier2_stress_test

FULL TIER ONLY. Use when you want to stress a strategy (a catalogue slug or an inline rule set) on any ticker. On this free endpoint the call returns the coded error UPGRADE_REQUIRED with how to get a token. Free alternative: challenge_strategy (buy_and_hold, rsi_30_70 across the regime catalogue) or run_stress_test (buy-and-hold on one cached regime).

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected125 ms24