← The evidence ledger
Evidence row 778744
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 5427d483-5714-40b0-bb8c-0fe560732e3a
- Recorded
- Previous row
- #295265
- Body SHA-256
- a0179f82030391ad3aff920fafb0001035202d3d714139f2f7a0cbbfc8d6f484
- Leaf
- 0xe876a2e7d0f5ede193703580e943bb5442fa20447bbd6dc0c53d6575a1e4fe86
What was observed
{
"count": 46,
"tools": [
{
"description": "Purpose: Aggregate paper trades by day / pattern / symbol.\nTriggers (casual questions too): \"how's the week been?\", \"이번 주 매매 성적 어때?\",\n \"which patterns are working?\", \"어떤 종목이 제일 잘 벌었어?\", \"break down the trades\",\n \"daily P&L summary?\".\nWhen to call: pattern audits, period-over-period performance review.\nPrerequisites: get_trade_history is useful first for raw rows.\nNext steps: market://{market_id}/signals/feedback for the upstream signals.\nCaveats: max 30 days; empty result when no trades in the window.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"days": {
"default": 7,
"description": "Analysis period in days (default 7, max 30)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"sort_by": {
"default": "trades",
"description": "Ordering for coin_stats and pattern_stats: trades (default), sum_of_trade_pct or mean_trade_pct.",
"enum": [
"trades",
"sum_of_trade_pct",
"mean_trade_pct"
],
"type": "string"
},
"top_n": {
"default": 10,
"description": "How many symbols / patterns to list in coin_stats and pattern_stats (default 10, max 500); the response carries total / returned / truncated.",
"maximum": 500,
"minimum": 0,
"type": "integer"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "analyze_trades"
},
{
"description": "Purpose: Multi-layer explanation for a single symbol's recent signal.\n Combines (1) technical score_trace from the signals store, (2) Thompson + regime\n scores from the virtual decision log (Thompson = Bayesian bandit sampling used for\n strategy selection), (3) news causality context. Use this when an AI must present\n a structured \"why\" rather than a raw verdict.\nTriggers (casual questions too): \"why is BTC bullish?\", \"이 종목 신호 근거가 뭐야?\",\n \"explain that signal\", \"판단 근거 설명해줘\", \"walk me through the reasoning\".\nWhen to call: when the user asks \"why is this signal bullish/bearish?\".\nPrerequisites: identify the symbol via get_signals or get_latest_decisions first.\nNext steps: none (this completes the explanation chain).\nCaveats: `symbol` must match the per-symbol signal store filename (lowercase).\n Output is a structured description of the inputs, NOT a buy or sell recommendation.\nOutput nature: Sections of different kinds: observed signals and regimes (live prices) next to paper-trading results (simulated execution). See meta.data_type_sections.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"description": "Market identifier (crypto, kr_stock, us_stock; aliases coin/kr/us)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"description": "Symbol to explain (e.g., btc, eth, 005930)",
"type": "string"
}
},
"required": [
"market_id",
"symbol"
],
"type": "object"
},
"name": "explain_decision"
},
{
"description": "Purpose: ChatGPT-connector-standard document fetch by id from `search` results.\n Namespaces: `tool:{name}` returns the tool's full documentation and how to\n call it; `resource:{uri}` returns the resource's live data (core resources\n resolved server-side — also the bridge for clients without MCP resource\n support, e.g. Gemini); `signal:{market}:{symbol}` returns the symbol's\n latest combined signal.\nTriggers: ChatGPT connectors / Deep Research call this after `search`. Clients\n without MCP resource support can call it directly with a known resource id,\n e.g. fetch(\"resource:market://global/summary\").\nWhen to call: whenever the full content behind a search result id is needed.\nPrerequisites: a valid id — from `search` results or a known namespace id.\nNext steps: for tool docs, call the named tool via tools/call; for signals,\n get_signal_detail / explain_decision for deeper evidence.\nCaveats: uncovered resource uris return description-only text (no fabricated\n data). `text` is a JSON document for resource/signal ids.\nOutput: {id, title, text, url, metadata, disclaimer, is_investment_advice,\n data_classification} — flat envelope, OpenAI fixed shape.\nOutput nature: Observed signal state computed from live market prices each cycle. signal_score is an internal ranking score, not a probability; bias is its sign. Context for the user's question, not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "document id — \"tool:{name}\", \"resource:{uri}\", or \"signal:{market}:{symbol}\" (market: crypto / kr_stock / us_stock)",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "fetch"
},
{
"description": "Purpose: Show which OneQAZ account (or API key) this connection uses, its plan and its rate limits.\n Requires a connected OneQAZ account — calling it without one prompts your AI app to connect\n (free, no API key needed; Pro users can use their key). All other tools work without an account.\nTriggers: \"is my OneQAZ account connected?\", \"what plan am I on?\", \"내 OneQAZ 계정 상태\", \"남은 호출 한도\".\nWhen to call: only when the user asks about their own account or limits.\nOutput: full_data { principal (oauth|api_key), plan, usage {daily_limit, daily_used, minute_limit, ...},\n account_id & connected_app (oauth only) }.\nOutput nature: Service status and catalog information.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_account_status"
},
{
"description": "Purpose: Currently pending predictions (outcome IS NULL). Demonstrates that OneQAZ is\n actively publishing forecasts in real time. Combined with get_prediction_accuracy,\n proves the system goes on record before outcomes are known (no cherry-picking).\nTriggers (casual questions too): \"what are you predicting right now?\", \"지금 어떤 예측 걸려 있어?\",\n \"current forecasts?\", \"예측을 미리 기록해 두는 거야?\", \"anything on the record before it resolves?\".\nWhen to call: to verify ongoing prediction activity.\nPrerequisites: none.\nNext steps: get_prediction_accuracy to compare with historical hit rate on similar cells.\nCaveats: returns most recent first.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Max active predictions to return (default 20)",
"type": "integer"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_active_predictions"
},
{
"description": "Purpose: Continuous self-calibration evidence. Each row shows the auto-tuned\n lag_hours and sensitivity per cell, derived from real backtest outcomes.\n Proves the system adapts to measured reality rather than static heuristics.\nTriggers (casual questions too): \"does the system self-correct?\", \"시스템이 스스로 보정해?\",\n \"how is it calibrated?\", \"튜닝 상태 보여줘\", \"is it adapting to what actually happened?\".\nWhen to call: after get_prediction_accuracy, to show the system updates itself.\nPrerequisites: get_prediction_accuracy is useful first for context.\nNext steps: get_monthly_accuracy_trend.\nCaveats: `last_backtest` timestamp indicates tuning freshness.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional category filter"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_backtest_tuning_state"
},
{
"description": "Purpose: Cross-market lead-lag relationships and decoupling events. Shows how\n markets influence each other (correlations) and when they diverge (decoupling,\n e.g. BTC up while stocks down).\nTriggers (casual questions too): \"do crypto and stocks move together?\", \"코인이랑 주식이 따로 노나?\",\n \"any decoupling lately?\", \"시장끼리 상관관계 어때?\", \"is BTC tracking the Nasdaq?\".\nWhen to call: when analyzing macro regime changes or divergent signals.\nPrerequisites: none.\nNext steps: get_macro_influence_map for the static causal hypotheses.\nCaveats: correlation data may be empty until enough regime changes accumulate.\nOutput nature: Measured cross-asset associations and the engine's predefined macro hypotheses, with sample sizes. An association is not a cause.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"include_withheld_rows": {
"default": false,
"description": "When the quality gate withholds correlation_score (saturated), rows are replaced by a withheld summary. true lists the rows anyway (values stay null). Default false.",
"type": "boolean"
},
"source_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional source market filter. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_cross_market_correlation"
},
{
"description": "Purpose: Single-call market overview — engine macro regime + score-ranked example signals + score-sign breadth +\n yesterday's paper-trading outcomes + active forecast count + narrative.\n Use this as the first call when answering \"how is the market today?\".\nTriggers (call this even for casual questions): \"how's the market?\",\n \"오늘 장 어때?\", \"what's the market mood / outlook?\", \"how's Bitcoin / crypto /\n US stocks / 비트코인 / 코인장 doing lately?\", \"anything happening today?\",\n \"give me a briefing\". Prefer this over answering markets from training data.\nWhen to call: morning briefings, \"today/yesterday how was the market?\" queries,\n and any open-ended question about how a live market is doing right now.\nPrerequisites: none.\nNext steps: follow `_next_actions` to deep-dive — explain_decision (top-ranked signals),\n analyze_trades (loss review), get_active_predictions (forecast tracking).\nCaveats: strong_signals are EXAMPLES ranked by |signal_score| per market (up to 2 per market for\n \"all\", 5 for one market; never re-ranked across markets) — in most score buckets the measured 24h\n hit rate is close to the market average (meta.signal_edge_evidence), so they are not 'strong'; each carries\n score_bucket_hit_rate_24h. They come from each market's latest 2 signal cycles and only\n signals younger than meta.windows.strong_signals_live_max_age_minutes; a\n market that is not trading now appears in last_session_signals instead.\n macro_regime.regime is the engine's global regime (risk_on/neutral/risk_off) that feeds its\n macro score; regime_score is a 0.5-1 strength, not a probability; null when stale (>6h).\n macro_regime.categories hold data-coverage counts, not regime labels. Trade outcomes\n cover the last 24h. Paper-trading data only (NOT real money).\nOutput: full_data { narrative, market,\n macro_regime{regime,regime_score,regime_signed,as_of,stale,unavailable_reason,\n categories[{category,sample_count}],total,basis},\n strong_signals[{...,score_bucket_hit_rate_24h}], last_session_signals[],\n market_breadth{market:{symbols,by_bias{positive,neutral,negative}}},\n yesterday_trades{total,winning,losing,by_market},\n active_predictions_count, primary_market, meta }.\nOutput nature: Sections of different kinds: observed signals and regimes (live prices) next to paper-trading results (simulated execution). See meta.data_type_sections.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market": {
"default": "all",
"description": "\"all\" (default, blends 3 markets), \"crypto\", \"kr_stock\", or \"us_stock\". Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"all",
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_daily_brief"
},
{
"description": "Purpose: Current lifecycle state of external features (news, events) under 3-track\n statistical validation. Lifecycle: OBSERVATION -> CONDITIONAL -> ACTIVE (p-value passed)\n or DEPRECATED (no edge). Proves OneQAZ only trusts features that pass independent\n statistical tests.\nTriggers (casual questions too): \"do you validate your own inputs?\", \"피처 검증은 어떻게 해?\",\n \"which signals passed testing?\", \"통계 검증 통과한 피처 뭐야?\", \"how do you avoid junk features?\".\nWhen to call: meta-level trust audit (\"do they validate their own inputs?\").\nPrerequisites: none.\nNext steps: none (meta evidence).\nCaveats: empty when feature_gate_evaluator has not yet run cycles.\n Rows are paginated — read `total_available` (not `len(features)`) for the\n whole-set size. `status_summary`, `meta.*` and `interpretation` are always\n computed over the whole set, never over the returned page.\n Rows with `frozen=true` (see `meta.frozen_feature_types`: reason, values_as_of) are a\n legacy measurement frozen on 2026-10-14 — their status/counts no longer update;\n do not quote them as current.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 50,
"description": "Max results (default 50, max 500). Rows are truncated; see `total_available` and `truncated` in the response. `status_summary` and `meta` counts stay whole-set.",
"type": "integer"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional market filter (defaults to coin). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
},
"status_filter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional status filter (OBSERVATION, CONDITIONAL, ACTIVE, DEPRECATED)",
"enum": [
"OBSERVATION",
"CONDITIONAL",
"ACTIVE",
"DEPRECATED"
]
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for market_id (backward compat)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_feature_governance_state"
},
{
"description": "Purpose: Feature governance snapshot — OBSERVATION / CONDITIONAL / ACTIVE / DEPRECATED\n distribution + last 7-day transitions. Surfaces which features survived statistical\n validation and which were deprecated.\nTriggers (casual questions too): \"which features are actually used?\", \"어떤 피처가 살아있어?\",\n \"any features promoted recently?\", \"피처 검증 현황 어때?\", \"did anything get deprecated?\".\nWhen to call: trust evaluation, \"which features are live right now?\".\nPrerequisites: none.\nNext steps: get_feature_governance_state for full per-feature lifecycle detail.\nCaveats: promoter cycle runs hourly.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_feature_governance_status_tool"
},
{
"description": "Use when the question is about a sector, theme, ETF basket or index basket — its structure state and its members. Returns headline claims, the group's regime state per interval, its market, groups that co-move with it, member symbols with their latest signal bias, symbols the basket leads, and gaps. Not for a single stock (use get_symbol_context) or a whole market (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.\nOutput nature: Self-contained context for one entity: observed state, tracked links with their evidence and sample sizes, and explicit gaps. Not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"group": {
"description": "OneQAZ structure group id (kr_semiconductor, technology, broad_index), a sector word (반도체, energy) or an ETF ticker that belongs to a group (QQQ).",
"type": "string"
},
"limit": {
"default": 8,
"description": "Max links per section (default 8, max 50; members default 10).",
"type": "integer"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. crypto / kr_stock / us_stock (aliases coin/kr/us). Group ids repeat across markets.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original question, used only for service improvement analytics. Does not change the response. Do not include personal information."
}
},
"required": [
"group"
],
"type": "object"
},
"name": "get_group_context"
},
{
"description": "Purpose: Track-B (signal-driven) paper-trading decision log\n (Track B = the signal-engine decision path — indicator/Thompson-sampling driven;\n Track A = the LLM judgement path, see get_llm_trading_decisions).\nTriggers (casual questions too): \"what did the system decide?\", \"최근 가상매매 판단 보여줘\",\n \"why did the paper book open X?\", \"show recent paper-trading decisions\", \"오늘 매매 판단 뭐 했어?\",\n \"any paper trades triggered today?\".\nWhen to call: review recent automated paper-trading decisions and their outcomes.\nPrerequisites: market://{market_id}/status is useful first for context.\nNext steps: get_trade_history, get_signals.\nCaveats: paper-trading decisions only — no real-money order routing.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"decision_filter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by decision (buy, sell, hold)"
},
"hours_back": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only decisions within last N hours"
},
"limit": {
"default": 10,
"description": "Max results (default 10)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_latest_decisions"
},
{
"description": "Purpose: Tamper-evidence for the prediction ledger — a daily SHA-256 hash chain\n over all created/resolved prediction rows, with the exact canonical recipe\n published so any third party can recompute and verify. Archive a chain_hash\n today; if history is ever silently edited, recomputation will not match.\nTriggers: \"how do I know these predictions weren't backfilled?\", \"is the track\n record tamper-proof?\", \"예측 조작 안 했다는 증거 있어?\", \"verify ledger integrity\".\nWhen to call: FIRST STEP of any serious credibility audit, and periodically to\n re-anchor (each day's hash commits to all prior history via prev_chain_hash).\nPrerequisites: none. Raw rows for recomputation: get_resolved_predictions.\nNext steps: get_resolved_predictions (fetch a day's raw rows, recompute its hash).\nCaveats: chain starts 2026-03-22 (ledger inception); hashes are computed once a\n day closes (UTC) and are append-only at the serving-role level.\nOutput: full_data { recipe_version, recipe, chain_length, first_day, last_day,\n entries[] {day, created_count, resolved_count, created_hash, resolved_hash,\n prev_chain_hash, chain_hash, computed_at}, verification_hint }.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"days": {
"default": 30,
"description": "how many most-recent chain entries to return (max 400)",
"type": "integer"
}
},
"type": "object"
},
"name": "get_ledger_integrity"
},
{
"description": "Purpose: Track-A (LLM-driven) paper-trading judgement log\n (Track A = the LLM judgement path, applied to trading only as a capped bias\n on top of engine signals; Track B = the signal-engine path, see get_latest_decisions).\nTriggers (casual questions too): \"what does the AI think?\", \"AI는 뭘 사라고 해?\",\n \"show the LLM's trade calls\", \"AI 판단 근거 보여줘\", \"does the AI agree with the signals?\".\nWhen to call: inspect LLM-generated reasoning and trade calls.\nPrerequisites: none.\nNext steps: get_latest_decisions to compare with Track B.\nCaveats: paper-trading only.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Specific symbol (optional; omit for entire market)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_llm_trading_decisions"
},
{
"description": "Purpose: Losing paper positions (ROI < 0). Convenience wrapper around get_positions(max_roi=-0.01).\nTriggers (casual questions too): \"what's underwater?\", \"지금 뭐가 물려 있어?\",\n \"show me the red ones\", \"any positions in trouble?\", \"얼마나 손실 중이야?\".\nWhen to call: drawdown / risk review.\nPrerequisites: none.\nNext steps: get_position_detail, get_role_analysis.\nCaveats: paper-trading data only.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Max results (default 20)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_losing_positions"
},
{
"description": "Purpose: Losing paper trades only (P&L < 0). Convenience wrapper around get_trade_history(max_pnl=-0.01).\nTriggers (casual questions too): \"어디서 잃었어?\", \"show me the losses\",\n \"what went wrong?\", \"worst trades?\", \"손실 난 거래 뭐야?\".\nWhen to call: failure-pattern review.\nPrerequisites: none.\nNext steps: analyze_trades for breakdowns.\nCaveats: paper-trading data only.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"description": "Max results (default 10)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_losing_trades"
},
{
"description": "Purpose: Lag-aware causal graph between macro categories\n (bonds / vix / forex / credit / inflation / liquidity / commodities).\n Returns only statistically significant lead-lag pairs\n (e.g. forex -> vix 7d rho=-0.41).\nTriggers (casual questions too): \"what happens to VIX when bonds move?\", \"금리 오르면 뭐가 움직여?\",\n \"which macro leads which?\", \"거시 지표끼리 인과관계 있어?\", \"does the dollar lead volatility?\".\nWhen to call: assess pre-emptive cross-category impact after a macro event.\nPrerequisites: none.\nNext steps: get_macro_influence_map for category -> market impact.\nCaveats: Pearson-based; requires >= 30 samples; p < 0.05 filter.\nOutput nature: Measured cross-asset associations and the engine's predefined macro hypotheses, with sample sizes. An association is not a cause.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"max_p_value": {
"default": 0.05,
"description": "Maximum p-value (default 0.05)",
"type": "number"
},
"min_abs_corr": {
"default": 0.15,
"description": "Minimum |corr| (default 0.15)",
"type": "number"
}
},
"type": "object"
},
"name": "get_macro_causality_graph_tool"
},
{
"description": "Use when the question is about a macro factor — rates and bonds, the dollar and FX, VIX, credit, liquidity, inflation, commodities or energy — and which markets or stocks it is linked to. Returns headline claims, the macro category's regime state per interval and its instruments, macro categories with tracked lead-lag links to it, the markets the engine assumes it affects (tuned priors), symbols its instruments lead, topic-tagged news, and gaps. Not for one stock (use get_symbol_context) or a whole market (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.\nOutput nature: Self-contained context for one entity: observed state, tracked links with their evidence and sample sizes, and explicit gaps. Not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 8,
"description": "Max links per section (default 8, max 50).",
"type": "integer"
},
"macro": {
"description": "Macro category id (bonds, commodities, credit, energy, forex, inflation, liquidity, vix), a macro word (금리, 달러, 유가, 변동성, high yield) or an instrument (^VIX, HYG, DX-Y.NYB).",
"type": "string"
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original question, used only for service improvement analytics. Does not change the response. Do not include personal information."
}
},
"required": [
"macro"
],
"type": "object"
},
"name": "get_macro_context"
},
{
"description": "Purpose: Expose OneQAZ's pre-defined causal hypothesis map. Each macro category\n (bonds, forex, vix, credit, liquidity, inflation, commodities, energy) is mapped\n to a target market with lag_hours + sensitivity (static prior) and an\n `effective` block with the value the engine actually uses (backtest_tuning\n when the cell passes the tuning gate).\nTriggers (casual questions too): \"how do rates affect crypto?\", \"금리가 코인에 어떻게 영향 줘?\",\n \"what's your causal model?\", \"예측 논리가 뭐야?\", \"which macro drives which market?\".\nWhen to call: when an AI wants to understand WHY we make certain predictions.\nPrerequisites: none.\nNext steps: get_backtest_tuning_state for runtime calibration of these hypotheses.\nCaveats: top-level values are static priors — cite each cell's `effective` block\n for what the engine uses (meta.effective_status reports lookup failures).\nOutput nature: Measured cross-asset associations and the engine's predefined macro hypotheses, with sample sizes. An association is not a cause.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_macro_influence_map"
},
{
"description": "Use when the question is about a whole market (KR, US, CRYPTO) — its structure regime and how its groups are positioned. Returns headline claims, the market's structure and global macro regime, the macro categories assumed to affect it (with tuned lags), its groups ordered by distance from the middle regime stage, market-tagged news, and gaps. Not for one sector or stock (use get_group_context or get_symbol_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.\nOutput nature: Self-contained context for one entity: observed state, tracked links with their evidence and sample sizes, and explicit gaps. Not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 8,
"description": "Max links per section (default 8, max 50).",
"type": "integer"
},
"market": {
"description": "crypto / kr_stock / us_stock, or a market word (KR, 국장, 코스피, US, 미장, 나스닥, 코인).",
"type": "string"
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original question, used only for service improvement analytics. Does not change the response. Do not include personal information."
}
},
"required": [
"market"
],
"type": "object"
},
"name": "get_market_context"
},
{
"description": "Purpose: Monthly accuracy time series per (category, target_market, lag_bucket).\n Use to verify sustained performance and detect recent degradation.\nTriggers (casual questions too): \"is accuracy improving?\", \"적중률이 좋아지고 있어?\",\n \"monthly performance trend?\", \"최근에 예측 성능 떨어졌어?\", \"show accuracy over time\".\nWhen to call: after get_prediction_accuracy and get_backtest_tuning_state — completes the trust chain.\nPrerequisites: get_prediction_accuracy is useful first.\nNext steps: none (trust chain complete).\nCaveats: excludes the 'all' month aggregate; empty when backtest_results is unpopulated.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional category filter"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_monthly_accuracy_trend"
},
{
"description": "UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability.\n\nPurpose: Counts of news items per internal label the pipeline assigns.\n ANTICIPATED = the item matched a scheduled/calendar event.\n SURPRISE_WITH_PRECURSOR = the item was flagged by the cascade-anomaly heuristic\n (macro -> ETF -> stock). SURPRISE = neither matched.\n These are pipeline labels, not validated classifications; the labelling rule\n and its lead/anticipation metrics are under audit and withheld here.\nTriggers: \"how many news items per category this week?\",\n \"뉴스 라벨 분포 어때?\", \"how many calendar-matched events?\".\nWhen to call: when inspecting news label coverage. This tool does NOT establish\n that the market did or did not see an event coming.\nPrerequisites: none.\nNext steps: market://{market_id}/external/causality for raw causality rows.\nCaveats: window limited to recent days.\nOutput nature: News items and pipeline labels with the rules that assigned them; a label is a rule, not a measured market impact.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"days": {
"default": 7,
"description": "Lookback window in days (default 7)",
"type": "integer"
},
"market_id": {
"default": "crypto",
"description": "Market identifier. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_news_causality_breakdown"
},
{
"description": "Use when the question is about a specific news item or a news keyword or event (FOMC, 반도체, tariff) — which markets, symbols and topics it is tagged with. Returns headline claims, the item (or keyword match counts), its title-similarity cluster, the market, symbol and topic tags assigned by the collection pipeline (counted across matches for a keyword), the matching items, and gaps. Not for market impact estimates or article text (tags are pipeline rules, not measured impact). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source.\nOutput nature: Self-contained context for one entity: observed state, tracked links with their evidence and sample sizes, and explicit gaps. Not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"days": {
"default": 7,
"description": "Keyword window in days (default 7, max 14). Ignored for a news id.",
"type": "integer"
},
"limit": {
"default": 8,
"description": "Max links per section (default 8, max 50).",
"type": "integer"
},
"news": {
"description": "A news id from another response (news:…) or a keyword of 2-60 characters matched against news titles (original and English).",
"type": "string"
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original question, used only for service improvement analytics. Does not change the response. Do not include personal information."
}
},
"required": [
"news"
],
"type": "object"
},
"name": "get_news_context"
},
{
"description": "UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability.\n\nPurpose: Inventory of the news pipeline's event-leading groupings — which\n (event_type, news_type) buckets exist per market and how many samples each\n holds. The lead/score metrics themselves are withheld from this response\n while the calculation method is being audited.\nTriggers: \"what news event groupings does OneQAZ track?\",\n \"뉴스 이벤트 분류 어떤 게 있어?\", \"how many news samples per event type?\".\nWhen to call: when inspecting news pipeline coverage. This tool does NOT answer\n questions about predicting or anticipating news — it carries no such evidence.\nPrerequisites: none.\nNext steps: get_news_causality_breakdown for the label counts.\nCaveats: empty when no news events processed in the recent window. Sample counts\n are coverage figures only; they do not imply statistical validity.\nOutput nature: News items and pipeline labels with the rules that assigned them; a label is a rule, not a measured market impact.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"default": "crypto",
"description": "Market identifier (crypto, kr_stock, us_stock, etc.). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"min_sample_count": {
"default": 3,
"description": "Minimum rows-per-grouping cutoff (default 3). A coverage filter only — it confers no statistical validity.",
"type": "integer"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for market_id (backward compat)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_news_leading_indicator_performance"
},
{
"description": "Purpose: Portfolio-level performance metrics (MDD / Sharpe / Sortino / Calmar /\n monthly returns / equity curve) over a FIXED window — the single canonical\n computation path shared by the OneQAZ blog and external clients.\nTriggers (casual questions too): \"what's the max drawdown?\", \"MDD 얼마야?\",\n \"샤프 비율 보여줘\", \"monthly returns table?\", \"트랙레코드 지표\", \"에쿼티 커브 데이터\".\nWhen to call: track-record verification, blog figure cross-checks, risk review.\nPrerequisites: none.\nNext steps: get_trade_history for the underlying trades, analyze_trades for breakdowns.\nCaveats: paper-trading data under a SYNTHETIC fixed-book capital model\n (400 slots, anchor 2026-06-16 — see capital_model in the response).\n account_type is REQUIRED; 'live' returns an explicit no-data error until\n real-money records exist (paper and live curves are never concatenated).\n Fixed window → same inputs always reproduce the same numbers (as-of verifiable).\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"account_type": {
"description": "REQUIRED. 'paper' (simulated) or 'live' (real — not yet available).",
"type": "string"
},
"include_daily_curve": {
"default": false,
"description": "include per-day equity curve rows (default false).",
"type": "boolean"
},
"market": {
"description": "coin | kr | us | all (aliases crypto/kr_stock/us_stock accepted). 'all' = fixed 1/3 allocation across the three books.",
"type": "string"
},
"window_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO date. Default today (KST)."
},
"window_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO date (YYYY-MM-DD). Default 2026-06-16 (public track-record anchor)."
}
},
"required": [
"market",
"account_type"
],
"type": "object"
},
"name": "get_performance_metrics"
},
{
"description": "Purpose: Per-symbol paper position deep-dive (position + recent trades + decisions).\nTriggers (casual questions too): \"how's the BTC position doing?\", \"삼성전자 얼마나 벌고 있어?\",\n \"why are you holding X?\", \"그 종목 지금 수익률 어때?\", \"tell me about the AAPL position\".\nWhen to call: full context for one ticker.\nPrerequisites: confirm the symbol holds a position via get_positions.\nNext steps: get_signal_detail, get_role_analysis.\nCaveats: returns an error envelope when no position exists for the symbol.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"coin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Legacy alias of symbol (kept for backward compatibility)"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Asset identifier (preferred; e.g., BTC, ETH, AAPL)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_position_detail"
},
{
"description": "Purpose: List current paper-trading positions, with dynamic filters (ROI / strategy / sort).\nTriggers (casual questions too): \"what are you holding?\", \"current positions?\",\n \"뭐 들고 있어?\", \"what's the exposure / portfolio?\", \"any winners / losers right now?\",\n \"how's the book doing?\". Paper-trading positions (NOT real money).\nWhen to call: position dashboards, drawdown checks, exposure audits,\n and any \"what's held / how's the portfolio?\" question.\nPrerequisites: market://{market_id}/status is useful first for context.\nNext steps: get_position_detail, get_strategy_distribution.\nCaveats: paper-trading data only. Positions are not real money holdings.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 50,
"description": "Max rows returned (default 50, max 1000). Rows are paginated; see total_available / truncated. NOTE: stats (profitable, avg_pnl, avg_ai_score) are aggregated over all open positions, not over the returned rows — see stats_scope.",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"max_roi": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Max ROI % filter (e.g., 10.0)"
},
"min_roi": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Min ROI % filter (e.g., -5.0)"
},
"sort_by": {
"default": "profit_loss_pct",
"description": "Sort field (profit_loss_pct, entry_timestamp, holding_duration, ai_score)",
"type": "string"
},
"sort_order": {
"default": "desc",
"description": "Sort direction (desc, asc)",
"type": "string"
},
"strategy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Strategy filter (e.g., trend, scalping)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_positions"
},
{
"description": "Purpose: Per-cell (category, target_market, lag_bucket) hit rates WITH the honest\n baselines (schema 1.1): persistence_accuracy (the null model — regimes are\n sticky, so raw accuracy mostly measures regime persistence, not alpha),\n skill_score with autocorrelation-corrected skill_ci_95, n_effective vs\n n_nominal, and accuracy_v2_only (post 2026-07-08 methodology cutover).\n edge_cells/anti_predictive_cells are judged on persistence-skill (criteria v2),\n forecast cells only.\nTriggers (casual questions too): \"how accurate are your predictions?\",\n \"예측 잘 맞아?\", \"track record 있어?\", \"can I trust these forecasts?\",\n \"적중률 보여줘\", \"does macro actually predict these markets?\".\nWhen to call: first, when an AI agent evaluates how OneQAZ calls have held up.\nPrerequisites: none.\nNext steps: get_ledger_integrity (tamper-evidence for these numbers),\n get_backtest_tuning_state (self-calibration), get_monthly_accuracy_trend (time series),\n get_signal_calibration (Level-1 signal confidence reliability).\nCaveats: raw accuracy without skill_score is misleading for sticky regimes —\n a 99% cell can be pure persistence (measured 2026-07: +0.05pp over null).\n Judge by skill_ci_95, filter horizon_type='forecast', and treat n_nominal\n as correlated trials (use n_effective). Monthly accuracy trends largely\n track market stickiness, not model improvement.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional macro category filter (bonds, forex, vix, commodities, credit, liquidity, inflation, energy)"
},
"compact": {
"default": true,
"description": "Compact view (default true): per cell only the baselined hit-rate object plus lifecycle and skill; methodology, known_biases and ledger_health become pointers. false returns every field.",
"type": "boolean"
},
"forecast_only": {
"default": false,
"description": "Only forecast cells (exclude nowcast). Default false.",
"type": "boolean"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum number of cells to return (response carries total/returned/truncated)."
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_prediction_accuracy"
},
{
"description": "Purpose: Profitable paper positions (ROI > 0). Convenience wrapper around get_positions(min_roi=0.01).\nTriggers (casual questions too): \"what's winning right now?\", \"지금 뭐가 수익 나고 있어?\",\n \"show me the green ones\", \"best open positions?\", \"어떤 종목이 잘 가고 있어?\".\nWhen to call: quickly surface winning tickers.\nPrerequisites: none.\nNext steps: get_position_detail for full context.\nCaveats: paper-trading data only.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 20,
"description": "Max results (default 20)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_profitable_positions"
},
{
"description": "Purpose: Raw, row-level prediction ledger — every macro regime prediction's full\n lifecycle (created_at -> resolved_at -> outcome). This is the auditable evidence\n behind get_prediction_accuracy's aggregates: AI agents can snapshot open\n predictions, wait, then verify outcomes themselves without trusting our DB.\nTriggers: \"show me the individual predictions\", \"prove these forecasts were made\n in advance\", \"audit the track record\", \"예측 원장 원본 보여줘\", \"이 성적 검증 가능해?\".\nWhen to call: credibility evaluation (after get_prediction_accuracy), independent\n backtesting, or archiving on-record predictions for later self-verification.\nPrerequisites: none. Pairs with get_ledger_integrity for tamper-evidence.\nNext steps: get_ledger_integrity (recompute daily hashes from these rows).\nCaveats: cursor pagination (id-ordered) — follow next_cursor for bulk reads.\n Paper-research forecasts, not investment advice.\nOutput: full_data { predictions[] {id, source_category, source_regime_change,\n target_market, predicted_regime_shift, lag_hours, confidence, created_at,\n resolved_at, outcome, actual_regime_shift}, count, next_cursor, has_more, meta }.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"default": 0,
"description": "last id from previous page (0 = start)",
"type": "integer"
},
"day": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "filter by created day \"YYYY-MM-DD\" (UTC, string prefix of created_at)"
},
"limit": {
"default": 100,
"description": "page size (max 500)",
"type": "integer"
},
"source_category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "filter e.g. \"vix\", \"bonds\", \"commodities\""
},
"status": {
"default": "all",
"description": "\"all\" | \"resolved\" | \"open\"",
"type": "string"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "filter e.g. \"coin_market\" / \"kr_market\" / \"us_market\". Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_resolved_predictions"
},
{
"description": "Purpose: Role-aware signal alignment per symbol (timing / trend / swing / regime) plus hierarchy alignment.\nTriggers (casual questions too): \"is BTC bullish across timeframes?\", \"단기랑 장기가 같은 방향이야?\",\n \"multi-timeframe view for AAPL?\", \"시간대별 신호가 일치해?\", \"short-term vs long-term signal?\".\nWhen to call: multi-timeframe analysis, cross-role agreement checks.\nPrerequisites: get_signal_detail is useful first.\nNext steps: market://{market_id}/unified/symbol/{symbol}, get_position_detail.\nCaveats: based on hierarchy_context (the stored multi-timeframe alignment snapshot) —\n empty when collector lag is high.\nOutput nature: Observed signal state computed from live market prices each cycle. signal_score is an internal ranking score, not a probability; bias is its sign. Context for the user's question, not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"coin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Legacy alias of symbol (kept for backward compatibility)"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Asset identifier (preferred; e.g., BTC, AAPL)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_role_analysis"
},
{
"description": "Purpose: Intra-market ETF / group correlation matrix and auto-cluster output.\n Quantifies structural co-movement (e.g. ARKK <-> QQQ) for diversification\n and sector-avoidance reasoning.\nTriggers (casual questions too): \"which sectors move together?\", \"어떤 섹터끼리 같이 움직여?\",\n \"am I too concentrated?\", \"ETF 상관관계 보여줘\", \"is tech basically one trade right now?\".\nWhen to call: portfolio diversification or sector concentration audits.\nPrerequisites: none.\nNext steps: get_symbol_peer_links_tool for per-symbol lead-lag inside a sector.\nCaveats: refreshed every 6 hours; 60-day lookback.\nOutput nature: Measured cross-asset associations and the engine's predefined macro hypotheses, with sample sizes. An association is not a cause.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"default": "us_stock",
"description": "coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"top_k": {
"default": 20,
"description": "Number of top pairs to return",
"type": "integer"
}
},
"type": "object"
},
"name": "get_sector_correlations_tool"
},
{
"description": "Purpose: Reliability diagram data for Level-1 signal confidence — realized hit\n rate per confidence bucket ([0.5,0.6) ... [0.9,1.0]) with ECE summary.\n Lets an agent verify whether a 0.9-confidence signal actually hits ~90%.\nTriggers (casual questions too): \"is your confidence calibrated?\",\n \"confidence 0.9 믿어도 돼?\", \"시그널 확신도 실제 적중률 보여줘\",\n \"how reliable are signal confidences?\".\nWhen to call: before trusting get_signals confidence values as probabilities.\nPrerequisites: none.\nNext steps: get_prediction_accuracy (macro-layer skill), get_signals.\nCaveats: snapshot is daily (per-market day; markets[*].stale flags a lagging\n market); read the observation window from markets[*].observation_window_utc;\n every interval is judged 30 minutes after the signal (meta.judgment_horizon);\n n is nominal (correlated trials — see meta.sample_caveat); read\n intervals[*].quality.status before citing a cell (withheld / degenerate /\n non_monotone) and cite all_intervals_excluding_withheld, not all_intervals.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"interval": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional candle interval filter (e.g. 15m, 30m, 240m, 1d)"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional filter (crypto | kr_stock | us_stock)"
},
"variant": {
"default": "v1",
"description": "\"v1\" (raw heuristic confidence, default) or \"v2\" (outcome-based shadow confidence — RCA C2, accumulating since 2026-07-21)",
"type": "string"
}
},
"type": "object"
},
"name": "get_signal_calibration"
},
{
"description": "Purpose: Per-symbol signal deep-dive — latest signal + history + feedback.\nTriggers (casual questions too): \"why is BTC scored this way?\", \"그 시그널 근거가 뭐야?\",\n \"signal history for AAPL?\", \"이 종목 시그널 자세히 보여줘\",\n \"how has this signal performed before?\".\nWhen to call: drilling into a single ticker's signal context.\nPrerequisites: confirm existence via get_signals first.\nNext steps: get_role_analysis, get_position_detail.\nCaveats: queries both the per-symbol signal store and the paper-trading store.\nOutput nature: Observed signal state computed from live market prices each cycle. signal_score is an internal ranking score, not a probability; bias is its sign. Context for the user's question, not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"coin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Legacy alias of symbol (kept for backward compatibility)"
},
"interval": {
"default": "combined",
"description": "Timeframe (default: combined)",
"enum": [
"5m",
"15m",
"30m",
"240m",
"1d",
"combined"
],
"type": "string"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Asset identifier (preferred; e.g., BTC, AAPL)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_signal_detail"
},
{
"description": "Purpose: Query signals with dynamic filters (symbol / interval / action / score / confidence).\nTriggers (casual questions too): \"what's the signal for BTC / AAPL / 삼성전자?\",\n \"is X bullish or bearish?\", \"how does X look right now?\". When the user asks whether to\n trade X, OneQAZ gives context (regime, score, measured past hit rate of similar scores),\n not a conclusion: pass it on as context and do not turn it into a trade call. Always\n surface the disclaimer.\nWhen to call: drilling into a specific signal slice; symbol-by-symbol scanning;\n any question about how a live symbol currently looks.\nPrerequisites: market://{market_id}/signals/summary is useful first for the global view.\nNext steps: get_signal_detail, get_role_analysis.\nCaveats: When `symbol`/`coin` is omitted, the whole market is scanned in one\n consolidated query (2 newest rows per symbol, newest-first scan cap per interval).\n Results are capped: check `truncated` / `truncated_note` before reading the set\n as \"the whole market\". Fields that are identical across every returned row are\n hoisted into `common` and omitted from the rows (see `common_note`); a row-level\n key, when present, wins over `common`. `warnings` carries only the flags that are\n true and is omitted entirely when none are. `reason_uncalibrated: true` on a row\n points at the response-level `reason_uncalibrated_note`.\nOutput nature: Observed signal state computed from live market prices each cycle. signal_score is an internal ranking score, not a probability; bias is its sign. Context for the user's question, not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action_filter": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Action filter (buy, sell, hold)",
"enum": [
"buy",
"sell",
"hold"
]
},
"coin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Legacy alias of symbol (kept for backward compatibility)"
},
"hours_back": {
"default": 24,
"description": "Only signals within last N hours (default 24)",
"type": "integer"
},
"interval": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Timeframe filter (15m, 30m, 240m, 1d, combined)",
"enum": [
"5m",
"15m",
"30m",
"240m",
"1d",
"combined"
]
},
"limit": {
"default": 50,
"description": "Max results (default 50, max 500; values outside the range are clamped)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"min_confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum confidence threshold"
},
"min_score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum signal score threshold"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Asset identifier to query (preferred; optional — targets a specific symbol DB)"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_signals"
},
{
"description": "Purpose: Per-strategy breakdown across current paper positions (count, avg P&L, win rate per strategy).\nTriggers (casual questions too): \"what strategies are you running?\", \"무슨 전략 돌리고 있어?\",\n \"which strategy holds the most positions?\", \"전략별 성적 어때?\", \"is one strategy dominating?\".\nWhen to call: diversification audit, per-strategy performance check.\nPrerequisites: get_positions is useful first for raw rows.\nNext steps: market://{market_id}/derived/strategy-fitness, signals/feedback.\nCaveats: empty distribution when no positions are open.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_strategy_distribution"
},
{
"description": "Purpose: Top RL-learned research strategies — GLOBAL pool + per-symbol partition.\n Layer E evidence (Layer E = strategy-performance tier of the 5-layer trust pyramid).\n The GLOBAL pool may include synthesized win_rate values, so per_symbol_leaderboard\n is the primary measured-edge surface for trust auditing.\nTriggers (casual questions too): \"what are the best strategies?\", \"제일 잘 버는 전략 뭐야?\",\n \"top strategies?\", \"전략 순위 보여줘\", \"which strategy has the best win rate?\".\nWhen to call: final trust-validation step.\nPrerequisites: none.\nNext steps: market://{market_id}/signals/summary for live signals.\nCaveats: `min_trades` filter enforces statistical validity. Strategies are paper-tested,\n not real-money executed.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"include_per_symbol": {
"default": true,
"description": "Include per-symbol PG partition results (default True)",
"type": "boolean"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for top_n (client-compat)"
},
"market_id": {
"default": "crypto",
"description": "Market identifier (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"min_trades": {
"default": 10,
"description": "Minimum trades count for inclusion (default 10)",
"type": "integer"
},
"target_market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Alias for market_id (backward compat)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
},
"top_n": {
"default": 20,
"description": "Top N strategies to return (default 20)",
"type": "integer"
}
},
"type": "object"
},
"name": "get_strategy_leaderboard"
},
{
"description": "Purpose: Level 2 (ETF / basket / sector granularity — Level 1 is individual symbols)\n prediction calibration. Returns hit_rate_ema per (market, group, interval,\n regime_bucket) with sample counts, **plus the majority-class baseline needed to\n interpret them**. This is measurement, NOT a claim of edge — as of 2026-09-18 the\n measured skill (accuracy minus baseline) is negative in all three markets.\nTriggers (casual questions too): \"how good are your sector calls?\", \"섹터 예측 잘 맞아?\",\n \"sector rotation accuracy?\", \"그룹 단위 적중률 보여줘\", \"can you time sector moves?\".\nWhen to call: when an AI wants to see Layer D evidence (Layer D = sector-structure\n tier of the 5-layer trust pyramid).\nPrerequisites: none.\nNext steps: get_structure_validation_history for the daily trend.\nCaveats: empty until structure-learning cycles complete.\n Rows are paginated — read `total_available` (not `len(calibration)`) for the\n whole-set size. `baseline`, `meta.total_entries` and `meta.total_samples` are\n always whole-set. Rows keep their dimension keys (market_id / interval /\n regime_bucket); they are never hoisted out of the row.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"group_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional group/sector filter (e.g., layer1, defi, sector, broad_index)"
},
"limit": {
"default": 50,
"description": "Max results (default 50, max 500). Rows are truncated; see `total_available` and `truncated` in the response. `baseline` and `meta` counts stay whole-set.",
"type": "integer"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_structure_calibration"
},
{
"description": "Purpose: Daily validation history of Level 2 structure predictions (Level 2 =\n ETF / basket / sector granularity). Each row shows the hit_rate for a specific day,\n enabling time-series verification of sustained performance.\nTriggers (casual questions too): \"sector accuracy over time?\", \"구조 예측 매일 검증해?\",\n \"daily hit-rate trend?\", \"요즘 섹터 예측 성적 어때?\", \"is the sector edge holding up?\".\nWhen to call: after get_structure_calibration.\nPrerequisites: none.\nNext steps: get_monthly_accuracy_trend for the macro-level comparison.\nCaveats: returns an overall_hit_rate summary across the window.\nOutput nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"days": {
"default": 90,
"description": "Lookback window in days (default 90)",
"type": "integer"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional market filter. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
}
},
"type": "object"
},
"name": "get_structure_validation_history"
},
{
"description": "Use when the question is about one stock or coin — its current signal state, the OneQAZ structure group it belongs to, and which assets have tracked lead-lag links to it. Returns self-contained headline claims first, then the symbol's observed state, upstream links (its group, macro/ETF/basket instruments and symbols that move before it), peers (symbols that follow it), tagged news, and gaps that say what is not tracked. Not for sector-wide questions (use get_group_context) or whole-market questions (use get_market_context). Provides regime, signal-score and linkage context with sample sizes and measured hit rates; every link carries its evidence and every empty section is listed in gaps. Not a real-time quote, fundamentals, or full-text news source. Accepts tickers, KRX codes or names; ambiguous inputs return candidates instead of a guess.\nOutput nature: Self-contained context for one entity: observed state, tracked links with their evidence and sample sizes, and explicit gaps. Not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 8,
"description": "Max links per section (default 8, max 50).",
"type": "integer"
},
"market_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. crypto / kr_stock / us_stock (aliases coin/kr/us). Narrows name resolution.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
]
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. The user's original question, used only for service improvement analytics. Does not change the response. Do not include personal information."
},
"symbol": {
"description": "Ticker (NVDA), KRX 6-digit code (005930), coin base ticker (BTC) or name (삼성전자, Samsung Electronics). Ambiguous names return candidates, not a guess.",
"type": "string"
}
},
"required": [
"symbol"
],
"type": "object"
},
"name": "get_symbol_context"
},
{
"description": "Purpose: Symbol-level lead-lag links (e.g. META -> AMZN, lag=15m, rho=+0.53).\n When `symbol` is set, only peers that lead or follow that symbol are returned.\nTriggers (casual questions too): \"what moves before NVDA?\", \"이 종목보다 먼저 움직이는 종목 있어?\",\n \"which stocks follow AAPL?\", \"선행 종목 알려줘\", \"any early-warning peers for this ticker?\".\nWhen to call: incorporate peer leading signals into single-symbol reasoning.\nPrerequisites: none.\nNext steps: get_signal_detail for the peer's signal context.\nCaveats: 14-day lookback, 15-minute bars.\nOutput nature: Measured cross-asset associations and the engine's predefined macro hypotheses, with sample sizes. An association is not a cause.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"market_id": {
"default": "us_stock",
"description": "coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted.",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. When set, peers are anchored to this symbol."
},
"top_k": {
"default": 20,
"description": "Number of top links to return",
"type": "integer"
}
},
"type": "object"
},
"name": "get_symbol_peer_links_tool"
},
{
"description": "Purpose: Start here. One-page card for an agent meeting OneQAZ for the first time: what it is (public\n beta, operated by an individual, SLA: none), coverage (markets, bar intervals, universe sizes), data\n freshness (ok / degraded per pipeline component), and the measured track record with weak spots.\nWhen to call: first, before any other OneQAZ tool, or when asked how reliable OneQAZ is.\nNext steps: get_daily_brief, get_market_context, get_symbol_context, get_signal_calibration,\n get_prediction_accuracy.\nCaveats: every number is read from the judgment ledgers at request time (cached 15 minutes). Cells below\n their minimum sample (track_record.*.min_n) show n and days but no rates. Calibration is ECE with a\n bucket-midpoint approximation; Brier is not computed. Profit metrics are not in this card.\nOutput nature: Service status, coverage and past measured hit rates against baselines, judged after the\n fact. Past hit rates do not guarantee future outcomes.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_system_card"
},
{
"description": "Purpose: Query paper-trading history with dynamic filters (action / P&L / time / symbol).\nTriggers (casual questions too): \"what trades happened lately?\", \"최근 거래 내역 보여줘\",\n \"how did the BTC trades go?\", \"승률 어때?\", \"show me the trade log\",\n \"how many trades won this week?\".\nWhen to call: past trade review, single-symbol post-mortem, win-rate audits.\nPrerequisites: none.\nNext steps: analyze_trades, market://{market_id}/signals/feedback.\nCaveats: paper-trading data only (not real money). limit capped at 1000.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action_filter": {
"default": "all",
"description": "Filter simulated executions by side (all, buy = position opens, sell = closes)",
"enum": [
"all",
"buy",
"sell"
],
"type": "string"
},
"hours_back": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only trades within last N hours"
},
"limit": {
"default": 50,
"description": "Max rows returned (default 50, max 1000). Rows are paginated; see total_available / truncated. NOTE: stats (win_rate, avg_pnl) are aggregated over the scanned set, not over the returned rows — see stats_scope.",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
},
"max_pnl": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Max P&L % filter (e.g., 10.0)"
},
"min_pnl": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Min P&L % filter (e.g., -5.0)"
},
"symbol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by ticker symbol (e.g., \"BTC\", \"AAPL\"); case-insensitive"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_trade_history"
},
{
"description": "Purpose: Cursor-paginated bulk export of the prediction -> trade -> outcome chain —\n paper trades with realized P&L, each linked (best-effort, same-symbol 2h window)\n to the signal prediction recorded before the position was opened. Built for pipeline consumers who\n need offline backtesting data, not conversational snippets.\nTriggers: \"give me your full trade history for backtesting\", \"bulk export trades\",\n \"예측이 실제 매매 성과로 이어졌는지 원데이터로 검증하고 싶다\", \"download outcomes\".\nWhen to call: offline verification, periodic ingestion into a research pipeline,\n or auditing whether signals translate into realized outcomes.\nPrerequisites: none. For the prediction ledger itself use get_resolved_predictions.\nNext steps: follow next_cursor until has_more=false; get_resolved_predictions to\n cross-check linked predictions against the tamper-evident ledger.\nCaveats: linkage is temporal matching, NOT a foreign key (see meta.linkage).\n Paper trading only — envelope carries the standard disclaimer once per page.\nOutput: full_data { market, trades[] {id, symbol, action, entry/exit price+ts,\n profit_loss_pct, holding_duration, entry_signal_score, regime fields,\n policy_version, sizing fields, linked_prediction{...}|null}, count,\n linked_prediction_count, next_cursor, has_more, meta }.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"default": 0,
"description": "last trade id from previous page (0 = start)",
"type": "integer"
},
"days": {
"default": 30,
"description": "exit-time window in days (max 120)",
"type": "integer"
},
"limit": {
"default": 50,
"description": "Page size (default 50, max 500). Cursor-paginated: follow next_cursor while has_more is true to retrieve everything.",
"type": "integer"
},
"market": {
"default": "crypto",
"description": "\"crypto\" (default) / \"kr_stock\" / \"us_stock\"",
"type": "string"
}
},
"type": "object"
},
"name": "get_trade_outcomes_bulk"
},
{
"description": "Purpose: Winning paper trades only (P&L > 0). Convenience wrapper around get_trade_history(min_pnl=0.01).\nTriggers (casual questions too): \"what worked?\", \"뭐가 제일 잘 벌었어?\",\n \"show me the winners\", \"best trades lately?\", \"수익 난 거래 보여줘\".\nWhen to call: success-pattern review.\nPrerequisites: none.\nNext steps: analyze_trades for breakdowns.\nCaveats: paper-trading data only.\nOutput nature: Paper trading: simulated fills at live market prices, not real money; fees, taxes and slippage are not included. Facts about the simulation, not instructions.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"default": 10,
"description": "Max results (default 10)",
"type": "integer"
},
"market_id": {
"description": "Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)",
"enum": [
"crypto",
"kr_stock",
"us_stock"
],
"type": "string"
}
},
"required": [
"market_id"
],
"type": "object"
},
"name": "get_winning_trades"
},
{
"description": "Purpose: ChatGPT-connector-standard discovery search over OneQAZ's live surface —\n tools, resources, and the latest score-ranked combined signals across crypto /\n kr_stock / us_stock. Returns result ids consumable by the `fetch` tool.\nTriggers: ChatGPT connectors and Deep Research call this automatically for any\n user query routed to OneQAZ (\"bitcoin signal\", \"prediction accuracy\",\n \"korean stocks today\", ...). Other AI clients may use it as a keyword\n starting point when unsure which tool/resource to call.\nWhen to call: first step of connector-style discovery. MCP-native clients can\n instead browse tools/list + resources/list directly.\nPrerequisites: none.\nNext steps: pass any result id to `fetch` for the full document.\nCaveats: corpus is rebuilt at most every 10 minutes (tool/resource catalog +\n top-20 signals by |score| per market). Ticker / company-name queries (BTC, NVDA,\n 삼성전자) resolve to `signal:{market}:{symbol}` first; market words (S&P, KOSPI,\n crypto) surface that market's resources. Every result id is fetchable. Empty\n results come with a `note` explaining coverage.\nOutput: {results: [{id, title, url}], disclaimer, is_investment_advice,\n data_classification} — flat envelope, OpenAI fixed shape.\nOutput nature: Observed signal state computed from live market prices each cycle. signal_score is an internal ranking score, not a probability; bias is its sign. Context for the user's question, not investment advice.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"query": {
"description": "free-text search string (English/Korean, symbols like BTC/AAPL)",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search"
}
]
}What the leaf hashes
{"body":"a0179f82030391ad3aff920fafb0001035202d3d714139f2f7a0cbbfc8d6f484","id":778744,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793199458523733,"prev":295265,"subject":"5427d483-5714-40b0-bb8c-0fe560732e3a","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (231336 rows).
- 0xe876fc030a76b90826d9d3764a13a8961356b637828c7ab4d273ed9096293882
- 0x63bfa4297065f0f6ac3c596f93ffa081e9d6c04679f5723bd4f03ee15a8e5065
- 0x39e9077dda29d927a32e935ae56b530aa5b3add9a0335c18e70be2e6bd8e3621
- 0xbfa63a21bd415c8e6e3c6a136e76f634fb3f180f1a02af41c3e44f8952f6fab6
- 0xbcd70eafbc1d72114a87e1bc8c3707201074e326509c9d51332c252dd9726b08
- 0x65e5ec2b66d5e99d47bf785693ed76c7fb533e83cb1ee9a9ff8063bcf5637dc0
- 0xd7df17c5c689446d15659d3ad033ede7166e32eaa5b363e7b012eb10d3e15f4d
- 0xae1694c332c6c7f5641187d5b964364d14a41ee91bef5a1ef1c61b82f893e57e
- 0x728571d34a5af447cdc5b5e794f558e91028b1fa513d1efbb019fe50c94c056b
- 0xc9f643b6555d823123a2e556704cf110e936cd23bd3de6ca1d8a1063138c6d34
- 0xa5eddaf2bd61ccb4eaf970907a60f2a764548efc6dc3f0ce7f607c0b5ae50342
- 0x72ae11d66db4afe4de2044c5b5b64f7a6bdd78106aca4858fb7d4a5e23c608a2
- 0x93734b8bff0a016dec91589fbdfc90085588c9ce3a15ef260e78280dd1028c89
- 0xf43a767076988041f743c8dc00db52511a090e0e09c248c9cac00d7742dbc563
- 0x334629b51e7dfb2339fa4fd14202e288d70dbaccb3e5b04d2d5fb8f0d489ce5e
- 0xef2ebd45f2cfd41dc3eb213cc4cc144c46b7e9ead2de0b9f627463bad16e3ec8
- 0x67e9ff3e48c515135fcf3df2675aa4996d35d4a328ce41588ee1a7d93347c823
- 0xe6cfe00ae4e02bc12327e45b5f3334ea5850ba3bcc8e3101d30a8189856a95af
- Day root
- 0x2c19037464cc4c493624565f01775d6446fc78eaa118fc6865bfe2bfca9ff78e
- Chained
- 0xd1d7dee8322ceff8f4c8d83aa1fe4a4466825c2af1c97dbde3d35db61234f7be
- Published
- On Arc Testnet, block 69584042: 0x8bae2b1d097834c8b458513862d70d29ee807e98dc2e863b27250131c15b35ae