CrashTestYourStrategy MCP
An open MCP server providing stress-regime intelligence for trading strategies. It evaluates portfolio and strategy behavior against historical and synthetic stress cases, offering diagnostics like portfolio stress testing, regime outlook, factor decomposition, and investment thesis catalog access. It is a research-grade tool for descriptive risk analysis, not financial advice.
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.
https://mcp.crashtestyourstrategy.ai/mcpWhat its tools do
16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (15)
Can change data (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Stress test multi-asset portfolios across baseline, risk-off, and rate-shock regimes
- Get weekly model-conditional probabilities for market regime outlooks
- Decompose portfolio risk contributions using Euler factor decomposition
- Access curated investment thesis catalogs with stress evidence
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- crashtestyourstrategy.ai 1.29.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 16 advertised
- Resources
- 14 advertised
- Resource templates
- 4 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"experimental": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
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.
{
"type": "object",
"title": "run_stress_testArguments",
"required": [
"profile_hint"
],
"properties": {
"profile_hint": {
"type": "string",
"title": "Profile Hint",
"description": "Synthetic stress-regime identifier, e.g. 'whipsaw_synthetic_spy'. Discover valid values via the regimes://available resource."
}
}
}{
"type": "object",
"title": "run_stress_testOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "portfolio_stress_testArguments",
"required": [
"holdings"
],
"properties": {
"costs": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Costs",
"default": null,
"description": "Optional cost model: {'rebalance': 'monthly', 'transaction_cost_bps': float, 'annual_costs': {ASSET: annual fraction}}. Omit for the frictionless default."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings",
"description": "Portfolio legs: list of {asset, weight} objects, e.g. [{'asset': 'SPY', 'weight': 0.6}, {'asset': 'TLT', 'weight': 0.4}]. Weights are normalised to sum to 1; assets must be in the substrate universe."
}
}
}{
"type": "object",
"title": "portfolio_stress_testOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "find_similar_regimeArguments",
"properties": {
"top_n": {
"type": "integer",
"title": "Top N",
"default": 5,
"description": "Number of nearest regimes to return."
},
"asset_filter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Asset Filter",
"default": null,
"description": "Restrict matches to one asset (e.g. 'SPY', 'BTC')."
},
"descriptor_target": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Descriptor Target",
"default": null,
"description": "Partial target spec {descriptor_name: value}; only the provided dimensions contribute to the distance. Definitions: ontology://regime-descriptors."
},
"reference_profile_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reference Profile Hint",
"default": null,
"description": "Use this catalogue bundle's median descriptors as the search target (mutually exclusive with descriptor_target)."
}
}
}{
"type": "object",
"title": "find_similar_regimeOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "describe_regimeArguments",
"required": [
"profile_hint"
],
"properties": {
"profile_hint": {
"type": "string",
"title": "Profile Hint",
"description": "Synthetic stress-regime identifier, e.g. 'whipsaw_synthetic_spy'. Discover valid values via the regimes://available resource."
}
}
}{
"type": "object",
"title": "describe_regimeOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "portfolio_compareArguments",
"required": [
"holdings_a",
"holdings_b"
],
"properties": {
"holdings_a": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings A",
"description": "Reference portfolio A. Portfolio legs: list of {asset, weight} objects, e.g. [{'asset': 'SPY', 'weight': 0.6}, {'asset': 'TLT', 'weight': 0.4}]. Weights are normalised to sum to 1; assets must be in the substrate universe."
},
"holdings_b": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings B",
"description": "Candidate revision B, same shape — evaluated on paths identical to A's, so every delta is attributable to the weights."
}
}
}{
"type": "object",
"title": "portfolio_compareOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "get_dossierArguments",
"properties": {
"last_n": {
"type": "integer",
"title": "Last N",
"default": 0,
"description": "Alternatively: compile the N most recent recorded entries (ignored when request_ids is given)."
},
"request_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Request Ids",
"default": null,
"description": "Explicit request_ids to compile chronologically (take them from previous responses' request_id fields)."
}
}
}{
"type": "object",
"title": "get_dossierOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "long_horizon_stressArguments",
"required": [
"holdings",
"horizon_years"
],
"properties": {
"holdings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings",
"description": "Portfolio legs: list of {asset, weight} objects, e.g. [{'asset': 'SPY', 'weight': 0.6}, {'asset': 'TLT', 'weight': 0.4}]. Weights are normalised to sum to 1; assets must be in the substrate universe."
},
"rebalance": {
"type": "string",
"title": "Rebalance",
"default": "monthly",
"description": "Rebalancing frequency: 'daily' | 'monthly' | 'quarterly'."
},
"horizon_years": {
"type": "number",
"title": "Horizon Years",
"description": "Plan horizon in years (multi-year paths are chained from ~2-year model blocks)."
},
"target_amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Target Amount",
"default": null,
"description": "Optional wealth target; the output reports the probability of reaching it."
},
"long_run_drift": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Long Run Drift",
"default": null,
"description": "Override the re-anchored long-run drift per asset: {ASSET: annual drift fraction}; omit for the stated capital-market assumptions."
},
"annual_inflation": {
"type": "number",
"title": "Annual Inflation",
"default": 0.02,
"description": "Annual inflation assumption for indexing and real-value reporting (fraction, default 0.02)."
},
"initial_investment": {
"type": "number",
"title": "Initial Investment",
"default": 0,
"description": "Starting capital (account currency)."
},
"monthly_withdrawal": {
"type": "number",
"title": "Monthly Withdrawal",
"default": 0,
"description": "Monthly withdrawal (withdrawal-plan mode); inflation-indexed when withdrawal_inflation_indexed is true."
},
"monthly_contribution": {
"type": "number",
"title": "Monthly Contribution",
"default": 0,
"description": "Fixed monthly savings contribution (savings-plan mode)."
},
"withdrawal_inflation_indexed": {
"type": "boolean",
"title": "Withdrawal Inflation Indexed",
"default": true,
"description": "Index the monthly withdrawal to inflation."
}
}
}{
"type": "object",
"title": "long_horizon_stressOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "regime_outlookArguments",
"properties": {
"as_of": {
"type": "string",
"title": "As Of",
"default": "",
"description": "Optional historical evaluation date (YYYY-MM-DD); empty = latest data."
},
"asset": {
"type": "string",
"title": "Asset",
"default": "SPY",
"description": "One of the out-of-sample-validated assets: 'SPY', 'QQQ', 'GLD', 'TLT'."
},
"horizon_days": {
"type": "integer",
"title": "Horizon Days",
"default": 21,
"description": "Validated horizons only: 5 or 21 trading days."
}
}
}{
"type": "object",
"title": "regime_outlookOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "market_regime_mapArguments",
"properties": {
"horizon_days": {
"type": "integer",
"title": "Horizon Days",
"default": 21,
"description": "Validated horizons only: 5 or 21 trading days."
}
}
}{
"type": "object",
"title": "market_regime_mapOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "challenge_strategyArguments",
"properties": {
"strategy_id": {
"type": "string",
"title": "Strategy Id",
"default": "buy_and_hold",
"description": "Strategy identifier; v1 supports only 'buy_and_hold'."
}
}
}{
"type": "object",
"title": "challenge_strategyOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "factor_decompositionArguments",
"required": [
"holdings"
],
"properties": {
"holdings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings",
"description": "Portfolio legs: list of {asset, weight} objects, e.g. [{'asset': 'SPY', 'weight': 0.6}, {'asset': 'TLT', 'weight': 0.4}]. Weights are normalised to sum to 1; assets must be in the substrate universe. Each substrate asset proxies a factor (SPY=equity beta, TLT=duration, GOLD=real asset, BTC=crypto)."
}
}
}{
"type": "object",
"title": "factor_decompositionOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "ips_gateArguments",
"required": [
"holdings"
],
"properties": {
"holdings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Holdings",
"description": "Portfolio legs: list of {asset, weight} objects, e.g. [{'asset': 'SPY', 'weight': 0.6}, {'asset': 'TLT', 'weight': 0.4}]. Weights are normalised to sum to 1; assets must be in the substrate universe."
},
"liquidity_need": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Liquidity Need",
"default": null,
"description": "'low' | 'medium' | 'high' — violated when material holdings are less liquid than the stated need."
},
"time_horizon_years": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Time Horizon Years",
"default": null,
"description": "Investment horizon stated in the IPS; short horizons cannot absorb deep drawdowns."
},
"max_drawdown_tolerance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max Drawdown Tolerance",
"default": null,
"description": "IPS drawdown tolerance as a fraction, e.g. 0.15 = a -15% maximum acceptable drawdown."
}
}
}{
"type": "object",
"title": "ips_gateOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "backtest_integrityArguments",
"properties": {
"kurt": {
"type": "number",
"title": "Kurt",
"default": 3,
"description": "Kurtosis of the strategy's returns (3 = normal)."
},
"skew": {
"type": "number",
"title": "Skew",
"default": 0,
"description": "Skewness of the strategy's returns (0 = symmetric)."
},
"asset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Asset",
"default": null,
"description": "Asset context for the regime-coverage check (default: SPY as the equity-crisis reference)."
},
"n_trials": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "N Trials",
"default": null,
"description": "Number of configurations tried before selecting this backtest — drives the deflated-Sharpe correction. Unknown → the claim is flagged UNPROVEN."
},
"frequency": {
"type": "number",
"title": "Frequency",
"default": 252,
"description": "Return observations per year (252 = daily bars)."
},
"backtest_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Backtest End",
"default": null,
"description": "Backtest window end (YYYY-MM-DD)."
},
"backtest_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Backtest Start",
"default": null,
"description": "Backtest window start (YYYY-MM-DD) — used to detect crisis regimes the window never contained."
},
"annualized_sharpe": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Annualized Sharpe",
"default": null,
"description": "The claimed annualized Sharpe ratio of the backtest."
}
}
}{
"type": "object",
"title": "backtest_integrityOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "submit_feedbackArguments",
"required": [
"agent_name",
"feedback_items",
"overall_confidence"
],
"properties": {
"agent_name": {
"type": "string",
"title": "Agent Name",
"description": "Your agent identity (model or product name)."
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Request Id",
"default": null,
"description": "request_id of the response this feedback refers to."
},
"agent_vendor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Agent Vendor",
"default": null,
"description": "Vendor of the submitting agent (e.g. 'Anthropic', 'OpenAI')."
},
"feedback_items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Feedback Items",
"description": "One or more items, each {category (FeedbackCategory ontology), severity, observation, suggested_action?, agent_confidence (0..1)}."
},
"session_context": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Session Context",
"default": null,
"description": "Optional free-text context of the session/workflow the feedback arose in."
},
"overall_confidence": {
"type": "number",
"title": "Overall Confidence",
"description": "Overall confidence in this feedback, 0..1."
},
"platform_version_evaluated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Platform Version Evaluated",
"default": null,
"description": "Schema/platform version the feedback refers to (e.g. 'ctys-agent-v1')."
}
}
}{
"type": "object",
"title": "submit_feedbackOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}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.
{
"type": "object",
"title": "list_investment_thesesArguments",
"properties": {}
}{
"type": "object",
"title": "list_investment_thesesOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"title": "get_investment_thesisArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "Thesis slug — discover valid values via list_investment_theses()."
}
}
}{
"type": "object",
"title": "get_investment_thesisOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "object",
"title": "Result",
"additionalProperties": true
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
0 advertised
Resources
14 advertised
methodology_overview — Methodology overview
Brief description of the diagnostic methodology + canonical-source URL on .com.
methodology://overviewontology_failure_modes — Failure-mode taxonomy (10 axes)
The canonical 10-axis failure-mode taxonomy. Same set as .com's /ontology pages.
ontology://failure-modesontology_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.
ontology://failure-behaviorsontology_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.
ontology://regime-descriptorsregimes_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.
regimes://descriptorsregimes_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.
regimes://historical-anchorsregimes_available — Available regime profiles (v1)
profile_hints currently servable by run_stress_test. Each maps to a cached SME bundle.
regimes://availablefeedback_insights_resource — 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.
feedback://insightsportfolio_universe_resource — Portfolio substrate universe
Assets a Tier-1 portfolio_stress_test request can be composed from.
portfolio://universevalidation_value_resource — 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.
validation://valuevalidation_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.
validation://summaryvalidation_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.
validation://synthetic-vs-historicalontology_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.
ontology://strategy-vulnerabilitiestheses_catalog — Investment-thesis catalog (discovery)
Compact summary of every investment thesis — the read-only mirror of list_investment_theses().
theses://catalogregime_data_synthetic_replica — Raw single-replica OHLCV (synthetic)
Verification-grade access to one synthetic replica's daily OHLCV time-series, looked up by profile_hint + seed. Returns dates + OHLCV lists plus the full replica metadata (asset, warmup_index, antecedent_regime, vol_modifier, etc.) and the descriptors that were computed at extraction time. Use this to verify any descriptor or audit claim independently — recompute from the raw series and compare. Payload ≈ 6 KB per replica.
regime-data://synthetic/{profile_hint}/{seed}regime_data_historical_anchor — Raw historical anchor OHLCV
Verification-grade access to a historical anchor's daily OHLCV time-series, looked up by case_id (e.g. 'spy_lehman_2008'). Returns dates + OHLCV lists from the .com sister repo's historical_data CSVs, sliced to the anchor's period. Co-located with the descriptors we computed so the agent can verify any audit claim by recomputing locally and comparing.
regime-data://historical/{case_id}validation_asset_resource — Realism evidence for an asset
Trust-layer: the model's daily stylized facts for {asset} measured the same way the empirical bands were derived, vs those bands, with a per-fact verdict (in_iqr / in_band / caveat). Plus the value basis. Lets an agent CHECK realism before trusting a stress result; honest by construction — a missed fact is a caveat, not hidden. Descriptive, not advisory.
validation://{asset}thesis_detail — One investment thesis (full case study)
The complete framework + portfolio + stress evidence for a thesis slug — read-only mirror of get_investment_thesis(slug).
thesis://{slug}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
- 2289 ms
- 95th percentile latency
- 2289 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2289 ms · metadata changed · 16 tool(s), 14 resource(s), 4 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http crashtestyourstrategy-mcp https://mcp.crashtestyourstrategy.ai/mcpCodex
codex mcp add crashtestyourstrategy-mcp --url https://mcp.crashtestyourstrategy.ai/mcpCursor
{
"mcpServers": {
"crashtestyourstrategy-mcp": {
"url": "https://mcp.crashtestyourstrategy.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"crashtestyourstrategy-mcp": {
"type": "streamableHttp",
"url": "https://mcp.crashtestyourstrategy.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"crashtestyourstrategy-mcp": {
"type": "http",
"url": "https://mcp.crashtestyourstrategy.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http crashtestyourstrategy-mcp https://mcp.crashtestyourstrategy.ai/mcpClaude Desktop
https://mcp.crashtestyourstrategy.ai/mcpWindsurf
{
"mcpServers": {
"crashtestyourstrategy-mcp": {
"serverUrl": "https://mcp.crashtestyourstrategy.ai/mcp"
}
}
}Let your agent find its tools
Find servers like CrashTestYourStrategy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.