{"schema_version":"verify.compare.v1","generated_at":"2026-09-25T01:20:48.636790+00:00","count":1,"missing_servers":[],"results":[{"server_id":"quantustik/mcp-server","display_name":"@quantustik/mcp-server","profile_url":"https://verify.sentinelsignal.io/servers/quantustik/mcp-server","compare_url":"https://verify.sentinelsignal.io/compare?server=quantustik%2Fmcp-server","trust_summary_url":"https://verify.sentinelsignal.io/v1/servers/quantustik/mcp-server/trust-summary","claimed":false,"verified_publisher":false,"claim_status":"unclaimed","badge_url":"https://verify.sentinelsignal.io/badge/quantustik/mcp-server.svg","report_url":"https://verify.sentinelsignal.io/v1/servers/quantustik/mcp-server/report","policy_url":"https://verify.sentinelsignal.io/v1/servers/quantustik/mcp-server/policy","evidence_url":"https://verify.sentinelsignal.io/api/v1/servers/quantustik/mcp-server/evidence","commerce_signal":null,"payment_capable":null,"delegation_level":null,"risk_flags":[],"strengths":["report_available","policy_available","badge_available"],"limitations":["unclaimed_profile","publisher_not_verified"],"last_seen":null,"last_scored":"2026-09-24T21:35:02.223994+00:00","recommended_agent_action":"allow_with_policy_review","observed_attention":{"schema":"verify.observed_attention.v1","window_days":30,"level":"none","label":"No observed attention","summary":"No recent machine-readable trust or discovery activity observed for this server.","segments":{"useful_ai_user":{"level":"none","observed":false,"description":"AI-assisted user sessions such as ChatGPT/User or Claude/User."},"machine_trust_evaluator":{"level":"none","observed":false,"description":"Synthetic sessions inspecting multiple trust surfaces such as report, policy, ledger, badge, trust-summary, or compare."},"possible_agent_or_script":{"level":"none","observed":false,"description":"Structured direct sessions with rapid profile, compare, report, policy, badge, or trust-surface fan-out."},"isolated_machine_surface":{"level":"none","observed":false,"description":"Aged-out direct synthetic singleton sessions that touched a machine-readable trust surface without becoming a broader evaluator."},"ai_crawler":{"level":"none","observed":false,"description":"Known AI crawler activity such as ClaudeBot, GPTBot, or similar crawlers."},"search_crawler":{"level":"none","observed":false,"description":"Search and SEO crawler activity."},"browser_like_automation":{"level":"none","observed":false,"description":"Browser-like synthetic sessions with rapid structured endpoint activity."},"confirmed_human":{"level":"none","observed":false,"description":"Confirmed browser-session human activity."}},"surfaces_observed":{"server_profile":false,"compare":false,"compare_json":false,"compare_api":false,"report_json":false,"policy":false,"ledger":false,"badge_metadata":false,"badge_svg":false,"trust_summary":false,"mcp_tool":false},"claim_prompt":{"recommended":false,"reason":"No claim prompt is recommended from observed attention in the current window."},"notes":["Observed attention is based on segmented first-party telemetry.","Crawler and evaluator activity is not treated as confirmed human demand.","Public levels are bucketed to avoid exposing raw traffic counts."]},"owner_activation":{"claim_recommended":false,"reason":"no_observed_attention"}}],"servers":[{"namespace":"quantustik","name":"mcp-server","title":"@quantustik/mcp-server","description":"A thin stdio proxy to Quantustik's hosted MCP server, providing live S&P 500 signals, forecasts, and market data for MCP clients that only support local stdio servers.","homepage_url":"https://glama.ai/mcp/servers/h45p0hr1uq","docs_url":null,"icon_url":null,"support_url":"https://github.com/quantustik/mcp-server","remote_url":"https://quantustik.com/mcp","server_card_url":null,"latest_version":null,"current_status":"healthy","current_score":62.5,"transport_type":"streamable-http","has_oauth":false,"has_dcr":false,"has_prompts":true,"tool_count":26,"current_validation_schema_version":"8058defc70ca932c","last_validated_at":"2026-09-24T21:35:02.223994+00:00","registry_source":"glama_registry","registry_identifier":"glama_registry:h45p0hr1uq","canonical_identifier":null,"current_score_components":{"auth_operability_score":2.0,"error_contract_score":0.0,"rate_limit_semantics_score":2.0,"schema_completeness_score":3.0,"backward_compatibility_score":4.0,"slo_health_score":3.0,"security_hygiene_score":4.0,"task_success_score":4.0,"trust_confidence_score":4.0,"abuse_noise_ratio_score":4.0,"prompt_contract_score":3.0,"resource_contract_score":4.0,"discovery_metadata_score":2.0,"registry_consistency_score":2.0,"installability_score":4.0,"session_semantics_score":3.0,"tool_surface_design_score":3.0,"result_shape_stability_score":3.0,"oauth_interop_score":0.0,"recovery_semantics_score":0.0,"maintenance_signal_score":3.0,"adoption_signal_score":2.0,"freshness_confidence_score":4.0,"transport_fidelity_score":4.0,"spec_recency_score":2.0,"session_resume_score":3.0,"step_up_auth_score":0.0,"transport_compliance_score":2.0,"utility_coverage_score":0.0,"advanced_capability_coverage_score":1.0,"connector_publishability_score":2.0,"tool_snapshot_churn_score":4.0,"connector_replay_score":4.0,"request_association_score":0.0,"interactive_flow_safety_score":0.0,"action_safety_score":3.0,"official_registry_presence_score":2.0,"safety_transparency_score":3.0,"tool_capability_clarity_score":3.0,"destructive_operation_safety_score":3.0,"egress_ssrf_resilience_score":1.0,"execution_sandbox_safety_score":4.0,"data_exfiltration_resilience_score":3.0,"least_privilege_scope_score":3.0,"secret_handling_hygiene_score":3.0,"dependency_supply_chain_signal_score":0.0,"input_sanitization_safety_score":3.0,"tool_namespace_clarity_score":4.0},"capability_taxonomy":[],"machine_summary":{},"taxonomy_tags":[],"score_decomposition":[],"validation_diff":null,"tool_snapshot_diff":null,"connector_replay":{},"request_association":{},"production_readiness":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use.","badge":"score-medium","critical_alerts":0,"high_or_critical_alerts":0,"degraded_by_active_alerts":false},"recommended_for":[],"history_summary":{},"validation_timeline":[],"evidence_confidence":{"score":100.0,"label":"high","reason":"Based on 20 recent validations, 18 captured checks, and validation age of 3.8 hours.","live_check_count":18,"validation_age_hours":3.76,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":18,"validation_age_hours":3.76,"freshness_threshold_hours":24}},"incident_feed":[],"disputes":[],"remediations":[],"client_remediation_modes":[],"client_profiles":[],"client_readiness_verdicts":[],"publishability_policy_profiles":[],"compatibility_fixtures":[],"install_snippets":{},"aliases":[],"raw_evidence":{"checks":{"probe_noise_resilience":{"status":"ok","latency_ms":230.7,"details":{"url":"https://quantustik.com/robots.txt","http_status":200,"headers":{"content-type":"text/plain; charset=utf-8","strict-transport-security":"max-age=31536000; includeSubDomains"},"validation_disallowed":false,"consent_error":null}},"server_card":{"status":"ok","latency_ms":325.75,"details":{"url":"https://quantustik.com/.well-known/mcp/server-card.json","payload":{"serverInfo":{"name":"Quantustik","version":"1.0.0"},"description":"Read-only S&P 500 quantum-model signals, forecasts, trade plans, and market conditions. Educational research; not investment advice.","url":"https://quantustik.com/mcp","transport":{"type":"streamable-http"},"capabilities":{"tools":true,"prompts":true,"resources":true},"authentication":{"required":false}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"oauth_protected_resource":{"status":"error","latency_ms":112.3,"details":{"url":"https://quantustik.com/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://quantustik.com/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"}},"oauth_authorization_server":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"openid_configuration":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"initialize":{"status":"ok","latency_ms":350.9,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"Quantustik","version":"2.0.4"},"instructions":"Access live S&P 500 quantum-mechanics-based signals, forecasts, and market-condition data from Quantustik. All outputs are for educational research only — not personalized financial advice. Band calibration, measured separately at each of 9 quarterly forecast start dates from 31 Mar 2024 to 31 Mar 2026 on the TOP-20 S&P 500: the model's 90% confidence bands covered the realised price 3 months between 78% and 95%, 6 months between 71% and 92% and 1 year between 86% and 96%, against a 90% target. Quote the range or the per-start-date table, never an average of them — coverage depends heavily on when you started, individual ticker-and-start-date windows are far worse than any row, and no figure here says how close the bands sit to 90%. See the quantustik://calibration resource for the full table. You do NOT need an API key — every tool is callable right now; anonymous requests share a per-IP hourly cap. Call get_started for quota details and list_capabilities to discover every tool and resource."}},"http_status":200,"headers":{"content-type":"application/json","set-cookie":"qs_anon=oSpQcNayMBXzpLfHyZh9JoJAheYaRU1n6Z2l-Q6E0OY; HttpOnly; Max-Age=34560000; Path=/; SameSite=lax; Secure","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"protocol_version_probe":{"status":"warning","latency_ms":null,"details":{"claimed_version":"2025-03-26","validator_protocol_version":"2025-03-26","latest_known_version":"2025-11-25","releases_behind":2,"lag_days":244}},"tools_list":{"status":"ok","latency_ms":293.65,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"get_signal","description":"Get the latest quantum swing signal for a single S&P 500 ticker.\n\n    Returns TWO distinct facets — they answer different questions and are not\n    interchangeable:\n\n    * `verdict` (BUY | WAIT | EXIT, labelled BULLISH / NEUTRAL / BEARISH) —\n      what the model thinks of the stock. This is the same word, over the same\n      field, that the website shows a human. EXIT means \"consider closing an\n      existing long\", never \"short it\".\n    * `timing` (BUY | WAIT | AVOID | WATCH) — whether to put money in RIGHT\n      NOW. A stock the model likes can still be a poor entry today.\n\n    Alongside them: entry price, stop-loss, take-profit ladder (TP1/TP2/TP3),\n    position-size suggestion, and risk-reward ratio generated by the\n    Schrödinger + Feynman path-integral model. Data is refreshed on a\n    scheduled basis (typically every few hours).\n\n    A BUY verdict requires multi-signal convergence — a lone indicator never\n    triggers one. Conviction score (0–10) reflects signal agreement depth.\n    Call explain_signal to see the factor attribution — directional\n    probability, expected upside, tail downside, band calibration — with the\n    dominant driver and what argues against the call.\n\n    Limits: S&P 500 universe only. Signal may be absent if the ticker was not\n    included in the latest scan run.\n\n    Timing: a BUY here is suppressed within 5 days of an earnings print — call\n    get_earnings_calendar to see the event date and gap-risk note before entry.\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\", \"MSFT\", \"NVDA\"). Case-insensitive.\n\n    Returns a dict with signal, quantum forecast, generated_at,\n    and disclaimer embedded in the payload.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"get_signalArguments","type":"object"},"outputSchema":{"properties":{"ticker":{"default":null,"title":"Ticker"},"verdict":{"default":null,"title":"Verdict"},"verdict_label":{"default":null,"title":"Verdict Label"},"timing":{"default":null,"title":"Timing"},"timing_label":{"default":null,"title":"Timing Label"},"timing_statement":{"default":null,"title":"Timing Statement"},"actionable":{"default":null,"title":"Actionable"},"reason":{"default":null,"title":"Reason"},"confidence":{"default":null,"title":"Confidence"},"entry":{"default":null,"title":"Entry"},"stop":{"default":null,"title":"Stop"},"take_profit":{"default":null,"title":"Take Profit"},"expected_return_pct":{"default":null,"title":"Expected Return Pct"},"ci90":{"default":null,"title":"Ci90"},"attribution_url":{"default":null,"title":"Attribution Url"},"summary":{"default":null,"title":"Summary"},"disclaimer":{"default":null,"title":"Disclaimer"}},"title":"_SignalCardSchema","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_trade_plan","description":"Get an execution-ready trade plan for one S&P 500 ticker — entry, exit, size, risk.\n\n    This is the decision tool: it turns the raw quantum signal into a concrete,\n    risk-first plan you can act on. Unlike get_signal (which reports the raw\n    verdict and levels), get_trade_plan wraps them in execution discipline:\n\n    - entry_plan: the exact entry trigger, a \"don't chase\" rule, and the\n      invalidation level that kills the thesis.\n    - exit_plan: a take-profit ladder (TP1/TP2/TP3), scale-out guidance, a\n      volatility-aware trailing-stop rule, and a 3-month time-stop.\n    - sizing: position-size suggestion, worst-case max-drawdown %, and R:R.\n\n    FALSE-NEGATIVE BIAS (by design — a missed trade is cheap, a bad trade is\n    expensive): a plan is only `actionable=true` when the verdict is BUY/EXIT\n    AND concrete entry+stop levels exist AND risk-reward is >= 2:1. In every\n    other case — WAIT/AVOID, missing levels, or thin R:R — the tool returns\n    `actionable=false`, emits NO entry trigger, and states the `no_trade_reason`\n    loudly. Treat \"no trade\" as the correct, common answer, not a failure.\n\n    Always check regime_gate: a BUY from a scan that had no live market snapshot\n    is lower confidence. When `data_freshness` is present the payload is saying,\n    in a sentence, that the last scheduled run did not land and the levels\n    predate the current tape — relay that sentence; its absence means the data\n    arrived on schedule and needs no mention.\n    Always check get_earnings_calendar: an entry within 5 days of a print\n    carries gap risk a stop can't protect, and swing BUYs are suppressed there.\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\", \"MSFT\", \"NVDA\"). Case-insensitive.\n\n    Returns a dict with actionable flag, verdict, entry_plan, exit_plan, sizing,\n    regime_gate, calibration, and disclaimer embedded in the payload.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"get_trade_planArguments","type":"object"},"outputSchema":{"properties":{"ticker":{"default":null,"title":"Ticker"},"verdict":{"default":null,"title":"Verdict"},"verdict_label":{"default":null,"title":"Verdict Label"},"timing":{"default":null,"title":"Timing"},"timing_label":{"default":null,"title":"Timing Label"},"timing_statement":{"default":null,"title":"Timing Statement"},"confidence":{"default":null,"title":"Confidence"},"actionable":{"default":null,"title":"Actionable"},"no_trade_reason":{"default":null,"title":"No Trade Reason"},"entry":{"default":null,"title":"Entry"},"stop":{"default":null,"title":"Stop"},"take_profit":{"default":null,"title":"Take Profit"},"rr_ratio":{"default":null,"title":"Rr Ratio"},"rr_ratio_note":{"default":null,"title":"Rr Ratio Note"},"expected_return_pct":{"default":null,"title":"Expected Return Pct"},"attribution_url":{"default":null,"title":"Attribution Url"},"summary":{"default":null,"title":"Summary"},"disclaimer":{"default":null,"title":"Disclaimer"}},"title":"_TradePlanCardSchema","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"explain_signal","description":"Explain WHY a ticker has its current verdict — the factor attribution behind it.\n\n    get_signal gives the verdict; get_trade_plan gives the execution; explain_signal\n    gives the *reasoning*. It decomposes the quantum signal into the individual\n    factors that drove the call — directional probability, expected upside, tail\n    downside, confidence-band width, band calibration, market-condition gating, and\n    risk-reward — each with a direction, a 0..1 contribution weight, the raw value,\n    and a plain-English sentence. Pure transform over the same data get_signal\n    returns; no new model run.\n\n    TWO-SIDED BY DESIGN (north-star honesty): the response always carries a\n    `dominant_factor` (the single biggest mover) AND `dissenting_factors` (what\n    argues against the verdict). A stand-aside verdict (WAIT/AVOID) flags any\n    strong directional read it overrode — so an agent sees the bull case it is\n    declining, not just the conclusion. An empty dissent list means nothing\n    material pushed the other way, NOT that the call is certain.\n\n    Use this when an agent (or its user) needs to defend, audit, or reject a\n    signal — never pitch a one-sided trade from the verdict alone.\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\", \"MSFT\", \"NVDA\"). Case-insensitive.\n\n    Returns a dict with verdict, factors[], dominant_factor, dissenting_factors,\n    generated_at and disclaimer embedded in the payload.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"explain_signalArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_signals_batch","description":"Get signals (or trade plans) for many S&P 500 tickers in ONE call.\n\n    Built for portfolio / watchlist sweeps: a research agent analysing 10–30\n    names should fan out once here instead of N separate get_signal /\n    get_trade_plan round-trips (N quota decrements, N disclaimer copies, N\n    chances for partial failure). This is a pure transform over data already\n    exposed by get_signal / get_trade_plan — no new model work.\n\n    Per-ticker failure isolation: a not-found / timeout on one symbol records an\n    entry in ``errors`` and the batch continues — one bad ticker never aborts the\n    whole call. Input tickers are de-duplicated (first-seen order preserved) and\n    capped at 25 per call; pass more and the extras are dropped with\n    ``truncated: true``.\n\n    Args:\n        tickers: List of S&P 500 symbols (e.g. [\"AAPL\", \"MSFT\", \"NVDA\"]).\n            Case-insensitive. Max 25 processed per call.\n        plan: When False (default) each result is the get_signal payload (raw\n            verdict + levels). When True each result is the full get_trade_plan\n            payload (entry/exit ladder/sizing/risk; actionable=false unless a\n            >=2:1 BUY/EXIT).\n\n    Returns a dict: count (successful lookups), requested, truncated, results\n    (keyed by ticker symbol), errors (keyed by ticker symbol), and disclaimer.\n    ","inputSchema":{"properties":{"tickers":{"items":{"type":"string"},"title":"Tickers","type":"array"},"plan":{"default":false,"title":"Plan","type":"boolean"}},"required":["tickers"],"title":"get_signals_batchArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_forecast","description":"Get quantum probability forecasts across multiple time horizons for a ticker.\n\n    Delivers calibrated probability distributions from the Feynman path-integral\n    model: prob_up, expected growth %, downside %, and 90% confidence interval\n    (ci_low / ci_high). Backtest CI90 calibration is included where available.\n\n    Each measured horizon (3mo / 6mo / 1y) carries a `calibration` block, and\n    that block deliberately contains NO coverage figure for the ticker:\n    `ci90_empirical_coverage` is always null. BE HONEST WITH USERS — do not\n    fill that gap. Band calibration is measured across a twenty-name universe\n    at a given forecast start date, so no cell of the published record is a\n    property of one symbol, and `calibration_status` is a statement about what\n    we publish (`varies-by-start-date`, `not-published`, `not-backtested`),\n    never a grade for this ticker. The one number in the block,\n    `universe_ci90_range_pct`, is the lowest and highest coverage observed\n    ACROSS forecast start dates for the whole universe — quote it as the\n    universe's range and say what it is, never as this ticker's accuracy, and\n    never average it. Each row behind that range already averages twenty\n    names, so per-ticker dispersion is wider still. 1mo is not measured and\n    carries no block. Read the quantustik://calibration resource for the\n    per-start-date table, its provenance and its worst individual windows.\n\n    Horizons available: 1mo (always), 3mo, 6mo, 1y (availability may vary by\n    entitlement tier; public API always returns at least 1mo).\n\n    The model computes amplitude integrals over all simulated price paths to\n    capture non-linear shifts in market conditions.\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\"). Case-insensitive.\n        horizon: Optional single horizon to return (\"1mo\", \"3mo\", \"6mo\", \"1y\").\n                 If omitted, all available horizons are returned.\n\n    Returns a dict with horizons keyed by label and disclaimer\n    embedded in the payload.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"},"horizon":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Horizon"}},"required":["ticker"],"title":"get_forecastArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_market_regime","description":"Get the current MARKET CONDITIONS for the S&P 500 — ONE metric, not three.\n\n    This tool (named `get_market_regime` for backward compatibility) returns a\n    single customer-facing metric called **Market Conditions**. Present it as\n    ONE thing. It is NOT \"Market Conditions\" plus a separate \"market regime\"\n    plus a standalone \"Overheating\" and \"Euphoria\" — those are the internal\n    PARTS of this one metric, and quoting them as separate top-level gauges is\n    the exact confusion this contract exists to prevent.\n\n    THE HEADLINE is the buying-conditions verdict. THE FROTH CHECK is context\n    that explains it. They are two independent axes internally, but to a reader\n    they are one reading — Market Conditions — described by a verdict plus the\n    froth context that qualifies it.\n\n    1. THE HEADLINE — buying conditions: `score` (0-100) and `verdict`.\n       HIGHER IS BETTER FOR BUYING. Computed from a multi-signal ensemble:\n       macro, VIX, breadth, institutional flows, insider activity, sentiment,\n       sector rotation. `verdict` is one of Strong Buy / Buy / Neutral /\n       Caution / Strong Avoid — that is the complete vocabulary; this model\n       emits no \"Bull\"/\"Bear\" tiers. It gates swing-signal generation: no BUY\n       signals are emitted in Caution / Strong Avoid conditions.\n       The score is RELATIVE, not absolute: it is a z-score of the composite\n       against its own trailing ~6 months of daily readings. A low score\n       means \"among the weakest readings in about six months\" — it is NEVER\n       a claim about what percentage of the market is \"healthy\".\n       `score_basis.detail` says this in plain words; pass it on rather than\n       inventing your own interpretation of the number.\n\n    2. THE FROTH CHECK (context, not a separate metric) — the froth check is\n       PART of Market Conditions, reported as `overheating.legs` (TWO internal\n       legs, 0-100 each) and `overheating.state` (their conjunction, in plain\n       English). Present these as component context that qualifies the headline,\n       NOT as standalone \"Overheating: N/100\" / \"Euphoria: N/100\" metrics.\n       Leg 1, \"How cheaply risk is priced\": calm volatility, tight credit spreads.\n       Leg 2, \"How much the crowd is piling in\": greed, stretched breadth.\n       Froth means BOTH legs are high at once. READ AND REPORT BOTH LEGS.\n\n       The composite AND-gate scalar is NOT surfaced at the top level — it is a\n       degenerate headline and was demoted deliberately. It survives only under\n       `overheating.composite_gated.value`, labeled as meaningless without both\n       legs: it collapses to ~0 whenever EITHER leg is ~0, so it prints the same\n       \"0 — not overheated\" for a calm, cheaply-priced market the crowd ignores\n       AND for an outright panic (volatility bid, credit spreads wide). Those are\n       opposite states. `overheating.state.key` tells them apart\n       (`calm_unloved` vs `stressed`); the composite scalar cannot. Quote\n       `overheating.headline` (state label + both leg scores), never the\n       composite number on its own.\n\n    WHY BOTH: a low buying-conditions score has two completely different\n    causes — FROTH (risk cheap, everyone already piled in) or WEAKNESS\n    (deteriorating internals) — and the composite alone cannot tell them\n    apart. The froth legs are what resolve it. Neither reading is a forecast:\n    do not say a market is due for a correction on the strength of them.\n\n    QUOTE THE PLAIN-ENGLISH LABEL, NOT THE TIER. `verdict` is the internal\n    tier word; the dashboard shows a human the LABEL for that tier (\"Bad time\n    to buy\"), never the tier itself. Relay the label — a customer told \"Strong\n    Avoid\" by an assistant cannot find that phrase anywhere on the page they\n    are looking at, and reasonably concludes the two disagree.\n\n    VERDICT AUTHORITY: `verdict` is the single authoritative tier and matches\n    what a human sees on the dashboard. `model_verdict` is the tier before the\n    low-confidence downgrade and is diagnostic only; the two differ only when\n    `confidence_downgraded` is true.\n\n    Checking the market before individual tickers is the recommended decision\n    order — it gates whether BUY signals are emitted at all.\n\n    For the full explanation of WHY the verdict is what it is — all 18 signals\n    with their live contributions — call `get_market_indicators`.\n\n    Returns a dict with verdict, model_verdict, score, buying_conditions,\n    score_basis, overheating (with a per-component decomposition), confidence,\n    computed_at, and action_plan.\n    ","inputSchema":{"properties":{},"title":"get_market_regimeArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_risk_state","description":"Get the S&P 500 RISK STATE — a measurement of market risk, not a forecast.\n\n    THIS TOOL DOES NOT PREDICT ANYTHING. It reports what has already happened\n    and what one published rule holds as a result. Say \"measures\" and \"holds\",\n    never \"expects\" or \"signals\". The distinction is not pedantry: it is the\n    only reason the fields below can be quoted plainly instead of hedged.\n\n    THE HEADLINE is `markets.SPY.rule_weight` — the share of the index the rule\n    holds in today's conditions, between 0 and 1. It is NOT a recommended\n    allocation, is not addressed to the person asking, and must never be\n    relayed as advice about their money. \"The rule holds 78% of the index\" is\n    correct. \"You should hold 78%\" is not, and is the failure this contract\n    exists to prevent.\n\n    THE RULE, published in full so it can be checked:\n    1. Hold the index while it trades 1% above its 200-day average; the state\n       turns off on a close 1% below.\n    2. A close below only counts when ALL THREE stress conditions agree:\n       corporate borrowing costs above their one-year norm, the 10-year\n       Treasury yield below its level 40 days earlier, and consumer staples\n       ahead of discretionary over 60 days. Returning needs the price alone.\n    3. Position size is set at each month end from 20-day volatility, targeting\n       a 15% budget, capped at fully invested. `sizing.struck_on` says when.\n       Because it is struck monthly, it will usually disagree with what today's\n       `realised_volatility` alone implies. That is correct, not a bug.\n\n    WHY THE CONDITIONS EXIST: over 32 years the plain 200-day rule left the\n    market 48 times. Three of those absences avoided a real decline; 43 were\n    roughly three-week dips it sat out for nothing, costing more than the three\n    saved were worth. The conditions cut those 43 to 14 while keeping all three\n    exits that mattered. Do not quote this paragraph: call\n    `get_risk_state_evidence` and read `episodes`, which is where these numbers\n    come from and where they stay current.\n\n    DEGRADED READINGS ARE HONEST, NOT SILENT. A missing stress input makes an\n    exit PERMITTED rather than blocked, and is named in `stress.degraded_inputs`\n    with a `degraded_note`. If `status` is \"unavailable\", that is an outage, not\n    a calm market, and must be relayed as such.\n\n    ALWAYS RELAY THE COSTS WITH THE RETURNS. Call `get_risk_state_evidence` for\n    the committed 32-year run before quoting any historical figure. Never quote\n    a return from memory, and never present the simulated history as a live\n    track record; the rule has never been run forward.\n\n    Distinct from `get_market_regime`, which scores today's tape from eighteen\n    signals and has no backtested return edge behind it. This is one rule with\n    a committed run. Both are honest about which they are; do not merge them.\n\n    Returns as_of, stress (three conditions, each with value/reference/met, plus\n    exit_permitted and degraded_inputs), and markets.SPY (close, trend_average,\n    distance_to_average, realised_volatility, in_market, rule_weight, sizing,\n    state_changes_at).\n    ","inputSchema":{"properties":{},"title":"get_risk_stateArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_risk_state_evidence","description":"Get the committed 32-year run behind every published Risk State figure.\n\n    SIMULATED RESULTS, NEVER A LIVE TRACK RECORD. The rule was designed with\n    hindsight over this same history and has never been run forward. Say so\n    whenever you quote a number from here; a reader who takes these for a live\n    record has been misled even if every figure is accurate.\n\n    QUOTE THE COSTS IN THE SAME BREATH AS THE RETURNS. Three fields exist to\n    make that easy and must not be dropped:\n      * `published.longest_lag_years` — how long the rule spent behind simply\n        owning the index. It is the reason most people abandon a rule like this.\n      * `crises` — all seven, INCLUDING episodes the rule handled worse than\n        the index. Never filter this list to the flattering rows.\n      * `controls.static_same_average_exposure` — the same average exposure held\n        permanently and never traded. If a reader wonders whether the timing\n        does anything a smaller constant position would not, this is the answer.\n\n    `rebalance` records both sizing cadences, monthly and daily, because the\n    choice is invisible in the rule's description and decides whether the\n    strategy finishes ahead of the index or behind it. The published surface\n    uses monthly.\n\n    `gate_construction` shows the rule with no conditions, then each condition\n    added in the order it was chosen. It is a record of how the rule was built,\n    on this index's own history — not a test of the conditions, and not an\n    ablation: no run removes a condition from the finished rule. Relay it as\n    construction order, never as evidence that a condition earns its place.\n\n    Everything is read from a file committed to the repository\n    (`app/quantum_model/baselines/risk_state_baseline.json`), not recomputed on\n    request: a figure that can be regenerated per call is a figure nobody can\n    check against a diff.\n    ","inputSchema":{"properties":{},"title":"get_risk_state_evidenceArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_market_overview","description":"Get the whole dashboard market picture in ONE call — the composed snapshot.\n\n    This is the single-call twin of the market dashboard. The dashboard's market\n    view stitches several readings into one coherent picture; an answer engine\n    that had to make four separate round-trips to reconstruct \"what is the market\n    doing right now\" would more likely give up or answer from a partial view. This\n    tool returns that whole picture at once, composed from the SAME cached\n    market-regime snapshot the dashboard renders — never recomputed here — so the\n    tool's answer can never silently diverge from what a human sees on the page.\n\n    ONE SOURCE OF TRUTH. The payload is the composed regime snapshot, read from\n    cache. Every field is produced by the same builder the dashboard reads; this\n    tool adds nothing and recalculates nothing. In particular it carries:\n\n      - `verdict` / `model_verdict` / `confidence_downgraded` — the single\n        authoritative buying-conditions tier, the pre-downgrade tier, and whether\n        a low-confidence downgrade separated them (see get_market_regime for the\n        full reading of the two gauges).\n      - `headline` — the one-line plain-English summary of the current state.\n      - `score` / `score_rescale` / `buying_conditions` / `score_basis` — the\n        0-100 buying-conditions score and what it is measured against (it is a\n        trailing z-score, not an absolute health percentage).\n      - `overheating` — the froth CHECK (context within Market Conditions, not a\n        separate metric) as TWO internal legs (0-100 each): how cheaply risk is\n        priced, and how hard the crowd is leaning in. Report both legs; never quote\n        the combined scalar or present these as standalone \"Overheating\"/\"Euphoria\"\n        gauges.\n      - `signal_coverage` — \"used/total\" indicators that fed today's score, so a\n        thin-data reading is not mistaken for a confident one.\n      - `action_plan` — the \"what to do about it\" overlay, conditioned on the\n        current Market Conditions.\n\n    Reach for this first when the question is about the market as a whole. Then\n    call get_market_indicators for the full per-signal breakdown, or\n    get_market_regime for the same snapshot with the two-gauge reading spelled out\n    in detail.\n\n    Returns the composed market snapshot dict (the fields above and the rest of\n    the snapshot) with the educational-research disclaimer embedded — the same\n    disclaimer that travels with every detachable forecast artifact, because this\n    is model-state read out of page context.\n    ","inputSchema":{"properties":{},"title":"get_market_overviewArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_market_indicators","description":"Get every market indicator we compute, in plain English, with its contribution.\n\n    This is the full, dry state of the market: all 18 weighted signals the model\n    composes — breadth, institutional flow, insider clusters, Fear & Greed, VIX,\n    credit spreads, the yield curve, our own forecast, and the rest — each with a\n    plain-English label, its current reading, what that reading means, and exactly\n    how much it moved today's score.\n\n    Rows are grouped by what they do to the verdict, under `groups`:\n      - \"down\"        — signals pushing the verdict down (bad for the buyer)\n      - \"up\"          — signals pushing it up\n      - \"silent\"      — measured, sitting in normal territory, contributing zero.\n                        Load-bearing: this is how you tell a CALM market from a\n                        panicking one, and a weak market from a frothy one.\n      - \"unavailable\" — no data today. NOT the same as \"silent\"; do not report a\n                        missing signal as if it read \"fine\".\n\n    `aggregate.arithmetic` gives the sum that produces the score, so the verdict\n    can be checked rather than asserted. `aggregate.how_unusual` says what the\n    score is measured against.\n\n    This returns the SAME rows, with the SAME wording, that a human sees on the\n    website. Quote them as they are — the labels, meanings and colours are the\n    canonical ones and are not meant to be paraphrased into a different vocabulary.\n\n    Returns a dict with title, as_of, aggregate, groups, rows, and disclaimer.\n    ","inputSchema":{"properties":{},"title":"get_market_indicatorsArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_ticker_indicators","description":"Get everything we compute about ONE stock, in plain English, with contributions.\n\n    The per-ticker twin of `get_market_indicators`: the eight weighted components\n    that make the conviction score (forecast direction, realistic downside, how well\n    our past forecasts held up for this specific stock, trend, momentum, overbought/\n    oversold, position in the 52-week range, and path momentum — whether our forecast\n    is in step with the stock's recent moves, a continuity check and NOT a\n    forecast-accuracy score), the forecast band, the risk and sizing numbers, and\n    every risk check that can veto a BUY.\n\n    Rows are grouped by what they do to the verdict, under `groups`:\n      - \"down\"        — pushing the verdict down. Includes any risk check currently\n                        BLOCKING a BUY: those carry no points (they are vetoes, not\n                        subtractions) but they are the reason there is no signal.\n      - \"up\"          — pushing it up.\n      - \"silent\"      — measured and not moving the score: the neutral components,\n                        plus the context rows (price, band, volatility, beta,\n                        drawdown, position size) that are shown but never scored.\n      - \"unavailable\" — no reading, or a risk check the cascade never reached because\n                        an earlier one had already blocked the signal. NOT a pass, and\n                        not the same as \"silent\" — do not report it as \"fine\".\n\n    `aggregate.arithmetic` gives the sum that produces the score: a neutral stock\n    starts at 5.0/10 and the scoring rows move it from there, so the column adds up\n    to the headline and the verdict can be checked rather than asserted.\n\n    This returns the SAME rows, with the SAME wording, that a human sees at\n    /ticker/<TICKER>/indicators. Quote them as they are.\n\n    Returns a dict with title, as_of, aggregate, groups, rows, and disclaimer.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"get_ticker_indicatorsArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_fear_greed","description":"Get the latest Fear and Greed index value.\n\n    Sourced from the CNN Fear and Greed model, cached and refreshed periodically.\n    Values range 0 (Extreme Fear) to 100 (Extreme Greed).\n\n    Read it alongside get_market_regime, which exposes both gauges: high greed\n    with good buying conditions = momentum intact; high greed with a hot\n    overheating gauge = crowded long, a contrarian warning. Fear (below 50) is\n    the crowd NOT leaning in — on its own that argues against calling a market\n    frothy, whatever the buying-conditions score says.\n\n    Returns a dict with value (0-100), label (e.g. \"fear\"), and timestamp, plus\n    `current` ({score, rating, updated_at}), `history`, and the per-component\n    `sub_indicator_scores`.\n    ","inputSchema":{"properties":{},"title":"get_fear_greedArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_signal_history","description":"Get historical signal events for a ticker.\n\n    Events include: new_buy, tp_hit (the price actually reached a profit\n    target we named), trail_stop_hit (the trailing stop closed the trade short\n    of the target — may be a gain or a loss), stop_hit, position_closed.\n    Useful for evaluating how past signals played out — the primary\n    signal-quality verification tool. A trade WON only if payload.pnl_r > 0;\n    the event type names the exit mechanism, never the result.\n\n    Reviewing tp_hit / stop_hit ratios shows realised performance vs the\n    stated R:R — a 2:1 R:R target is only meaningful if the stop_hit rate is\n    low.\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\"). Case-insensitive.\n        limit: Number of events to return (1–100, default 10).\n\n    Returns a dict with ticker, count, and events list.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"},"limit":{"default":10,"title":"Limit","type":"integer"}},"required":["ticker"],"title":"get_signal_historyArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_track_record","description":"Get the realised track record: win-rate + R-multiple distribution.\n\n    Aggregates actual closed outcomes (tp_hit, trail_stop_hit, stop_hit, position_closed)\n    into an honest scorecard — win_rate, wins/losses, and the realised-R\n    distribution (mean/median/min/max/total). Pass a ticker for its\n    per-ticker record; omit it (or pass \"\") for the portfolio-wide record.\n\n    HONESTY: small samples are flagged `illustrative: true` with an\n    explanatory `note`, and `win_rate` is null when no closed P&L exists.\n    Never present an illustrative record as a reliable hit-rate. Every\n    number is grounded in stored outcome events — none are fabricated.\n\n    This is the ground-truth check on signal quality: a high stated R:R only\n    holds if the realised-R mean is positive and the stop-hit rate is low.\n\n    Args:\n        ticker: Stock ticker (e.g. \"AAPL\"), or \"\" for portfolio-wide.\n\n    Returns a dict with scope, sample_size, win_rate, realised_r, and note.\n    ","inputSchema":{"properties":{"ticker":{"default":"","title":"Ticker","type":"string"}},"title":"get_track_recordArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_earnings_calendar","description":"Get the earnings calendar (next + last report) for one S&P 500 ticker.\n\n    Earnings are a scheduled volatility event. A swing entry held into a print\n    carries gap risk that no stop can protect against — the price can jump the\n    stop overnight. This tool surfaces the next-upcoming and last-reported\n    earnings dates plus a derived `earnings_risk_note` so an agent can time\n    entries around the event rather than blindly into it.\n\n    Edge / risk discipline: when the next report is <= 5 days out, swing BUYs\n    are suppressed server-side (see get_signal / get_trade_plan) — the note\n    here says so loudly and flags any entry as elevated gap risk. Far from a\n    print, the note is neutral. This is the timing companion to get_trade_plan.\n\n    Graceful degradation: earnings data is a silently-degrading signal. When no\n    data is available (cold cache + no live source), `available` is false and\n    `next`/`last` are null — treat that as \"unknown\", not \"no earnings\".\n\n    Args:\n        ticker: Stock ticker symbol (e.g. \"AAPL\", \"MSFT\", \"NVDA\"). Case-insensitive.\n\n    Returns a dict with available, next, last, days_until_next, earnings_risk_note,\n    as_of and disclaimer embedded in the payload.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"get_earnings_calendarArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"scan_universe","description":"Scan the S&P 500 universe and return filtered signals.\n\n    Pushes filters + pagination to the server (GET /signals): the REST API\n    applies min_conviction/direction/sector and returns one page of size limit,\n    so the LLM payload stays tight regardless of how broad the universe is. Use\n    this to discover high-conviction opportunities across the market rather than\n    analyzing tickers one by one.\n\n    The scan covers all S&P 500 tickers simultaneously, surfacing cross-ticker\n    convergence patterns that per-ticker analysis would miss.\n\n    Freshness: scan runs on a scheduled cadence (typically several times per day).\n    Results carry scan_generated_at, and a `data_freshness` sentence only when\n    the scheduled run did not land.\n\n    Pagination: results are deterministically ordered server-side. When more\n    results remain, next_cursor is a non-null opaque token — pass it back as\n    cursor= to fetch the next page (scan_universe(..., cursor=next_cursor)).\n    next_cursor is null on the last page.\n\n    Args:\n        min_conviction: Minimum conviction score (0–10). Recommended: 6.0+ for\n                        actionable signals, 7.5+ for high-conviction only.\n        direction: Filter by signal verdict — \"BUY\", \"WAIT\", \"AVOID\", or \"WATCH\".\n                   Case-insensitive.\n        sector: Filter by sector name (partial match, case-insensitive).\n                Examples: \"Technology\", \"Health Care\", \"Financials\".\n        limit: Page size — max results per call (default 20, max 100).\n        cursor: Opaque pagination cursor from a previous call's next_cursor.\n                Omit for the first page.\n\n    Returns a dict with count, scan_generated_at, results list,\n    next_cursor (null when no further pages), and disclaimer embedded in the\n    payload.\n    ","inputSchema":{"properties":{"min_conviction":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Min Conviction"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Direction"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Sector"},"limit":{"default":20,"title":"Limit","type":"integer"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cursor"}},"title":"scan_universeArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_correlation_map","description":"Get the cross-ticker ENTANGLEMENT map — which S&P 500 names the quantum model expects to co-move.\n\n    \"Entanglement\" here is the Pearson correlation of the quantum model's own\n    FORECAST return paths (mode=\"forecast\", the default) — a forward-looking,\n    model-implied co-movement signal. It is NOT a claim about realised market\n    correlation, and you must not present it as one. mode=\"realized\" instead\n    correlates trailing daily returns (the consensus baseline) for comparison.\n\n    Two ways to read it:\n      • Diversification / risk lens — high entanglement means two names are\n        effectively one trade. Stacking five mutually-entangled longs is one\n        position with 5x the size, not a diversified book.\n      • Pairs / divergence lens — strongly NEGATIVE entanglement flags names the\n        model expects to move oppositely (hedge or pairs candidates).\n\n    Honesty: every number is computed from real persisted scan output. Tickers\n    with no usable forecast curve are listed in `missing`, never imputed. The\n    universe is the top_n names ranked by 3mo forecast growth.\n\n    Args:\n        ticker: Optional. When set, returns only that ticker's row\n                (correlations + most_entangled + most_divergent), not the full\n                matrix. Case-insensitive.\n        top_n: Universe size — top-N tickers by 3mo forecast growth (2–100,\n               default 25). Smaller = tighter LLM payload.\n        horizon: Forecast horizon to correlate — \"1mo\", \"3mo\", \"6mo\", or \"1y\"\n                 (default \"3mo\").\n        mode: \"forecast\" (model-implied, default) or \"realized\" (trailing-returns\n              baseline).\n        basis: Forecast-mode correlation basis. \"mean\" (default) correlates the\n               single mean forecast curve. \"ensemble\" correlates across the full\n               forecast band envelope (q05/q25/mean/q75/q95) and averages the\n               per-band correlations — this surfaces TAIL co-movement (two names\n               whose stress/downside paths move together) that the mean curve\n               understates, which is exactly when diversification matters most.\n               Ignored in realized mode. The method label becomes\n               \"quantum_forecast_ensemble\" so you never conflate the two.\n\n    Returns the full-matrix shape (tickers / matrix / top_pairs / missing) by\n    default, or the single-ticker shape when `ticker` is given. Carries\n    method, basis, generated_at, scan_date, and disclaimer in the payload.\n    ","inputSchema":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"},"top_n":{"default":25,"title":"Top N","type":"integer"},"horizon":{"default":"3mo","title":"Horizon","type":"string"},"mode":{"default":"forecast","title":"Mode","type":"string"},"basis":{"default":"mean","title":"Basis","type":"string"}},"title":"get_correlation_mapArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_insider_pulse","description":"Get SEC Form 4 insider-trading activity — per-ticker detail or S&P 500 screener.\n\n    Surfaces already-ingested Form 4 filings (the same Form 4 feed behind the\n    market model's `form4` stage) pre-chewed into analytical context so you\n    don't have to parse raw XBRL yourself: buyer role (officer / director /\n    10% owner), transaction size vs that SAME insider's own historical buy\n    pattern (`size_vs_own_median`, `is_unusually_large` when >=2x their own\n    median), and cluster-buy detection (`is_cluster` — 3+ distinct insiders\n    buying the same ticker within a 10-day window, historically the stronger\n    signal vs a single insider's trade). Every transaction links to its\n    source SEC filing via `accession_url` — verify anything before acting.\n\n    Two modes:\n      - ticker set: per-ticker view — up to 40 most-recent Form 4 transactions\n        over the trailing year plus `cluster_buy_active`.\n      - ticker omitted: S&P 500 (top-100) screener — tickers with a cluster\n        buy or an unusually-large buy in the last 30 days. An empty\n        `results` list is a valid, honest answer; most weeks most tickers\n        show nothing notable.\n\n    Read-only surfacing: this is information, NOT a buy/sell recommendation,\n    and it does NOT feed the quantum model's conviction/verdict logic — insider\n    clusters are a candidate signal still pending backtest validation.\n\n    Args:\n        ticker: Optional. Stock ticker for the per-ticker view (e.g. \"AAPL\").\n                Omit for the S&P 500 screener. Case-insensitive.\n\n    Returns per-ticker: ticker, transactions, cluster_buy_active, generated_at,\n    disclaimer. Screener: tickers_scanned, results, generated_at, disclaimer.\n    ","inputSchema":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"}},"title":"get_insider_pulseArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_filings_digest","description":"Get SEC 8-K event digest — per-ticker detail or a site-wide recent feed.\n\n    New EDGAR ingestion (unlike get_insider_pulse's Form 4 data, which was\n    already ingested): polls 8-K filings and pre-chews each one so you don't\n    have to parse raw filing HTML yourself. Event type comes from the\n    filing's OWN structured SEC Item number(s) — GROUND TRUTH, never\n    LLM-guessed (e.g. Item 5.02 = exec departure/appointment, Item 2.02 =\n    earnings results, Item 2.01 = M&A completion, Item 4.02 = restatement).\n    The `summary` field is a one-line AI narration grounded in the actual\n    filed document text (`summary_source: \"llm\"`), or a factual sentence\n    built purely from the Item label(s) when no document excerpt was\n    available (`summary_source: \"item_labels\"`) — never fabricated content\n    either way. Every filing links to its source SEC filing via\n    `accession_url` — verify anything before acting.\n\n    Two modes:\n      - ticker set: per-ticker view — up to 15 most-recent 8-Ks over the\n        trailing ~6 months.\n      - ticker omitted: site-wide feed — up to 30 most-recent 8-Ks across\n        the S&P 500 (top-100) universe in the trailing ~2 weeks. An empty\n        `filings` list is a valid, honest answer on a quiet news day.\n\n    Read-only surfacing: this is information, NOT a buy/sell recommendation,\n    and it does NOT feed the quantum model's conviction/verdict logic.\n\n    Args:\n        ticker: Optional. Stock ticker for the per-ticker view (e.g. \"AAPL\").\n                Omit for the site-wide recent feed. Case-insensitive.\n\n    Returns per-ticker: ticker, filings, generated_at, disclaimer.\n    Feed: tickers_scanned, filings, generated_at, disclaimer.\n    ","inputSchema":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"}},"title":"get_filings_digestArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_filing_language_diff","description":"Get the \"Lazy Prices\" 10-K/10-Q language diff for one ticker.\n\n    Compares the two most recent 10-K (year-over-year, default) or 10-Q\n    (quarter-over-quarter) filings' Risk Factors (Item 1A) and MD&A\n    (Item 7 for 10-K, Item 2 for 10-Q) sections, pre-chewed so you don't have\n    to parse raw filing HTML yourself: a real TF-IDF cosine similarity score\n    between the two extracted section texts, plus the top added/removed\n    sentences from a real sentence-level diff, plus a one-line AI summary\n    grounded strictly in those diffed sentences (`summary_source: \"llm\"`), or\n    a factual sentence built purely from the computed similarity/counts when\n    no LLM is available (`summary_source: \"computed\"`) — never fabricated\n    either way. Every result links to BOTH source filings via\n    `filings[].accession_url` — verify anything before acting.\n\n    Cites a known academic finding: Cohen, Malloy & Nguyen (2020), \"Lazy\n    Prices\", Journal of Finance — YoY changes in 10-K Risk Factors/MD&A\n    language are historically return-predictive. This is a third-party\n    academic result cited for context, NOT a claim or backtest result of\n    this app.\n\n    An empty `sections` dict is a valid, honest answer when the ticker has\n    fewer than 2 filings of the requested form on file, or a section\n    couldn't be reliably extracted from both filings (known gap: this\n    extractor targets the common modern EDGAR HTML filing format used by\n    large-cap names; older/non-standard filing formats may not extract).\n\n    Read-only surfacing: this is information, NOT a buy/sell recommendation,\n    and it does NOT feed the quantum model's conviction/verdict logic — this\n    is a candidate signal still pending backtest validation.\n\n    Args:\n        ticker: Stock ticker (e.g. \"AAPL\"). Case-insensitive.\n        form: \"10-K\" (year-over-year, default) or \"10-Q\" (quarter-over-quarter).\n\n    Returns: ticker, form, filings (the two compared filings with\n    accession_url), sections (keyed by \"risk_factors\"/\"mda\", each with\n    similarity, added_sentences, removed_sentences, summary,\n    summary_source), generated_at, disclaimer.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"},"form":{"default":"10-K","title":"Form","type":"string"}},"required":["ticker"],"title":"get_filing_language_diffArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_institutional_activity","description":"Get 13F whale summaries + SC 13D/G activist alerts for one ticker.\n\n    Final slice of the SEC EDGAR AI-digest layer. Two surfaces\n    in one payload:\n\n    `whale_summary` — QoQ (quarter-over-quarter) change in institutional\n    ownership across a curated ~50-filer 13F universe (activist funds,\n    quant shops, mega index managers, tiger cubs, sovereign wealth, etc.):\n    new positions opened, positions closed, and the largest\n    increases/decreases by dollar value between the two most recent 13F\n    quarters on file. Pure computed deltas — no LLM narration, just real\n    numbers. Institutional filer names come from SEC's own submissions data\n    (ground truth), and every filer row links to its source 13F accession\n    via `accession_url`. When there's genuinely nothing to compute (ticker\n    not held by any tracked filer, or fewer than 2 quarters on file), the\n    `narration` field says so plainly instead of a fabricated result.\n    A filer only ever appears in `closed_positions` when there is an actual\n    filing from that filer covering the latest quarter that omits this\n    ticker's cusip; a filer simply absent from the latest snapshot with no\n    filing on file for that quarter at all lands in `no_recent_filing`\n    instead — never treated as a sale. Absence of a filing is not evidence\n    of a sale.\n\n    `activist_alerts` — recent Schedule 13D (activist/control intent) and\n    13G (passive >5% stake) filings. 13D entries carry a one-line AI summary\n    grounded STRICTLY in the filing's own Item 4 (\"Purpose of Transaction\")\n    text when it can be confidently extracted (`summary_source: \"llm\"`) —\n    never an invented intent; otherwise a factual fallback sentence\n    (`summary_source: \"item_label\"`). 13G entries get a structured, non-AI\n    note (`summary_source: \"structured\"`) since 13G is reserved for passive\n    filers with nothing to narrate beyond the threshold crossing. Every\n    alert links to its source filing via `accession_url`.\n\n    Read-only surfacing: this is information, NOT a buy/sell recommendation,\n    and it does NOT feed the quantum model's conviction/verdict logic — this\n    is a candidate signal still pending backtest validation.\n\n    Args:\n        ticker: Stock ticker (e.g. \"AAPL\"). Case-insensitive.\n\n    Returns: ticker, whale_summary (cusip, quarters, new_positions,\n    closed_positions, no_recent_filing, increased, decreased, narration),\n    activist_alerts (list of filings with form, reporting_person, summary,\n    summary_source, accession_url), generated_at, disclaimer.\n    ","inputSchema":{"properties":{"ticker":{"title":"Ticker","type":"string"}},"required":["ticker"],"title":"get_institutional_activityArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"top_opportunities","description":"Get a small, risk-vetted shortlist of asymmetric setups passing every gate right now.\n\n    This is NOT a screener. Where scan_universe returns up to 100 sortable rows,\n    top_opportunities answers the real question — \"what are the 1-3 highest-conviction\n    setups right now, and what's the catch on each?\" — and deliberately returns\n    FEW or ZERO names.\n\n    A setup is included ONLY if it passes ALL of:\n      • current market conditions permit new longs (not Caution / Strong Avoid),\n      • conviction >= 7.5 (high-conviction floor — multi-signal convergence), and\n      • risk-reward >= 2:1 with concrete entry + stop levels.\n\n    AN EMPTY LIST IS A VALID, HONEST ANSWER. In a hostile or unclear market the\n    right call is to wait — a missed trade is cheap, a bad trade is expensive.\n    When nothing qualifies, `count` is 0, `results` is empty, and `message`\n    explains why (e.g. the market is hostile, or no name cleared the bar).\n\n    Every returned item carries its bear case in `key_risk` so you never present\n    a one-sided pitch. Each also includes the full entry_plan / exit_plan / sizing\n    from get_trade_plan.\n\n    Args:\n        max_results: How many setups to return (1–5, default 3). Capped at 5 —\n                     this surface is intentionally sparse.\n\n    Returns a dict with count, regime (the market verdict — key name kept for\n    existing integrations), message, results (each with ticker, verdict,\n    conviction, entry_plan, exit_plan, sizing, rr_ratio, key_risk),\n    and disclaimer embedded in the payload.\n    ","inputSchema":{"properties":{"max_results":{"default":3,"title":"Max Results","type":"integer"}},"title":"top_opportunitiesArguments","type":"object"},"outputSchema":{"properties":{"count":{"default":null,"title":"Count"},"regime":{"default":null,"title":"Regime"},"message":{"default":null,"title":"Message"},"cards":{"default":null,"title":"Cards"},"attribution_url":{"default":null,"title":"Attribution Url"},"disclaimer":{"default":null,"title":"Disclaimer"}},"title":"_TopOpportunitiesCardSchema","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"search","description":"Search Quantustik for S&P 500 tickers by symbol or company name.\n\n    Paired with fetch — this is the two-tool \"search\"/\"fetch\" convention\n    ChatGPT connectors and deep-research clients expect from an MCP server:\n    call search first to get lightweight hits, then fetch(id) on the one(s)\n    worth reading in full.\n\n    Args:\n        query: Ticker symbol (e.g. \"NVDA\") or company-name substring (e.g.\n               \"nvidia\", \"apple\"). Case-insensitive.\n\n    Returns a dict with a `results` list of up to 10 {id, title, url}\n    objects — id is the ticker symbol, ranked exact-symbol match first, then\n    company-name/ticker prefix, then substring. Empty query or no scan data\n    returns an empty list, never an error.\n    ","inputSchema":{"properties":{"query":{"title":"Query","type":"string"}},"required":["query"],"title":"searchArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"fetch","description":"Fetch the full Quantustik signal + forecast writeup for one ticker.\n\n    Paired with search — call search(query) first to find the ticker's id,\n    then fetch(id) here for the full readable content. Also accepts a bare\n    ticker symbol typed directly (id need not come from a prior search call).\n\n    Args:\n        id: Ticker symbol as returned by search, e.g. \"NVDA\".\n\n    Returns a dict with id, title, text (a plain-text signal/forecast\n    summary suitable for quoting or summarizing), url, and metadata\n    (verdict, conviction, generated_at).\n    ","inputSchema":{"properties":{"id":{"title":"Id","type":"string"}},"required":["id"],"title":"fetchArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"list_capabilities","description":"List all available Quantustik MCP tools and resources.\n\n    Use this as the entry point when a user asks what can you do with\n    Quantustik, or to discover the full surface area of the server.\n\n    Returns a structured description of every tool and resource.\n    ","inputSchema":{"properties":{},"title":"list_capabilitiesArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_started","description":"Onboard to the Quantustik API/MCP: anonymous access and quotas.\n\n    No API key is needed — every tool is callable right now under an\n    anonymous per-IP hourly cap. Returns the live keyless/free-key request\n    quotas (pulled live from server config) plus the optional key-issuance\n    URL and auth header format. Pure informational — no auth required to\n    call it.\n    ","inputSchema":{"properties":{},"title":"get_startedArguments","type":"object"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"prompts_list":{"status":"ok","latency_ms":114.83,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":3,"result":{"prompts":[{"name":"find_swing_trade","description":"Guided workflow: find a high-conviction S&P 500 swing trade, the right way.\n\n    Runs the Quantustik methodology in the correct order (market → scan → trade\n    plan) with risk guardrails built in, instead of poking tools ad hoc. Returns\n    at most a few setups — an empty result (\"WAIT, nothing qualifies\") is a valid,\n    honest outcome.\n\n    Args:\n        min_conviction: Optional conviction floor (e.g. \"7.5\"). Higher = stricter.\n        sector: Optional sector filter (e.g. \"Technology\").\n    ","arguments":[{"name":"min_conviction","required":false},{"name":"sector","required":false}]},{"name":"risk_check","description":"Guided workflow: risk-check a position in TICKER before acting.\n\n    Pulls the trade plan, states the explicit max loss, and recommends trim/exit\n    if the invalidation level has been breached. Risk-first, not thesis-first.\n\n    Args:\n        ticker: The ticker to risk-check (e.g. \"AAPL\").\n        position_size: Optional current/intended size as % of capital (e.g. \"5\").\n    ","arguments":[{"name":"ticker","required":true},{"name":"position_size","required":false}]},{"name":"market_briefing","description":"Guided workflow: a concise, risk-framed market briefing.\n\n    Combines the market state + fear/greed into a top-of-day picture, with an explicit note\n    on what risk is currently being suppressed (why BUYs may be scarce).\n    ","arguments":[]}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"prompt_get":{"status":"ok","latency_ms":112.5,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":4,"result":{"description":"Guided workflow: find a high-conviction S&P 500 swing trade, the right way.\n\n    Runs the Quantustik methodology in the correct order (market → scan → trade\n    plan) with risk guardrails built in, instead of poking tools ad hoc. Returns\n    at most a few setups — an empty result (\"WAIT, nothing qualifies\") is a valid,\n    honest outcome.\n\n    Args:\n        min_conviction: Optional conviction floor (e.g. \"7.5\"). Higher = stricter.\n        sector: Optional sector filter (e.g. \"Technology\").\n    ","messages":[{"role":"user","content":{"type":"text","text":"GUARDRAILS (Quantustik north-star — make money at MINIMUM risk):\n1. Asymmetric conviction: a BUY must be rare and earned. If the edge is unclear, prefer WAIT/AVOID over a weak BUY. A missed trade is cheap; a bad trade is expensive.\n2. Decision order is MARKET → SCAN → TRADE PLAN → RISK CHECK. Never recommend an entry before confirming the market permits new longs.\n3. Refuse to recommend an entry when the market is hostile (Caution / Strong Avoid) or when risk-reward is below 2:1 — say so explicitly.\n4. Always state uncertainty honestly: say how well the model's confidence bands have held up (the calibration score), and repeat any `data_freshness` sentence the payload carries. If the model is uncertain, say so loudly. Never read out a field name or a flag — the reader cannot see our site, so say what the number means in the same breath as the number.\n5. Always close with the educational-disclaimer: this is research only, not personalized financial advice.\n\nTASK: Find a high-conviction S&P 500 swing trade.\n\nFollow this exact order:\n1. Call `get_market_regime` (the current Market Conditions). If the verdict is Caution or Strong Avoid, STOP and report: no new longs in this market — WAIT. Do not scan further.\n2. Call `top_opportunities` (it already enforces market-permitted + conviction >= 7.5 + R:R >= 2:1). If it returns an empty list, report that no asymmetric setup qualifies right now and stop — that is the correct answer, not a failure.\n3. For each returned setup, call `get_trade_plan(ticker)` and present: the entry trigger + invalidation, the TP1/TP2/TP3 exit ladder + trailing stop, the position-size and max-drawdown, the R:R, AND the one-line key_risk (bear case). Never present a setup without its key_risk.\n4. Rank by conviction; recommend at most the top 1-3. Close with the educational-disclaimer."}}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"},"prompt_name":"find_swing_trade","prompt_arguments":[{"name":"min_conviction","required":false},{"name":"sector","required":false}]}},"resources_list":{"status":"ok","latency_ms":108.23,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":5,"result":{"resources":[{"name":"methodology","uri":"quantustik://methodology","description":"Quantustik quantum model methodology reference.","mimeType":"text/plain"},{"name":"calibration_resource","uri":"quantustik://calibration","description":"Published band-calibration record: CI90 coverage per forecast start date.\n\n    Byte-identical to what ``GET /api/calibration`` serves, plus a disclaimer,\n    because it is built by the same function. One service must not return two\n    different answers about its own calibration, and the machine-readable one\n    is the one agents quote verbatim with none of the page around it.\n\n    The record is a table on purpose: coverage is measured across the TOP-20\n    universe separately at each quarterly start date, and it swings roughly\n    twenty percentage points depending only on which quarter the forecast\n    started in. No pooled figure is published at any horizon. These are\n    band-calibration figures — did the 90% band contain 90% of realized prices\n    — and never a directional hit-rate.\n    ","mimeType":"text/plain"},{"name":"track_record_resource","uri":"quantustik://track-record","description":"Portfolio-wide realised track record (honest scorecard).\n\n    Aggregates all closed outcomes (tp_hit / trail_stop_hit / stop_hit / position_closed) into\n    a win-rate + R-multiple distribution. Small samples are flagged\n    `illustrative: true`; `win_rate` is null when no closed P&L exists. Every\n    number is grounded in stored events — none are fabricated. Fails soft: if\n    the outcome data is temporarily unavailable (e.g. a database hiccup), the\n    resource still returns a valid `illustrative` payload rather than an error.\n    ","mimeType":"text/plain"},{"name":"disclaimer_resource","uri":"quantustik://disclaimer","description":"Full Quantustik financial disclaimer.","mimeType":"text/plain"}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"}}},"resource_read":{"status":"ok","latency_ms":109.35,"details":{"url":"https://quantustik.com/mcp","payload":{"jsonrpc":"2.0","id":6,"result":{"contents":[{"uri":"quantustik://methodology","mimeType":"text/plain","text":"# Quantustik — Quantum Model Methodology\n\n## Overview\nQuantustik applies quantum-mechanics mathematics to equity price forecasting.\nOn the committed TOP-20 S&P 500 backtest (FMP close data), how often the model's 90% confidence intervals covered the realized price depends heavily on when the forecast started. Across 9 quarterly start dates from 31 Mar 2024 to 31 Mar 2026, coverage ran 78–95% (3 months), 71–92% (6 months), 86–96% (1 year), against a 90% target. No pooled average is published: the windows overlap at 6 months and 1 year, so averaging them would state an accuracy the measurement cannot support. The\nmeasurement is taken against the model as served, with the market and sector\ncoupling attached, so it describes the same code path a live forecast runs\nthrough. Individual windows are worse still — worst on record: 3 months UNH started 30 Jun 2025 10%; 6 months NVDA started 30 Jun 2024 6%; 1 year NVDA started 31 Dec 2024 2%. A start date inside the tolerance is not a per-name guarantee. These are band-calibration figures (do 90% bands contain 90%\nof outcomes?), not a directional hit-rate.\n\n## Core mathematics\n\n### Schrodinger equation (price wave function)\nPrice probability distributions are modeled as quantum wave functions evolving\nover time. The squared amplitude |psi(P,t)|^2 gives the probability density of\nprice P at time t, capturing the full distribution — not just point estimates.\n\n### Feynman path integrals (signal generation)\nInstead of asking what is the most likely price, the model sums contributions\nfrom ALL possible price paths, weighted by their quantum amplitude.\nThis naturally captures:\n- Non-linear shifts in market conditions that moving averages miss\n- Fat-tail probability (black swan awareness)\n- Path-dependent momentum and mean-reversion\n\n## Signal pipeline\n1. Data ingestion — OHLCV from FMP (primary) + Yahoo Finance (fallback)\n2. Wave function construction — historical returns to quantum state\n3. Path integral computation — Feynman amplitude summation over price paths\n4. Horizon forecasting — 1mo / 3mo / 6mo / 1y probability distributions\n5. Swing signal generation — entry/stop/TP ladder from conviction-gated amplitudes\n6. Market gating — signals suppressed when the market reads Caution / Strong Avoid\n7. Conviction scoring — multi-signal agreement depth (0-10 scale)\n\n## Calibration\n**The forecast and signals API publish no band-coverage percentage for an\nindividual ticker, at any horizon.** `band_coverage_pct` and its deprecated\naliases `calibration_score` / `backtest_ci90` are ALWAYS NULL in forecast\nresponses. The keys are retained so a consumer sees an explicit null rather\nthan a vanished field — do not treat a null here as missing data to fill in\nfrom elsewhere, and never quote a per-ticker coverage figure from any other\nsource as ours.\n\nOne deliberate exception, so the two do not read as contradicting each other,\nand it applies by measurement CLASS rather than by naming which endpoint\ncarries it: any row anywhere we publish that names a ticker together with a\nforecast start date as one of the universe record's **worst individual\nwindows** — currently `GET /api/calibration`, `GET /api/calibration/tsfm`,\nthe `quantustik://calibration` resource, and `/llms.txt` — is a cell of the\nuniverse measurement at one start date, not a reading for that ticker. Quote\nthem with the start date attached, or not at all.\n\nA second, softer class carries no ticker at all: universe-level MIN/MAX\ndispersion of per-ticker coverage, such as `our_ticker_range` /\n`chronos2_ticker_range` on the Chronos-2 cross-check. Those name no ticker to\nattach a claim to, so they fall outside the per-ticker claim entirely — read\nthem as the spread of the universe, never as one name's figure.\n\nThose fields used to carry the live scan's own backtest coverage. It was\nwithdrawn for two independent reasons: it is a SINGLE hold-out window\n(effective sample size one, so it swings on nothing but which past date the\ntest started from); and a bare coverage percent inverts on the reader — a\nnominal 90% band that held 99% of prices is too WIDE to be informative, a\ndefect that reads as a good grade. Never present band coverage as\n\"X% accurate\".\n\nWhat you get instead, per horizon:\n- `band_width_read` — `ran-narrow` | `about-right` | `ran-wide`: which way the\n  band missed in that one window. A DIRECTION of miss, not a rate. `ran-wide`\n  is a defect, not a good result.\n- `band_width_note` — the sentence stating what the read was computed from.\n  Quote it whenever you quote the read; the read alone is not self-explanatory.\n- `band_reliability` ([0.1, 0.9], higher is better) — the field to RANK on. It\n  is two-sided, peaking near a 90% coverage and falling away on both sides, so\n  an over-wide band cannot score high. Derived from the same single window, so\n  it is a coarse ordering rather than a measurement.\n\nThe band calibration we HAVE measured is universe-level: the TOP-20 S&P 500\nrecord, measured separately at each quarterly forecast start date, at\n`GET /api/calibration` and the `quantustik://calibration` resource. No cell of\nit is a property of one symbol. These are band-calibration figures, not a\ndirectional hit-rate.\n\n## Universe\nS&P 500 (~500 tickers). Scans run on a scheduled cadence throughout the trading day.\n\n## Limitations\n- Data freshness: signals come from a scheduled batch scan, not a live tick\n  feed, so they lag real-time prices by hours. A response carries a\n  `data_freshness` sentence only when the run that should already have\n  completed did not land\n- S&P 500 only — no coverage of small-caps, crypto, or international equities\n- Model assumes continuous trading; gap events (earnings, halts) are partially gated\n- All outputs are probabilistic — no guarantee of future performance\n"}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"},"resource_uri":"quantustik://methodology"}},"determinism_probe":{"status":"ok","latency_ms":134.16,"details":{"attempts":2,"successful":2,"matches":2,"stable_ratio":1.0,"baseline_signature":"90706545599aff0ab2cf7eb18e6734da2eb483964afe7a7bd8cb3ccaf32168fb","errors":[]}},"instruction_tool_reference_probe":{"status":"ok","latency_ms":null,"details":{"referenced_tools":["get_started"],"missing_tools":[],"observed_tool_count":26}},"session_resume_probe":{"status":"warning","latency_ms":null,"details":{"reason":"no_session_id","transport":"streamable-http","resume_expected":true,"protocol_version":"2025-03-26"}},"step_up_auth_probe":{"status":"missing","latency_ms":null,"details":{"oauth_present":false,"auth_required_checks":[],"supported_scopes":[],"scope_specificity_ratio":0.0,"broad_scopes":[],"challenge_headers":[],"step_up_signals":[],"minimal_scope_documented":false}},"transport_compliance_probe":{"status":"warning","latency_ms":107.46,"details":{"transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"requested_protocol_version":"2025-03-26","bad_protocol_status_code":400,"bad_protocol_payload":{"jsonrpc":"2.0","id":"server-error","error":{"code":-32600,"message":"Bad Request: Unsupported protocol version: 1999-99-99. Supported versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25"}},"bad_protocol_headers":{"content-type":"application/json","strict-transport-security":"max-age=31536000; includeSubDomains"},"bad_protocol_error":null,"delete_status_code":null,"delete_error":null,"expired_session_status_code":null,"expired_session_error":null,"issues":["missing_session_id","missing_protocol_header"]}},"utility_coverage_probe":{"status":"missing","latency_ms":112.79,"details":{"completions":{"advertised":false,"sample_target":{"type":"prompt","name":"find_swing_trade","argument_name":"min_conviction"},"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"missing","http_status":200},"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"advanced_capabilities_probe":{"status":"ok","latency_ms":null,"details":{"capabilities":{"prompts":true,"resources":true,"completions":false,"roots":false,"sampling":false,"elicitation":false,"structured_outputs":true,"resource_links":true},"enabled_count":4,"enabled":["prompts","resource_links","resources","structured_outputs"],"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"tool_snapshot_probe":{"status":"ok","latency_ms":null,"details":{"current_tool_count":26,"previous_tool_count":26,"similarity":1.0,"added":[],"removed":[],"changed_outputs":[]}},"connector_replay_probe":{"status":"ok","latency_ms":null,"details":{"backward_compatible":true,"would_break_after_refresh":false,"added_tools":[],"removed_tools":[],"required_arg_breaks":[],"output_breaks":[],"additive_output_changes":[]}},"request_association_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_request_association_capabilities_advertised"}},"interactive_flow_probe":{"status":"missing","latency_ms":null,"details":{"risk_hits":[],"safe_hits":[],"oauth_supported":false,"prompt_available":true}},"action_safety_probe":{"status":"ok","latency_ms":null,"details":{"summary":{"tool_count":26,"high_risk_tools":0,"destructive_tools":0,"exec_tools":0,"egress_tools":26,"secret_tools":0,"bulk_access_tools":0,"declared_non_read_only_tools":0,"annotation_conflict_tools":0,"risk_distribution":{"low":0,"medium":26,"high":0,"critical":0},"capability_distribution":{"read":26,"network":26,"financial":13},"has_mutating_capability":true,"has_non_read_capability":true},"auth_present":false,"safeguard_count":5,"confirmation_signals":[],"reason":null}},"official_registry_probe":{"status":"missing","latency_ms":null,"details":{"registry_source":"glama_registry","direct_match":false,"official_peer_count":0}},"provenance_divergence_probe":{"status":"not_assessed","latency_ms":null,"details":{"direct_official_match":false,"registry_title":null,"server_card_title":"Quantustik","registry_version":null,"server_card_version":"1.0.0","registry_homepage":null,"server_card_homepage":null,"registry_repository":null,"server_card_repository":null,"drift_fields":[],"metadata_document_count":2,"compared_fields":["title","version","homepage","repository"],"readable_sources":["server_card"],"comparable_field_count":0}},"schema_divergence_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_server_card_tools","compared_tool_count":0,"compared_dimensions":["server_name","server_version","declared_vs_observed_auth","tool_membership","parameter_names","required_parameters","parameter_types","output_schema_presence"],"server_name_mismatch":false,"card_server_name":"Quantustik","live_server_name":"Quantustik","server_version_mismatch":true,"card_server_version":"1.0.0","live_server_version":"2.0.4","auth_scheme_mismatch":false}},"connector_publishability_probe":{"status":"warning","latency_ms":null,"details":{"transport":"streamable-http","tool_count":26,"high_risk_tools":0,"blockers":["protocol_version","session_resume","step_up_auth","transport_compliance","request_association"],"criteria":{"remote_transport":true,"initialize":true,"tools_list":true,"protocol_version":false,"session_resume":false,"step_up_auth":false,"transport_compliance":false,"connector_replay":true,"request_association":false,"action_safety":true,"server_card":true,"tool_surface":true,"auth_flow":true}}}}},"active_alerts":[],"maintainer_analytics":{},"public_server_reputation":{},"maintainer_response_quality":{},"maintainer_annotations":[],"maintainer_rebuttals":[],"security_posture_summary":{},"tool_security_inventory":[],"transport_compliance":{},"utility_coverage":{},"write_action_governance":{},"provenance_divergence":{},"alias_consolidation":{},"alert_routing":{},"authenticated_validation":{},"hosted_runtime":{},"action_controls_diff":null,"benchmark_tasks":[],"latest_capability_counts":{},"point_loss_breakdown":[],"verdict_traces":{},"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_b3a2810b1ab82845","generated_at":"2026-09-25T01:20:48.664204+00:00","trust_evaluated_at":"2026-09-25T01:20:48.664204+00:00","evidence_revision":"b1cd6a6c7e996f5be0ccff12","source":"current_snapshot","server":"quantustik/mcp-server","last_validated_at":"2026-09-24T21:35:02.223994+00:00","validation_age_hours":3.76,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-09-24T21:35:02.223994+00:00","age_hours":3.76,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":62.5,"raw_score":62.5,"confidence_score":100.0,"confidence_weighted_score":62.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":62.5,"display_score":62.5,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"no blocking gaps found in current evidence","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":1},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":100.0,"label":"high","validation_age_hours":3.76,"live_check_count":18,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":18,"validation_age_hours":3.76,"freshness_threshold_hours":24}},"active_alerts":[],"active_alert_summary":{"critical":0,"high":0,"medium":0,"low":0,"high_or_critical":0,"total":0},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-09-25T01:20:48.664204+00:00"}},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_b3a2810b1ab82845","generated_at":"2026-09-25T01:20:48.664204+00:00","trust_evaluated_at":"2026-09-25T01:20:48.664204+00:00","evidence_revision":"b1cd6a6c7e996f5be0ccff12","source":"current_snapshot","server":"quantustik/mcp-server","last_validated_at":"2026-09-24T21:35:02.223994+00:00","validation_age_hours":3.76,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-09-24T21:35:02.223994+00:00","age_hours":3.76,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":62.5,"raw_score":62.5,"confidence_score":100.0,"confidence_weighted_score":62.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":62.5,"display_score":62.5,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"no blocking gaps found in current evidence","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":1},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":100.0,"label":"high","validation_age_hours":3.76,"live_check_count":18,"basis":{"evidence_bearing_validations":20,"affirmative_live_check_count":18,"validation_age_hours":3.76,"freshness_threshold_hours":24}},"active_alerts":[],"active_alert_summary":{"critical":0,"high":0,"medium":0,"low":0,"high_or_critical":0,"total":0},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-09-25T01:20:48.664204+00:00"}},"agent_commerce":{},"latest_claim":null,"maintainer_profile_slug":null,"watch_summary":{},"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"trust_evaluated_at":"2026-09-25T01:20:48.664204+00:00","evidence_revision":"b1cd6a6c7e996f5be0ccff12","active_alert_summary":{"critical":0,"high":0,"medium":0,"low":0,"high_or_critical":0,"total":0},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-09-25T01:20:48.664204+00:00"},"owner_opted_out":false,"observed_attention":{"schema":"verify.observed_attention.v1","window_days":30,"level":"none","label":"No observed attention","summary":"No recent machine-readable trust or discovery activity observed for this server.","segments":{"useful_ai_user":{"level":"none","observed":false,"description":"AI-assisted user sessions such as ChatGPT/User or Claude/User."},"machine_trust_evaluator":{"level":"none","observed":false,"description":"Synthetic sessions inspecting multiple trust surfaces such as report, policy, ledger, badge, trust-summary, or compare."},"possible_agent_or_script":{"level":"none","observed":false,"description":"Structured direct sessions with rapid profile, compare, report, policy, badge, or trust-surface fan-out."},"isolated_machine_surface":{"level":"none","observed":false,"description":"Aged-out direct synthetic singleton sessions that touched a machine-readable trust surface without becoming a broader evaluator."},"ai_crawler":{"level":"none","observed":false,"description":"Known AI crawler activity such as ClaudeBot, GPTBot, or similar crawlers."},"search_crawler":{"level":"none","observed":false,"description":"Search and SEO crawler activity."},"browser_like_automation":{"level":"none","observed":false,"description":"Browser-like synthetic sessions with rapid structured endpoint activity."},"confirmed_human":{"level":"none","observed":false,"description":"Confirmed browser-session human activity."}},"surfaces_observed":{"server_profile":false,"compare":false,"compare_json":false,"compare_api":false,"report_json":false,"policy":false,"ledger":false,"badge_metadata":false,"badge_svg":false,"trust_summary":false,"mcp_tool":false},"claim_prompt":{"recommended":false,"reason":"No claim prompt is recommended from observed attention in the current window."},"notes":["Observed attention is based on segmented first-party telemetry.","Crawler and evaluator activity is not treated as confirmed human demand.","Public levels are bucketed to avoid exposing raw traffic counts."]},"owner_activation":{"claim_recommended":false,"reason":"no_observed_attention"},"snapshot_id":"trustsnap_b3a2810b1ab82845"}],"rows":[{"label":"Snapshot ID","values":["trustsnap_b3a2810b1ab82845"]},{"label":"Status","values":["healthy"]},{"label":"Score","values":[62.5]},{"label":"Production readiness","values":["Safe for evaluation"]},{"label":"Production trust decision","values":["Allow with approval"]},{"label":"Recommended policy","values":["Block"]},{"label":"Observed Attention","values":["No observed attention"]},{"label":"Evidence confidence","values":[100.0]},{"label":"Freshness","values":["n/a"]},{"label":"Latency","values":["n/a"]},{"label":"Spec recency","values":[2.0]},{"label":"Session resume","values":[3.0]},{"label":"Step-up auth","values":[0.0]},{"label":"Transport compliance","values":[2.0]},{"label":"Utility coverage","values":[0.0]},{"label":"Publishability","values":[2.0]},{"label":"Connector replay","values":[4.0]},{"label":"Request association","values":[0.0]},{"label":"Action safety","values":[3.0]},{"label":"Registry presence","values":[2.0]},{"label":"Provenance divergence","values":[null]},{"label":"Client compatibility: ChatGPT","values":["unknown"]},{"label":"Client compatibility: Claude","values":["unknown"]},{"label":"Write-action publishing","values":["unknown"]},{"label":"Snapshot churn risk","values":["unknown"]},{"label":"Transport","values":["streamable-http"]},{"label":"Auth","values":["Unauthenticated / none"]},{"label":"Tools","values":[26]},{"label":"Prompts","values":[0]},{"label":"Resources","values":[0]},{"label":"OAuth","values":[false]},{"label":"DCR","values":[false]},{"label":"Taxonomy","values":[""]},{"label":"Recommended for","values":["none"]},{"label":"Top alerts","values":["none"]}],"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"cache_note":"Compact compare fallback response; deep compare evidence is deferred to protect web capacity.","trust_evaluated_at":"2026-09-25T01:20:48.664204+00:00","materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-09-25T01:20:48.735434+00:00"}}