crashtestyourstrategy
Portfolio and strategy stress diagnostics with hedge-break detection and regime outlook. Free tier.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"crashtestyourstrategy": {
"url": "https://mcp.crashtestyourstrategy.ai/mcp"
}
}
}リモートエンドポイント
https://mcp.crashtestyourstrategy.ai/mcpstreamable-httpできること
ツール一覧
ツール(16)
🟢run_stress_test(profile_hint)
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",
"properties": {
"profile_hint": {
"description": "Synthetic stress-regime identifier, e.g. 'whipsaw_synthetic_spy'. Discover valid values via the regimes://available resource.",
"title": "Profile Hint",
"type": "string"
}
},
"required": [
"profile_hint"
],
"title": "run_stress_testArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "run_stress_testOutput"
}🟢portfolio_stress_test(holdings, costs)
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",
"properties": {
"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.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings",
"type": "array"
},
"costs": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional cost model: {'rebalance': 'monthly', 'transaction_cost_bps': float, 'annual_costs': {ASSET: annual fraction}}. Omit for the frictionless default.",
"title": "Costs"
}
},
"required": [
"holdings"
],
"title": "portfolio_stress_testArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "portfolio_stress_testOutput"
}🟢find_similar_regime(reference_profile_hint, descriptor_target, asset_filter, top_n)
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",
"properties": {
"reference_profile_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Use this catalogue bundle's median descriptors as the search target (mutually exclusive with descriptor_target).",
"title": "Reference Profile Hint"
},
"descriptor_target": {
"anyOf": [
{
"additionalProperties": {
"type": "number"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Partial target spec {descriptor_name: value}; only the provided dimensions contribute to the distance. Definitions: ontology://regime-descriptors.",
"title": "Descriptor Target"
},
"asset_filter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Restrict matches to one asset (e.g. 'SPY', 'BTC').",
"title": "Asset Filter"
},
"top_n": {
"default": 5,
"description": "Number of nearest regimes to return.",
"title": "Top N",
"type": "integer"
}
},
"title": "find_similar_regimeArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "find_similar_regimeOutput"
}🟢describe_regime(profile_hint)
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",
"properties": {
"profile_hint": {
"description": "Synthetic stress-regime identifier, e.g. 'whipsaw_synthetic_spy'. Discover valid values via the regimes://available resource.",
"title": "Profile Hint",
"type": "string"
}
},
"required": [
"profile_hint"
],
"title": "describe_regimeArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "describe_regimeOutput"
}🟢portfolio_compare(holdings_a, holdings_b)
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",
"properties": {
"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.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings A",
"type": "array"
},
"holdings_b": {
"description": "Candidate revision B, same shape — evaluated on paths identical to A's, so every delta is attributable to the weights.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings B",
"type": "array"
}
},
"required": [
"holdings_a",
"holdings_b"
],
"title": "portfolio_compareArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "portfolio_compareOutput"
}🟢get_dossier(request_ids, last_n)
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",
"properties": {
"request_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Explicit request_ids to compile chronologically (take them from previous responses' request_id fields).",
"title": "Request Ids"
},
"last_n": {
"default": 0,
"description": "Alternatively: compile the N most recent recorded entries (ignored when request_ids is given).",
"title": "Last N",
"type": "integer"
}
},
"title": "get_dossierArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_dossierOutput"
}🟢long_horizon_stress(holdings, horizon_years, initial_investment, monthly_contribution, monthly_withdrawal, ...)
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",
"properties": {
"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.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings",
"type": "array"
},
"horizon_years": {
"description": "Plan horizon in years (multi-year paths are chained from ~2-year model blocks).",
"title": "Horizon Years",
"type": "number"
},
"initial_investment": {
"default": 0,
"description": "Starting capital (account currency).",
"title": "Initial Investment",
"type": "number"
},
"monthly_contribution": {
"default": 0,
"description": "Fixed monthly savings contribution (savings-plan mode).",
"title": "Monthly Contribution",
"type": "number"
},
"monthly_withdrawal": {
"default": 0,
"description": "Monthly withdrawal (withdrawal-plan mode); inflation-indexed when withdrawal_inflation_indexed is true.",
"title": "Monthly Withdrawal",
"type": "number"
},
"target_amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional wealth target; the output reports the probability of reaching it.",
"title": "Target Amount"
},
"annual_inflation": {
"default": 0.02,
"description": "Annual inflation assumption for indexing and real-value reporting (fraction, default 0.02).",
"title": "Annual Inflation",
"type": "number"
},
"withdrawal_inflation_indexed": {
"default": true,
"description": "Index the monthly withdrawal to inflation.",
"title": "Withdrawal Inflation Indexed",
"type": "boolean"
},
"rebalance": {
"default": "monthly",
"description": "Rebalancing frequency: 'daily' | 'monthly' | 'quarterly'.",
"title": "Rebalance",
"type": "string"
},
"long_run_drift": {
"anyOf": [
{
"additionalProperties": {
"type": "number"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Override the re-anchored long-run drift per asset: {ASSET: annual drift fraction}; omit for the stated capital-market assumptions.",
"title": "Long Run Drift"
}
},
"required": [
"holdings",
"horizon_years"
],
"title": "long_horizon_stressArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "long_horizon_stressOutput"
}🟢regime_outlook(asset, horizon_days, as_of)
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",
"properties": {
"asset": {
"default": "SPY",
"description": "One of the out-of-sample-validated assets: 'SPY', 'QQQ', 'GLD', 'TLT'.",
"title": "Asset",
"type": "string"
},
"horizon_days": {
"default": 21,
"description": "Validated horizons only: 5 or 21 trading days.",
"title": "Horizon Days",
"type": "integer"
},
"as_of": {
"default": "",
"description": "Optional historical evaluation date (YYYY-MM-DD); empty = latest data.",
"title": "As Of",
"type": "string"
}
},
"title": "regime_outlookArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "regime_outlookOutput"
}🟢market_regime_map(horizon_days)
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",
"properties": {
"horizon_days": {
"default": 21,
"description": "Validated horizons only: 5 or 21 trading days.",
"title": "Horizon Days",
"type": "integer"
}
},
"title": "market_regime_mapArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "market_regime_mapOutput"
}🟢challenge_strategy(strategy_id)
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",
"properties": {
"strategy_id": {
"default": "buy_and_hold",
"description": "Strategy identifier; v1 supports only 'buy_and_hold'.",
"title": "Strategy Id",
"type": "string"
}
},
"title": "challenge_strategyArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "challenge_strategyOutput"
}🟢factor_decomposition(holdings)
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",
"properties": {
"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).",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings",
"type": "array"
}
},
"required": [
"holdings"
],
"title": "factor_decompositionArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "factor_decompositionOutput"
}🟢ips_gate(holdings, max_drawdown_tolerance, time_horizon_years, liquidity_need)
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",
"properties": {
"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.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Holdings",
"type": "array"
},
"max_drawdown_tolerance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "IPS drawdown tolerance as a fraction, e.g. 0.15 = a -15% maximum acceptable drawdown.",
"title": "Max Drawdown Tolerance"
},
"time_horizon_years": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Investment horizon stated in the IPS; short horizons cannot absorb deep drawdowns.",
"title": "Time Horizon Years"
},
"liquidity_need": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'low' | 'medium' | 'high' — violated when material holdings are less liquid than the stated need.",
"title": "Liquidity Need"
}
},
"required": [
"holdings"
],
"title": "ips_gateArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "ips_gateOutput"
}🟢backtest_integrity(annualized_sharpe, n_trials, backtest_start, backtest_end, frequency, ...)
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",
"properties": {
"annualized_sharpe": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "The claimed annualized Sharpe ratio of the backtest.",
"title": "Annualized Sharpe"
},
"n_trials": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of configurations tried before selecting this backtest — drives the deflated-Sharpe correction. Unknown → the claim is flagged UNPROVEN.",
"title": "N Trials"
},
"backtest_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Backtest window start (YYYY-MM-DD) — used to detect crisis regimes the window never contained.",
"title": "Backtest Start"
},
"backtest_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Backtest window end (YYYY-MM-DD).",
"title": "Backtest End"
},
"frequency": {
"default": 252,
"description": "Return observations per year (252 = daily bars).",
"title": "Frequency",
"type": "number"
},
"skew": {
"default": 0,
"description": "Skewness of the strategy's returns (0 = symmetric).",
"title": "Skew",
"type": "number"
},
"kurt": {
"default": 3,
"description": "Kurtosis of the strategy's returns (3 = normal).",
"title": "Kurt",
"type": "number"
},
"asset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Asset context for the regime-coverage check (default: SPY as the equity-crisis reference).",
"title": "Asset"
}
},
"title": "backtest_integrityArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "backtest_integrityOutput"
}🟡submit_feedback(agent_name, feedback_items, overall_confidence, request_id, agent_vendor, ...)
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",
"properties": {
"agent_name": {
"description": "Your agent identity (model or product name).",
"title": "Agent Name",
"type": "string"
},
"feedback_items": {
"description": "One or more items, each {category (FeedbackCategory ontology), severity, observation, suggested_action?, agent_confidence (0..1)}.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Feedback Items",
"type": "array"
},
"overall_confidence": {
"description": "Overall confidence in this feedback, 0..1.",
"title": "Overall Confidence",
"type": "number"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "request_id of the response this feedback refers to.",
"title": "Request Id"
},
"agent_vendor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Vendor of the submitting agent (e.g. 'Anthropic', 'OpenAI').",
"title": "Agent Vendor"
},
"session_context": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional free-text context of the session/workflow the feedback arose in.",
"title": "Session Context"
},
"platform_version_evaluated": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Schema/platform version the feedback refers to (e.g. 'ctys-agent-v1').",
"title": "Platform Version Evaluated"
}
},
"required": [
"agent_name",
"feedback_items",
"overall_confidence"
],
"title": "submit_feedbackArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "submit_feedbackOutput"
}🟢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.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "list_investment_thesesArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "list_investment_thesesOutput"
}🟢get_investment_thesis(slug)
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",
"properties": {
"slug": {
"description": "Thesis slug — discover valid values via list_investment_theses().",
"title": "Slug",
"type": "string"
}
},
"required": [
"slug"
],
"title": "get_investment_thesisArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_investment_thesisOutput"
}コミュニティ
エビデンス