# crashtestyourstrategy MCP server

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

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-fnobbe-crashtestyourstrategy
- Repository: https://github.com/fnobbe/crashtestyourstrategy-mcp
- Website: https://crashtestyourstrategy.com/interop

## Install
- Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://mcp.crashtestyourstrategy.ai/mcp

## Tools
- run_stress_test (Run stress test (buy-and-hold, v1)) - Run a buy-and-hold backtest against the synthetic stress regime identified by profile_hint. Returns a structured diagnostic: robustness score (0-100), per-FM-bucket failure-behavior classification with confidence + context, and the resolved regime parameters that were actually evaluated. v1 supports only buy-and-hold. To discover available regime profile_hints, read the `regimes://available` resource. Diagnostic is descriptive, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- portfolio_stress_test (Portfolio stress (multi-asset, Tier-1)) - Stress a multi-asset portfolio across cross-asset regimes (baseline / risk_off_crisis / rate_shock). Provide `holdings` as a list of {asset, weight}; weights are normalised. Returns, per regime: portfolio return, worst-episode drawdown, a per-leg decomposition, and a cross_asset_finding (diversification_intact / hedge_holds / hedge_breaks / shared_drawdown) describing how the holdings behaved TOGETHER. The joint correlation structure (incl. the bond hedge that can break under rate shocks) is baked into a pre-computed substrate, so Tier-1 is instant over a fixed universe (read portfolio://universe). Optional `costs` ({rebalance: none|daily|monthly|quarterly|band, annual_costs: {asset: fraction}, transaction_cost_bps}) adds a cost_impact block: frictionless vs the stated rebalancing policy + costs via a path-loop engine with real unit accounting, paired on identical paths. The substrate is a fixed 4-asset universe (SPY, TLT, GOLD, BTC; read portfolio://universe). For ANY other ticker or a custom multi-asset book, use build_portfolio in assess mode (portfolios={name:{ticker:weight}}), which calibrates and stresses an arbitrary universe live. Descriptive, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- find_similar_regime (Find similar regime via behavioural descriptors) - Nearest-neighbour retrieval over the cached regime catalogue. Provide EITHER a reference_profile_hint (use that bundle's median descriptors as target) OR a descriptor_target dict (partial spec, missing dimensions are ignored — only the provided ones contribute to distance). Optional asset_filter restricts to one asset. Returns top_n matches with similarity_score (0..1), euclidean distance in z-score space, and per-descriptor signed deltas so the agent can see WHY a regime matched. Read ontology://regime-descriptors for the descriptor definitions, and regimes://descriptors for the full catalogue. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- describe_regime (Describe one regime — self-portrait) - Single-regime introspection: returns the median behavioural descriptors of a known regime, the z-scores vs the catalogue population (so you can see what makes THIS regime distinct from the average), an English characterisation generated from the most extreme descriptors, and the top 2 nearest neighbours as a preview. Complements find_similar_regime: that tool ranks neighbours of a target, this tool tells you what a single regime IS. Read this before searching if you want to reason about one regime first. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- portfolio_compare (Portfolio compare (paired Revise-step comparison)) - Compare two portfolios (A = reference, B = candidate revision) on IDENTICAL simulated substrate paths — a paired design, so every delta is attributable to the weights, not seed noise. Returns drawdown-distribution deltas (median/worst/quantiles), probability-weighted scenario summaries, per-scenario outcome deltas, risk-concentration shift (Euler decomposition), and which diversification failures the candidate introduces or resolves. revision_required flags a candidate that deepens the worst-path drawdown or introduces a new diversification failure — the case where a revision made robustness worse. Provide holdings_a / holdings_b as lists of {asset, weight}. Descriptive, not advisory; neither portfolio is recommended or ranked. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- get_dossier (Get dossier (audit trail of past diagnostics)) - Compile recorded diagnostic responses into ONE citable record — a proper process documents itself. Every envelope response (MCP and REST) is recorded automatically, keyed by its request_id. Provide explicit request_ids (compiled chronologically) or last_n for the most recent entries. Returns the entries with their gate signals (revision_required + grounding_summary each) plus a ready-to-cite markdown document; revision_required on the dossier itself flags workflows containing unaddressed gate signals. Single verbatim entries: GET /api/v1/dossier/{request_id} on the REST surface. A factual record, not an assessment — descriptive, never advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- long_horizon_stress (Long-horizon wealth-path stress (savings / withdrawal plans)) - Distribution of multi-year wealth paths for a savings plan (monthly_contribution) or a withdrawal plan (monthly_withdrawal, inflation-indexed by default) on a portfolio from the substrate universe. Multi-year paths chain ~2y model blocks (block-bootstrap, disclosed); long-run drift is RE-ANCHORED to stated capital-market assumptions (overridable via long_run_drift; the substrate's raw stress drift would compound a structural bear universe — both are echoed in the output) while the model's path shape (vol, clustering, correlations, hedge-breaks) is kept. Costs are ON by default. Returns terminal-wealth quantiles (nominal + real), ruin/shortfall probabilities, a sequence-of-returns diagnosis (same plan, bad vs good first two years), and a drift-sensitivity block (assumptions − 2pp). Amounts in the caller's currency unit. Descriptive, not advisory — no rate, allocation, or product is recommended. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- regime_outlook (Regime-probability outlook (validated assets, h=5/21)) - Model-conditional probabilities that an asset is in each market regime (BULL / SIDEWAYS / BEAR / CRISIS, operational trailing-vol/drift labels) after a 5- or 21-trading-day horizon — the probability complement to the conditional stress tools: stress tools answer 'what happens GIVEN regime X', this answers 'how likely is regime X from today's observable state'. Ships only the preregistered, out-of-sample-validated tier (covariate logit; seasonality was tested and falsified); the persistence and unconditional baselines are reported alongside so an agent can see how much the model adds. Validated assets: SPY, QQQ, GLD, TLT. Optional as_of (YYYY-MM-DD) computes the outlook at a historical date. Probabilities describe membership in operationally defined regime classes — descriptive, not a market prediction, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- market_regime_map (Market regime map (18 category proxies, h=5/21)) - Compressed cross-category map of the current market state in ONE call: for 18 category proxies (US large-cap + tech, the 9 SPDR sectors, developed ex-US, emerging markets, long Treasuries, high-yield credit, gold, oil, Bitcoin) the operational regime (BULL/SIDEWAYS/BEAR/CRISIS), model-conditional regime probabilities over a 5- or 21-trading-day horizon, stress probability vs its unconditional baseline, a descriptive historical forward-return distribution conditional on the current regime label, and an equity-factor commonality flag (US sectors largely re-express one factor — the map is fewer independent signals than rows). Per (asset, horizon) cell only the preregistered, out-of-sample-validated model tier ships (covariate logit / persistence / unconditional — see tier_pvalues). Deliberately ships NO directional up/down forecast: regime membership is the validated signal, not return direction. Use regime_outlook for single-asset depth with as_of support. Descriptive, not a market prediction, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- challenge_strategy (Challenge a strategy: find what breaks it (3-layer output)) - Adversarial-evaluation primitive — the semantic integration layer of the platform. Given a strategy identifier, returns a 3-layer analysis: (1) outcome metrics in the worst regimes the strategy was evaluated against, (2) vulnerability profile in the 8-dimension strategy vulnerability ontology with severity classification, (3) descriptor attribution showing which regime descriptors most strongly couple to the strategy's failure. v1 supports only 'buy_and_hold' (the outcome matrix is built once per strategy); future versions will support arbitrary strategy specs once the parser-driven strategy backtest pipeline is wired in. Read ontology://strategy-vulnerabilities for the vulnerability vocabulary. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- factor_decomposition (Factor / concentration decomposition (capital weight vs risk)) - Reveal HIDDEN risk concentration: a portfolio can be capital-diversified while its RISK is dominated by one factor. Returns the Euler risk-contribution decomposition (RC_i = w_i*(Sigma*w)_i / w'Sigma*w, summing to 1) alongside the capital weights, using the empirical covariance of real returns. For this universe each asset proxies a factor (SPY=equity-beta, TLT=duration, GOLD=real-asset, BTC=crypto). E.g. a 60/40 is ~83% equity risk; a 50/50 SPY/BTC is ~86% BTC risk despite 50/50 capital. Descriptive, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- ips_gate (IPS gate — planning-step constraint check (hard gate)) - Check a portfolio against an Investment Policy Statement BEFORE accepting it — the planning step a proper process does FIRST (CFA). Provide holdings + IPS constraints (max_drawdown_tolerance as a fraction e.g. 0.15, time_horizon_years, liquidity_need 'low'|'medium'|'high'). Runs the stress test internally and flags where the proposal VIOLATES the stated policy: worst stress drawdown exceeds tolerance; a short horizon cannot absorb a deep drawdown; material holdings are less liquid than the stated need. A HARD GATE, not a score. Descriptive, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- backtest_integrity (Backtest integrity check (deflated Sharpe + regime coverage)) - Confront a backtest claim with its over-optimism failure modes before trusting it. Given an annualized Sharpe + the number of configurations tried + the backtest window (YYYY-MM-DD), returns: the DEFLATED Sharpe — the expected MAXIMUM Sharpe achievable by chance grows with the trial count, so a high in-sample Sharpe is a selection artifact (Bailey & López de Prado); which CRISIS REGIMES were ABSENT from the backtest window (untested, from the historical-anchor catalogue); and a base-rate caveat. If the trial count is unknown — the usual case for an agent reasoning from a backtest — the Sharpe is flagged as not-deflatable / UNPROVEN. All inputs optional; supply as many as known. Descriptive, not advisory. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- submit_feedback (Submit structured feedback) - Persist structured improvement feedback about a previous tool response. Provide your agent identity, the request_id you are commenting on, and one or more feedback items each carrying category (from the FeedbackCategory ontology), severity, observation, optional suggested_action, and agent_confidence (0..1). Read `feedback://insights` to see aggregated cross-agent feedback. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- list_investment_theses (List investment theses (catalog discovery)) - Discover the investment-thesis catalog. Each entry is a descriptive case study that pairs an economic framework with a rule-based portfolio and the synthetic + historical stress evidence for that allocation. Returns one compact summary per thesis (slug, title, one-liner, tags, risk tiers, framework summary, headline finding). Call get_investment_thesis(slug) for the full framework / portfolio / stress evidence, or read the thesis://{slug} resource. Descriptive, not advisory — the agent decides what is suitable. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp
- get_investment_thesis (Get one investment thesis (full case study)) - Return the complete thesis for `slug`: the economic framework (pillars with [E]/[M]/[K] evidence grades, falsifiers and a deep-dive), the rule-based portfolio (asset blocks × conservative/balanced/offensive weights + sizing rationale), and the stress evidence (per-tier backtest, per-regime median drawdown, real historical episodes, pre-registered claim verdicts, and the hedge hold/break behaviour). This is the 'instant portfolio with all tested attributes'. Discover slugs with list_investment_theses(). Descriptive, not advisory — the agent decides suitability. Endpoint: https://mcp.crashtestyourstrategy.ai/mcp

## Resources
- methodology://overview - Methodology overview Brief description of the diagnostic methodology + canonical-source URL on .com. MIME type: text/markdown
- ontology://failure-modes - Failure-mode taxonomy (10 axes) The canonical 10-axis failure-mode taxonomy. Same set as .com's /ontology pages. MIME type: application/json
- ontology://failure-behaviors - Failure-behavior ontology v1 (8 behaviors) The canonical 8-behavior taxonomy describing HOW a strategy degrades (vs the failure-mode axis which describes WHERE). Includes operational pattern signatures. MIME type: application/json
- ontology://regime-descriptors - Regime descriptor definitions (18 behavioural features) Canonical definitions of the behavioural descriptors used to characterise synthetic stress regimes. Used by find_similar_regime as the embedding axes. These are computed from daily OHLC; cross-timescale-consistent versions will follow when multi-resolution output lands. MIME type: application/json
- regimes://descriptors - Regime descriptor catalogue Behavioural-descriptor fingerprint for every cached regime bundle. Each entry carries median + IQR + p05 + p95 across the bundle's replicas. This is the embedding source for find_similar_regime. MIME type: application/json
- regimes://historical-anchors - Historical anchor regimes (empirical reference frame) The 31 empirical anchor regimes used as the real-market reference frame for resembles_historical_episodes (linking synthetic regimes to historical analogues) and stylized_facts_audit (failure disclosure per regime). Each anchor is a single historical OHLC slice — Lehman 2008, COVID 2020, Dotcom 2000, Luna 2022, etc. MIME type: application/json
- regimes://available - Available regime profiles (v1) profile_hints currently servable by run_stress_test. Each maps to a cached SME bundle. MIME type: application/json
- feedback://insights - Aggregated agent feedback insights Read-only aggregated view of submitted agent feedback, weighted by agent_confidence. Used for platform iteration prioritisation. Updated on every read. MIME type: application/json
- portfolio://universe - Portfolio substrate universe Assets a Tier-1 portfolio_stress_test request can be composed from. MIME type: application/json
- validation://value - Value basis vs cheap baselines Trust-layer: the NUMERIC model-vs-real-vs-Gauss-copula comparison (regime-conditional correlation strengthening + lower-tail dependence) showing where the synthetic stress paths beat a cheap baseline and where they do NOT (single-asset marginals). Descriptive, not advisory. MIME type: application/json
- validation://summary - Cross-strategy validation summary High-level summary across all strategies for which the validation study has been run. Includes per-strategy verdict, cohort-split signal, and an interpretation of the cross-strategy pattern (e.g. whether active strategies improve / degrade the synthetic-historical correspondence, and what the actionable platform scope is). Refer to validation://synthetic-vs-historical for the full report on buy_and_hold. MIME type: application/json
- validation://synthetic-vs-historical - Empirical validation: synthetic regimes vs historical analogues The platform's empirical self-validation study. Tests whether strategy outcomes in synthetic regimes correspond to outcomes in their nearest historical anchors. If yes: descriptor similarity is decision-meaningful. If no: descriptor similarity is structural-only. v1 covers buy_and_hold; cohort splits + per-asset breakdown expose where the correspondence holds and where it doesn't. This resource is deliberately failure-disclosing: the system reports its OWN validation results, including where the validation does not hold. MIME type: application/json
- ontology://strategy-vulnerabilities - Strategy vulnerability ontology v1 (8 vulnerabilities) Canonical 8-vulnerability taxonomy describing HOW a strategy degrades under varying market structure. Counterpart to regime descriptors: regimes describe what the market IS, vulnerabilities describe how a strategy FAILS in it. The interaction surface (regime, strategy) is what challenge_strategy operationalises. MIME type: application/json
- theses://catalog - Investment-thesis catalog (discovery) Compact summary of every investment thesis — the read-only mirror of list_investment_theses(). MIME type: application/json

## Prompts
Not captured

## Metadata
- Owner: io.github.fnobbe
- Version: 1.0.1
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Aug 1, 2026
- Source: https://registry.modelcontextprotocol.io
