CrashTestYourStrategy
Portfolio & trading-strategy stress diagnostics for AI agents — multi-asset stress with hedge-break detection (the 2022 stock-bond case), a daily-refreshed…
What it can do
- Run Stress Test: 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 c
- Portfolio Stress Test: 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. Ret
- Find Similar Regime: 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
What data it sees
Do you need an account
No: the server works without sign-in
Portfolio & trading-strategy stress diagnostics for AI agents — multi-asset stress with hedge-break detection (the 2022 stock-bond case), a daily-refreshed preregistered regime outlook, deflated-Sharpe backtest-integrity checks and IPS gating. Free tier, no key required. Descriptive, never advisory. Docs: https://crashtestyourstrategy.com/interop
How to connect
How to connect CrashTestYourStrategy to Claude
The server address to paste into Claude settings:
https://crashtestyourstrategy--nobbefrederic.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect CrashTestYourStrategy to ChatGPT
The server address to paste into ChatGPT settings:
https://crashtestyourstrategy--nobbefrederic.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect CrashTestYourStrategy to Cursor
The server address to paste into Cursor settings:
https://crashtestyourstrategy--nobbefrederic.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (16)
Raw names from tools/list. Only developers need these.
| run_stress_test | 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. |
| portfolio_stress_test | 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. |
| find_similar_regime | 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. |
| describe_regime | 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. |
| portfolio_compare | 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. |
| get_dossier | 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. |
| long_horizon_stress | 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. |
| regime_outlook | 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. |
| market_regime_map | 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. |
| challenge_strategy | 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. |
| factor_decomposition | 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. |
| ips_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. |
| backtest_integrity | 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. |
| submit_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. |
| list_investment_theses | 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. |
| get_investment_thesis | 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. |