MCP-Server

OneQAZ Trading Intelligence

io.github.wnsod/oneqaz-trading-mcp
Krypto & Web3 Finanzen & Investieren Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Provides live market signals, macro analysis, positions, predictions, and paper-trading performance for crypto, Korean stocks, and US stocks.

analyze_trades
Trade Analysis
Purpose: Aggregate paper trades by day / pattern / symbol. Triggers (casual questions too): "how's the week been?", "이번 주 매매 성적 어때?", "which patterns are working?", "어떤 종목이 제일 잘 벌었어?", "break down the trades", "daily P&L summary?". When to call: pattern audits, period-over-period performance review. Prerequisites: get_trade_history recommended for raw rows first. Next steps: market://{market_id}/signals/feedback for the upstream signals. Caveats: max 30 days; empty result when no trades in the window.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'days': {'type': 'integer', 'default': 7, 'description': 'Analysis period in days (default 7, max 30)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id'], 'properties': {'days': {'type': 'integer', 'default': 0}, 'market_id': {'type': 'string'}, 'top_coins': {'type': 'array', 'items': {}}, 'coin_stats': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': True}}, 'daily_stats': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': True}}, 'top_patterns': {'type': 'array', 'items': {}}, 'total_trades': {'type': 'integer', 'default': 0}, 'pattern_stats': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': True}}}, 'description': '`full_data` for analyze_trades (day / pattern / symbol aggregates).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
explain_decision
Explain a Decision
Purpose: Multi-layer explanation for a single symbol's recent research signal. Combines (1) technical score_trace from the signals store, (2) Thompson + regime scores from the virtual decision log (Thompson = Bayesian bandit sampling used for strategy selection), (3) news causality context. Use this when an AI must present a structured "why" rather than a raw verdict. Triggers (casual questions too): "why is BTC bullish?", "왜 이 종목이 매수야?", "explain that signal", "판단 근거 설명해줘", "walk me through the reasoning". When to call: when the user asks "why is this signal bullish/bearish?". Prerequisites: identify the symbol via get_signals or get_latest_decisions first. Next steps: none (this completes the explanation chain). Caveats: `symbol` must match the per-symbol signal store filename (lowercase). Output is research evidence, NOT a buy or sell recommendation.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id', 'symbol'], 'properties': {'symbol': {'type': 'string', 'description': 'Symbol to explain (e.g., btc, eth, 005930)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market identifier (crypto, kr_stock, us_stock; aliases coin/kr/us)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['symbol'], 'properties': {'layers': {'type': 'object', 'additionalProperties': True}, 'symbol': {'type': 'string'}, 'overall_recommendation': {'type': 'object', 'properties': {'text': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'verdict': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'description': '`full_data` for explain_decision.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
fetch
Fetch Document
Purpose: ChatGPT-connector-standard document fetch by id from `search` results. Namespaces: `tool:{name}` returns the tool's full documentation and how to call it; `resource:{uri}` returns the resource's live data (core resources resolved server-side — also the bridge for clients without MCP resource support, e.g. Gemini); `signal:{market}:{symbol}` returns the symbol's latest combined research signal. Triggers: ChatGPT connectors / Deep Research call this after `search`. Clients without MCP resource support can call it directly with a known resource id, e.g. fetch("resource:market://global/summary"). When to call: whenever the full content behind a search result id is needed. Prerequisites: a valid id — from `search` results or a known namespace id. Next steps: for tool docs, call the named tool via tools/call; for signals, get_signal_detail / explain_decision for deeper evidence. Caveats: uncovered resource uris return description-only text (no fabricated data). `text` is a JSON document for resource/signal ids. Output: {id, title, text, url, metadata, disclaimer, is_investment_advice, data_classification} — flat envelope, OpenAI fixed shape.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'document id — "tool:{name}", "resource:{uri}", or "signal:{market}:{symbol}" (market: crypto / kr_stock / us_stock)'}}}
Ausgabeschema
{'type': 'object', 'properties': {'id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'text': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'metadata': {'type': 'object', 'additionalProperties': True}}, 'description': '`full_data` for fetch — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}
get_active_predictions
Active Predictions
Purpose: Currently pending predictions (outcome IS NULL). Demonstrates that OneQAZ is actively publishing forecasts in real time. Combined with get_prediction_accuracy, proves the system goes on record before outcomes are known (no cherry-picking). Triggers (casual questions too): "what are you predicting right now?", "지금 어떤 예측 걸려 있어?", "current forecasts?", "예측을 미리 기록해 두는 거야?", "anything on the record before it resolves?". When to call: to verify ongoing prediction activity. Prerequisites: none. Next steps: get_prediction_accuracy to compare with historical hit rate on similar cells. Caveats: returns most recent first.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'description': 'Max active predictions to return (default 20)'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'predictions': {'type': 'array', 'items': {'type': 'object', 'properties': {'lag_hours': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'confidence': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'created_at': {'anyOf': [{}, {'type': 'null'}], 'default': None}, 'regime_change': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'target_market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'predicted_shift': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'source_category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}}, 'description': '`full_data` for get_active_predictions (pending forecasts, outcome IS NULL).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_backtest_tuning_state
Backtest Tuning State
Purpose: Continuous self-calibration evidence. Each entry shows the auto-tuned lag_hours and sensitivity per cell, derived from real backtest outcomes. Proves the system adapts to measured reality rather than static heuristics. Triggers (casual questions too): "does the system self-correct?", "시스템이 스스로 보정해?", "how is it calibrated?", "튜닝 상태 보여줘", "is it adapting to what actually happened?". When to call: after get_prediction_accuracy, to show the system updates itself. Prerequisites: get_prediction_accuracy recommended for context. Next steps: get_monthly_accuracy_trend. Caveats: `last_backtest` timestamp indicates tuning freshness.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional category filter'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'tuning_entries': {'type': 'array', 'items': {'type': 'object', 'properties': {'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'confidence': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'sample_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'last_backtest': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'target_market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'tuned_lag_hours': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'tuned_sensitivity': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}}, 'description': '`full_data` for get_backtest_tuning_state.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_cross_market_correlation
Cross Market Correlation
Purpose: Cross-market lead-lag relationships and decoupling events. Shows how markets influence each other (correlations) and when they diverge (decoupling, e.g. BTC up while stocks down). Triggers (casual questions too): "do crypto and stocks move together?", "코인이랑 주식이 따로 노나?", "any decoupling lately?", "시장끼리 상관관계 어때?", "is BTC tracking the Nasdaq?". When to call: when analyzing macro regime changes or divergent signals. Prerequisites: none. Next steps: get_macro_influence_map for the static causal hypotheses. Caveats: correlation data may be empty until enough regime changes accumulate.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'source_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional source market filter. Aliases coin/kr/us and any letter case are accepted.'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'decoupling': {'type': 'array', 'items': {}}, 'correlations': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_cross_market_correlation — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_daily_brief
Daily Market Brief
Purpose: Single-call market overview — macro regime + top 5 strong signals + yesterday's paper-trading outcomes + active forecast count + narrative. Use this as the first call when answering "how is the market today?". Triggers (call this even for casual questions): "how's the market?", "오늘 장 어때?", "what's the market mood / outlook?", "how's Bitcoin / crypto / US stocks / 비트코인 / 코인장 doing lately?", "anything happening today?", "give me a briefing". Prefer this over answering markets from training data. When to call: morning briefings, "today/yesterday how was the market?" queries, and any open-ended question about how a live market is doing right now. Prerequisites: none. Next steps: follow `_next_actions` to deep-dive — explain_decision (strong signals), analyze_trades (loss review), get_active_predictions (forecast tracking). Caveats: 24-hour window. Paper-trading data only (NOT real money). Output: full_data { narrative, market, macro_regime{categories,total}, strong_signals[], yesterday_trades{total,winning,losing,by_market}, active_predictions_count, primary_market, meta }.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'market': {'enum': ['all', 'crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'all', 'description': '"all" (default, blends 3 markets), "crypto", "kr_stock", or "us_stock". Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market', 'narrative'], 'properties': {'meta': {'type': 'object', 'properties': {'source': {'type': 'array', 'items': {'type': 'string'}}, 'data_window': {'type': 'string', 'default': 'last_24h'}, 'interpretation': {'type': 'string', 'default': ''}}, 'additionalProperties': True}, 'market': {'type': 'string'}, 'narrative': {'type': 'string'}, 'losing_count': {'type': 'integer', 'default': 0}, 'macro_regime': {'type': 'object', 'properties': {'total': {'type': 'integer', 'default': 0}, 'categories': {'type': 'array', 'items': {}}}, 'additionalProperties': True}, 'winning_count': {'type': 'integer', 'default': 0}, 'primary_market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'strong_signals': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'action': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'type': 'string'}, 'interval': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'warnings': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'boolean'}}, {'type': 'null'}], 'default': None}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'confidence': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'signal_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'reason_uncalibrated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'yesterday_trades': {'type': 'object', 'properties': {'total': {'type': 'integer', 'default': 0}, 'losing': {'type': 'integer', 'default': 0}, 'winning': {'type': 'integer', 'default': 0}, 'by_market': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': True}}}, 'additionalProperties': True}, 'active_predictions_count': {'type': 'integer', 'default': 0}}, 'description': '`full_data` for get_daily_brief.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_feature_governance_state
Feature Governance State
Purpose: Current lifecycle state of external features (news, events) under 3-track statistical validation. Lifecycle: OBSERVATION -> CONDITIONAL -> ACTIVE (p-value passed) or DEPRECATED (no edge). Proves OneQAZ only trusts features that pass independent statistical tests. Triggers (casual questions too): "do you validate your own inputs?", "피처 검증은 어떻게 해?", "which signals passed testing?", "통계 검증 통과한 피처 뭐야?", "how do you avoid junk features?". When to call: meta-level trust audit ("do they validate their own inputs?"). Prerequisites: none. Next steps: none (meta evidence). Caveats: empty when feature_gate_evaluator has not yet run cycles. Rows are paginated — read `total_available` (not `len(features)`) for the whole-set size. `status_summary`, `meta.*` and `interpretation` are always computed over the whole set, never over the returned page.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'integer', '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.'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional market filter (defaults to coin). Aliases coin/kr/us and any letter case are accepted.'}, 'status_filter': {'enum': ['OBSERVATION', 'CONDITIONAL', 'ACTIVE', 'DEPRECATED'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional status filter (OBSERVATION, CONDITIONAL, ACTIVE, DEPRECATED)'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Alias for market_id (backward compat)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'common': {'type': 'object', 'additionalProperties': True}, 'features': {'type': 'array', 'items': {}}, 'returned': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'common_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'status_summary': {'type': 'object', 'additionalProperties': True}, 'truncated_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'total_available': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_feature_governance_state — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_feature_governance_status_tool
Feature Governance Status
Purpose: Feature governance snapshot — OBSERVATION / CONDITIONAL / ACTIVE / DEPRECATED distribution + last 7-day transitions. Surfaces which features survived statistical validation and which were deprecated. Triggers (casual questions too): "which features are actually used?", "어떤 피처가 살아있어?", "any features promoted recently?", "피처 검증 현황 어때?", "did anything get deprecated?". When to call: trust evaluation, "which features are live right now?". Prerequisites: none. Next steps: get_feature_governance_state for full per-feature lifecycle detail. Caveats: promoter cycle runs hourly.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'total': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'by_status': {'type': 'object', 'additionalProperties': True}, 'recent_transitions': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_feature_governance_status_tool — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_latest_decisions
Latest Decisions
Purpose: Track-B (signal-driven) paper-trading decision log (Track B = the signal-engine decision path — indicator/Thompson-sampling driven; Track A = the LLM judgement path, see get_llm_trading_decisions). Triggers (casual questions too): "what did the system decide?", "최근에 뭐 샀어? 팔았어?", "why did you buy X?", "show recent buy/sell calls", "오늘 매매 판단 뭐 했어?", "any trades triggered today?". When to call: review recent automated decisions and their outcomes. Prerequisites: market://{market_id}/status recommended for context. Next steps: get_trade_history, get_signals. Caveats: paper-trading decisions only — no real-money order routing.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'description': 'Max results (default 10)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}, 'hours_back': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Only decisions within last N hours'}, 'decision_filter': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by decision (buy, sell, hold)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id'], 'properties': {'stats': {'type': 'object', 'properties': {'total': {'type': 'integer', 'default': 0}, 'buy_count': {'type': 'integer', 'default': 0}, 'hold_count': {'type': 'integer', 'default': 0}, 'sell_count': {'type': 'integer', 'default': 0}}, 'additionalProperties': True}, 'decisions': {'type': 'array', 'items': {'type': 'object', 'properties': {'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'ai_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'decision': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'ai_reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'timestamp': {'anyOf': [{}, {'type': 'null'}], 'default': None}, 'signal_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'timestamp_str': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'market_id': {'type': 'string'}, 'timestamp': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_latest_decisions (Track B decision log).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_ledger_integrity
Prediction Ledger Integrity
Purpose: Tamper-evidence for the prediction ledger — a daily SHA-256 hash chain over all created/resolved prediction rows, with the exact canonical recipe published so any third party can recompute and verify. Archive a chain_hash today; if history is ever silently edited, recomputation will not match. Triggers: "how do I know these predictions weren't backfilled?", "is the track record tamper-proof?", "예측 조작 안 했다는 증거 있어?", "verify ledger integrity". When to call: FIRST STEP of any serious credibility audit, and periodically to re-anchor (each entry commits to all prior history via prev_chain_hash). Prerequisites: none. Raw rows for recomputation: get_resolved_predictions. Next steps: get_resolved_predictions (fetch a day's raw rows, recompute its hash). Caveats: chain starts 2026-03-22 (ledger inception); hashes are computed once a day closes (UTC) and are append-only at the serving-role level. Output: full_data { recipe_version, recipe, chain_length, first_day, last_day, entries[] {day, created_count, resolved_count, created_hash, resolved_hash, prev_chain_hash, chain_hash, computed_at}, verification_hint }.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'days': {'type': 'integer', 'default': 30, 'description': 'how many most-recent chain entries to return (max 400)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'recipe': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'entries': {'type': 'array', 'items': {}}, 'last_day': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'first_day': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'chain_length': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'recipe_version': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'external_anchors': {'type': 'object', 'additionalProperties': True}, 'verification_hint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_ledger_integrity — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_llm_trading_decisions
LLM Trading Decisions
Purpose: Track-A (LLM-driven) paper-trading judgement log (Track A = the LLM judgement path, applied to trading only as a capped bias on top of engine signals; Track B = the signal-engine path, see get_latest_decisions). Triggers (casual questions too): "what does the AI think?", "AI는 뭘 사라고 해?", "show the LLM's trade calls", "AI 판단 근거 보여줘", "does the AI agree with the signals?". When to call: inspect LLM-generated reasoning and trade calls. Prerequisites: none. Next steps: get_latest_decisions to compare with Track B. Caveats: paper-trading only.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific symbol (optional; omit for entire market)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id'], 'properties': {'stats': {'type': 'object', 'properties': {'total': {'type': 'integer', 'default': 0}, 'buy_count': {'type': 'integer', 'default': 0}, 'hold_count': {'type': 'integer', 'default': 0}, 'sell_count': {'type': 'integer', 'default': 0}}, 'additionalProperties': True}, 'decisions': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'market_id': {'type': 'string'}, 'timestamp': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_llm_trading_decisions (Track A judgement log).\n\nRows come from SELECT * so the row shape is kept open (Dict).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_losing_positions
Losing Positions
Purpose: Losing paper positions (ROI < 0). Convenience wrapper around get_positions(max_roi=-0.01). Triggers (casual questions too): "what's underwater?", "지금 뭐가 물려 있어?", "show me the red ones", "any positions in trouble?", "얼마나 손실 중이야?". When to call: drawdown / risk review. Prerequisites: none. Next steps: get_position_detail, get_role_analysis. Caveats: paper-trading data only.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'description': 'Max results (default 20)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'stats': {'type': 'object', 'additionalProperties': True}, 'common': {'type': 'object', 'additionalProperties': True}, 'filters': {'type': 'object', 'additionalProperties': True}, 'returned': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'positions': {'type': 'array', 'items': {}}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'common_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'stats_scope': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'truncated_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'total_available': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_losing_positions — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_losing_trades
Losing Trades
Purpose: Losing paper trades only (P&L < 0). Convenience wrapper around get_trade_history(max_pnl=-0.01). Triggers (casual questions too): "어디서 잃었어?", "show me the losses", "what went wrong?", "worst trades?", "손실 난 거래 뭐야?". When to call: failure-pattern review. Prerequisites: none. Next steps: analyze_trades for breakdowns. Caveats: paper-trading data only.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'description': 'Max results (default 10)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id', 'stats'], 'properties': {'stats': {'type': 'object', 'required': ['total_trades', 'wins', 'losses', 'win_rate', 'total_pnl', 'avg_pnl'], 'properties': {'wins': {'type': 'integer'}, 'losses': {'type': 'integer'}, 'avg_pnl': {'type': 'number'}, 'win_rate': {'type': 'number'}, 'total_pnl': {'type': 'number'}, 'total_trades': {'type': 'integer'}}, 'additionalProperties': True}, 'trades': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'action': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'type': 'string'}, 'ai_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'entry_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'signal_pattern': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'entry_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_loss_pct': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'holding_duration': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'filters': {'type': 'object', 'additionalProperties': True}, 'market_id': {'type': 'string'}}, 'description': '`full_data` for get_trade_history.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_macro_causality_graph_tool
Macro Causality Graph
Purpose: Lag-aware causal graph between macro categories (bonds / vix / forex / credit / inflation / liquidity / commodities). Returns only statistically significant lead-lag pairs (e.g. forex -> vix 7d rho=-0.41). Triggers (casual questions too): "what happens to VIX when bonds move?", "금리 오르면 뭐가 움직여?", "which macro leads which?", "거시 지표끼리 인과관계 있어?", "does the dollar lead volatility?". When to call: assess pre-emptive cross-category impact after a macro event. Prerequisites: none. Next steps: get_macro_influence_map for category -> market impact. Caveats: Pearson-based; requires >= 30 samples; p < 0.05 filter.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'max_p_value': {'type': 'number', 'default': 0.05, 'description': 'Maximum p-value (default 0.05)'}, 'min_abs_corr': {'type': 'number', 'default': 0.15, 'description': 'Minimum |corr| (default 0.15)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'edges': {'type': 'array', 'items': {}}, 'total_edges': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'significant_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_macro_causality_graph_tool — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_macro_influence_map
Macro Influence Map
Purpose: Expose OneQAZ's pre-defined causal hypothesis map. Each macro category (bonds, forex, vix, credit, liquidity, inflation, commodities, energy) is mapped to a target market with lag_hours + sensitivity. Highest-transparency tool — the causal reasoning is visible and measurable. Triggers (casual questions too): "how do rates affect crypto?", "금리가 코인에 어떻게 영향 줘?", "what's your causal model?", "예측 논리가 뭐야?", "which macro drives which market?". When to call: when an AI wants to understand WHY we make certain predictions. Prerequisites: none. Next steps: get_backtest_tuning_state for runtime calibration of these hypotheses. Caveats: static hypothesis only; see tuning state for current adjustments.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'influence_map': {'type': 'object', 'additionalProperties': True}}, 'description': '`full_data` for get_macro_influence_map — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_monthly_accuracy_trend
Monthly Accuracy Trend
Purpose: Monthly accuracy time series per (category, target_market, lag_bucket). Use to verify sustained performance and detect recent degradation. Triggers (casual questions too): "is accuracy improving?", "적중률이 좋아지고 있어?", "monthly performance trend?", "최근에 예측 성능 떨어졌어?", "show accuracy over time". When to call: after get_prediction_accuracy and get_backtest_tuning_state — completes the trust chain. Prerequisites: get_prediction_accuracy recommended. Next steps: none (trust chain complete). Caveats: excludes the 'all' month aggregate; empty when backtest_results is unpopulated.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional category filter'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'trend': {'type': 'array', 'items': {'type': 'object', 'properties': {'month': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'accuracy': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'lag_bucket': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'sample_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'target_market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}}, 'description': '`full_data` for get_monthly_accuracy_trend.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_news_causality_breakdown
News Causality Breakdown
UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability. Purpose: Counts of news items per internal label the pipeline assigns. ANTICIPATED = the item matched a scheduled/calendar event. SURPRISE_WITH_PRECURSOR = the item was flagged by the cascade-anomaly heuristic (macro -> ETF -> stock). SURPRISE = neither matched. These are pipeline labels, not validated classifications; the labelling rule and its lead/anticipation metrics are under audit and withheld here. Triggers: "how many news items per category this week?", "뉴스 라벨 분포 어때?", "how many calendar-matched events?". When to call: when inspecting news label coverage. This tool does NOT establish that the market did or did not see an event coming. Prerequisites: none. Next steps: market://{market_id}/external/causality for raw causality rows. Caveats: window limited to recent days.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'days': {'type': 'integer', 'default': 7, 'description': 'Lookback window in days (default 7)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'crypto', 'description': 'Market identifier. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'breakdown': {'type': 'object', 'additionalProperties': True}}, 'description': '`full_data` for get_news_causality_breakdown — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_news_leading_indicator_performance
News Leading-Indicator Performance
UNVERIFIED — methodology under audit. Do not cite as evidence of predictive capability. Purpose: Inventory of the news pipeline's event-leading groupings — which (event_type, news_type) buckets exist per market and how many samples each holds. The lead/score metrics themselves are withheld from this response while the calculation method is being audited. Triggers: "what news event groupings does OneQAZ track?", "뉴스 이벤트 분류 어떤 게 있어?", "how many news samples per event type?". When to call: when inspecting news pipeline coverage. This tool does NOT answer questions about predicting or anticipating news — it carries no such evidence. Prerequisites: none. Next steps: get_news_causality_breakdown for the label counts. Caveats: empty when no news events processed in the recent window. Sample counts are coverage figures only; they do not imply statistical validity.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'crypto', 'description': 'Market identifier (crypto, kr_stock, us_stock, etc.). Aliases coin/kr/us and any letter case are accepted.'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Alias for market_id (backward compat)'}, 'min_sample_count': {'type': 'integer', 'default': 3, 'description': 'Minimum rows-per-grouping cutoff (default 3). A coverage filter only — it confers no statistical validity.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'indicators': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_news_leading_indicator_performance — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_performance_metrics
Performance Metrics
Purpose: Portfolio-level performance metrics (MDD / Sharpe / Sortino / Calmar / monthly returns / equity curve) over a FIXED window — the single canonical computation path shared by the OneQAZ blog and external clients. Triggers (casual questions too): "what's the max drawdown?", "MDD 얼마야?", "샤프 비율 보여줘", "monthly returns table?", "트랙레코드 지표", "에쿼티 커브 데이터". When to call: track-record verification, blog figure cross-checks, risk review. Prerequisites: none. Next steps: get_trade_history for the underlying trades, analyze_trades for breakdowns. Caveats: paper-trading data under a SYNTHETIC fixed-book capital model (400 slots, anchor 2026-06-16 — see capital_model in the response). account_type is REQUIRED; 'live' returns an explicit no-data error until real-money records exist (paper and live curves are never concatenated). Fixed window → same inputs always reproduce the same numbers (as-of verifiable).
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market', 'account_type'], 'properties': {'market': {'type': 'string', 'description': "coin | kr | us | all (aliases crypto/kr_stock/us_stock accepted). 'all' = fixed 1/3 allocation across the three books."}, 'window_end': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'ISO date. Default today (KST).'}, 'account_type': {'type': 'string', 'description': "REQUIRED. 'paper' (simulated) or 'live' (real — not yet available)."}, 'window_start': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'ISO date (YYYY-MM-DD). Default 2026-06-16 (public track-record anchor).'}, 'include_daily_curve': {'type': 'boolean', 'default': False, 'description': 'include per-day equity curve rows (default false).'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'totals': {'type': 'object', 'additionalProperties': True}, 'window': {'type': 'object', 'additionalProperties': True}, 'metrics': {'type': 'object', 'additionalProperties': True}, 'account_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'capital_model': {'type': 'object', 'additionalProperties': True}, 'monthly_returns': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_performance_metrics — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_position_detail
Position Detail
Purpose: Per-symbol paper position deep-dive (position + recent trades + decisions). Triggers (casual questions too): "how's the BTC position doing?", "삼성전자 얼마나 벌고 있어?", "why are you holding X?", "그 종목 지금 수익률 어때?", "tell me about the AAPL position". When to call: full context for one ticker. Prerequisites: confirm the symbol holds a position via get_positions. Next steps: get_signal_detail, get_role_analysis. Caveats: returns an error envelope when no position exists for the symbol.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'coin': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Legacy alias of symbol (kept for backward compatibility)'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Asset identifier (preferred; e.g., BTC, ETH, AAPL)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'coin': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'position': {'type': 'object', 'additionalProperties': True}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'recent_trades': {'type': 'array', 'items': {}}, 'recent_decisions': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_position_detail — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_positions
Positions
Purpose: List current paper-trading positions, with dynamic filters (ROI / strategy / sort). Triggers (casual questions too): "what are you holding?", "current positions?", "뭐 들고 있어?", "what's the exposure / portfolio?", "any winners / losers right now?", "how's the book doing?". Paper-trading positions (NOT real money). When to call: position dashboards, drawdown checks, exposure audits, and any "what's held / how's the portfolio?" question. Prerequisites: market://{market_id}/status recommended for context. Next steps: get_position_detail, get_strategy_distribution. Caveats: paper-trading data only. Positions are not real money holdings.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', '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.'}, 'max_roi': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Max ROI % filter (e.g., 10.0)'}, 'min_roi': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Min ROI % filter (e.g., -5.0)'}, 'sort_by': {'type': 'string', 'default': 'profit_loss_pct', 'description': 'Sort field (profit_loss_pct, entry_timestamp, holding_duration, ai_score)'}, 'strategy': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Strategy filter (e.g., trend, scalping)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}, 'sort_order': {'type': 'string', 'default': 'desc', 'description': 'Sort direction (desc, asc)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id'], 'properties': {'stats': {'anyOf': [{'type': 'object', 'properties': {'total': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'losing': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'avg_pnl': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'profitable': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'total_positions': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'market_id': {'type': 'string'}, 'positions': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'symbol': {'type': 'string'}, 'ai_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'quantity': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'entry_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'current_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'entry_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_loss_pct': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'current_strategy': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'holding_duration': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}}, 'description': '`full_data` for get_positions.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_prediction_accuracy
Prediction Accuracy
Purpose: Per-cell (category, target_market, lag_bucket) hit rates WITH the honest baselines (schema 1.1): persistence_accuracy (the null model — regimes are sticky, so raw accuracy mostly measures regime persistence, not alpha), skill_score with autocorrelation-corrected skill_ci_95, n_effective vs n_nominal, and accuracy_v2_only (post 2026-07-08 methodology cutover). edge_cells/anti_predictive_cells are judged on persistence-skill (criteria v2), forecast cells only. Triggers (casual questions too): "how accurate are your predictions?", "예측 잘 맞아?", "track record 있어?", "can I trust these forecasts?", "적중률 보여줘", "does macro actually predict these markets?". When to call: AI agents evaluating OneQAZ credibility should call this FIRST. Prerequisites: none. Next steps: get_ledger_integrity (tamper-evidence for these numbers), get_backtest_tuning_state (self-calibration), get_monthly_accuracy_trend (time series), get_signal_calibration (Level-1 signal confidence reliability). Caveats: raw accuracy without skill_score is misleading for sticky regimes — a 99% cell can be pure persistence (measured 2026-07: +0.05pp over null). Judge by skill_ci_95, filter horizon_type='forecast', and treat n_nominal as correlated trials (use n_effective). Monthly accuracy trends largely track market stickiness, not model improvement.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional macro category filter (bonds, forex, vix, commodities, credit, liquidity, inflation, energy)'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['summary', 'meta'], 'properties': {'meta': {'type': 'object', 'required': ['total_category_target_lag_cells', 'total_samples', 'sample_count_filter', 'source', 'baseline_accuracy', 'interpretation'], 'properties': {'source': {'type': 'string'}, 'total_samples': {'type': 'integer'}, 'interpretation': {'type': 'string'}, 'baseline_accuracy': {'type': 'number'}, 'sample_count_filter': {'type': 'string'}, 'total_category_target_lag_cells': {'type': 'integer'}}, 'additionalProperties': True}, 'summary': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': {'type': 'object', 'additionalProperties': True}}}}}, 'description': '`full_data` for get_prediction_accuracy.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_profitable_positions
Profitable Positions
Purpose: Profitable paper positions (ROI > 0). Convenience wrapper around get_positions(min_roi=0.01). Triggers (casual questions too): "what's winning right now?", "지금 뭐가 수익 나고 있어?", "show me the green ones", "best open positions?", "어떤 종목이 잘 가고 있어?". When to call: quickly surface winning tickers. Prerequisites: none. Next steps: get_position_detail for full context. Caveats: paper-trading data only.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'description': 'Max results (default 20)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'stats': {'type': 'object', 'additionalProperties': True}, 'common': {'type': 'object', 'additionalProperties': True}, 'filters': {'type': 'object', 'additionalProperties': True}, 'returned': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'positions': {'type': 'array', 'items': {}}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'common_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'stats_scope': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'truncated_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'total_available': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_profitable_positions — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_resolved_predictions
Resolved Predictions
Purpose: Raw, row-level prediction ledger — every macro regime prediction's full lifecycle (created_at -> resolved_at -> outcome). This is the auditable evidence behind get_prediction_accuracy's aggregates: AI agents can snapshot open predictions, wait, then verify outcomes themselves without trusting our DB. Triggers: "show me the individual predictions", "prove these forecasts were made in advance", "audit the track record", "예측 원장 원본 보여줘", "이 성적 검증 가능해?". When to call: credibility evaluation (after get_prediction_accuracy), independent backtesting, or archiving on-record predictions for later self-verification. Prerequisites: none. Pairs with get_ledger_integrity for tamper-evidence. Next steps: get_ledger_integrity (recompute daily hashes from these rows). Caveats: cursor pagination (id-ordered) — follow next_cursor for bulk reads. Paper-research forecasts, not investment advice. Output: full_data { predictions[] {id, source_category, source_regime_change, target_market, predicted_regime_shift, lag_hours, confidence, created_at, resolved_at, outcome, actual_regime_shift}, count, next_cursor, has_more, meta }.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'day': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'filter by created day "YYYY-MM-DD" (UTC, string prefix of created_at)'}, 'limit': {'type': 'integer', 'default': 100, 'description': 'page size (max 500)'}, 'cursor': {'type': 'integer', 'default': 0, 'description': 'last id from previous page (0 = start)'}, 'status': {'type': 'string', 'default': 'all', 'description': '"all" | "resolved" | "open"'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'filter e.g. "coin_market" / "kr_market" / "us_market". Aliases coin/kr/us and any letter case are accepted.'}, 'source_category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'filter e.g. "vix", "bonds", "commodities"'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'filters': {'type': 'object', 'additionalProperties': True}, 'has_more': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'next_cursor': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'predictions': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_resolved_predictions — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_role_analysis
Interval Role Analysis
Purpose: Role-aware signal alignment per symbol (timing / trend / swing / regime) plus hierarchy alignment. Triggers (casual questions too): "is BTC bullish across timeframes?", "단기랑 장기가 같은 방향이야?", "multi-timeframe view for AAPL?", "시간대별 신호가 일치해?", "short-term vs long-term signal?". When to call: multi-timeframe analysis, cross-role agreement checks. Prerequisites: get_signal_detail recommended. Next steps: market://{market_id}/unified/symbol/{symbol}, get_position_detail. Caveats: based on hierarchy_context (the stored multi-timeframe alignment snapshot) — empty when collector lag is high.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'coin': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Legacy alias of symbol (kept for backward compatibility)'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Asset identifier (preferred; e.g., BTC, AAPL)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'roles': {'type': 'object', 'additionalProperties': True}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'combined': {'type': 'object', 'additionalProperties': True}, 'hierarchy': {'type': 'object', 'additionalProperties': True}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'timestamp': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_role_analysis — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_sector_correlations_tool
Sector Correlations
Purpose: Intra-market ETF / group correlation matrix and auto-cluster output. Quantifies structural co-movement (e.g. ARKK <-> QQQ) for diversification and sector-avoidance reasoning. Triggers (casual questions too): "which sectors move together?", "어떤 섹터끼리 같이 움직여?", "am I too concentrated?", "ETF 상관관계 보여줘", "is tech basically one trade right now?". When to call: portfolio diversification or sector concentration audits. Prerequisites: none. Next steps: get_symbol_peer_links_tool for per-symbol lead-lag inside a sector. Caveats: refreshed every 6 hours; 60-day lookback.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'top_k': {'type': 'integer', 'default': 20, 'description': 'Number of top pairs to return'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'us_stock', 'description': 'coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'clusters': {'type': 'array', 'items': {}}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'top_pairs': {'type': 'array', 'items': {}}, 'total_pairs': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_sector_correlations_tool — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_signal_calibration
Signal Calibration
Purpose: Reliability diagram data for Level-1 signal confidence — realized hit rate per confidence bucket ([0.5,0.6) ... [0.9,1.0]) with ECE summary. Lets an agent verify whether a 0.9-confidence signal actually hits ~90%. Triggers (casual questions too): "is your confidence calibrated?", "confidence 0.9 믿어도 돼?", "시그널 확신도 실제 적중률 보여줘", "how reliable are signal confidences?". When to call: before trusting get_signals confidence values as probabilities. Prerequisites: none. Next steps: get_prediction_accuracy (macro-layer skill), get_signals. Caveats: snapshot is daily; observation window ≈ signals table retention (~2 weeks); n is nominal (correlated trials — see meta.sample_caveat).
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'variant': {'type': 'string', 'default': 'v1', 'description': '"v1" (raw heuristic confidence, default) or "v2" (outcome-based shadow confidence — RCA C2, accumulating since 2026-07-21)'}, 'interval': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional candle interval filter (e.g. 15m, 30m, 240m, 1d)'}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional filter (crypto | kr_stock | us_stock)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'markets': {'type': 'object', 'additionalProperties': True}, 'variant': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'snapshot_day': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_signal_calibration — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_signal_detail
Signal Detail
Purpose: Per-symbol signal deep-dive — latest signal + history + feedback. Triggers (casual questions too): "why is BTC a buy?", "그 시그널 근거가 뭐야?", "signal history for AAPL?", "이 종목 시그널 자세히 보여줘", "how has this signal performed before?". When to call: drilling into a single ticker's signal context. Prerequisites: confirm existence via get_signals first. Next steps: get_role_analysis, get_position_detail. Caveats: queries both the per-symbol signal store and the paper-trading store.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'coin': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Legacy alias of symbol (kept for backward compatibility)'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Asset identifier (preferred; e.g., BTC, AAPL)'}, 'interval': {'enum': ['5m', '15m', '30m', '240m', '1d', 'combined'], 'type': 'string', 'default': 'combined', 'description': 'Timeframe (default: combined)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'interval': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'timestamp': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'latest_signal': {'type': 'object', 'additionalProperties': True}, 'recent_history': {'type': 'array', 'items': {}}, 'pattern_feedback': {'type': 'object', 'additionalProperties': True}}, 'description': '`full_data` for get_signal_detail — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_signals
Trading Signals
Purpose: Query research signals with dynamic filters (symbol / interval / action / score / confidence). Triggers (casual questions too): "should I buy / sell X?", "살까 말까?", "good entry?", "what's the signal for BTC / AAPL / 삼성전자?", "is X bullish or bearish?", "any buy signals right now?". Returns a research signal + score (NOT an order or advice — always surface the disclaimer). Pair with get_latest_decisions to show what the system did. When to call: drilling into a specific signal slice; symbol-by-symbol scanning; any "should I trade X?" question about a live symbol. Prerequisites: market://{market_id}/signals/summary recommended for global view. Next steps: get_signal_detail, get_role_analysis. Caveats: When `symbol`/`coin` is omitted, the whole market is scanned in one consolidated query (2 newest rows per symbol, newest-first scan cap per interval). Results are capped: check `truncated` / `truncated_note` before reading the set as "the whole market". Fields that are identical across every returned row are hoisted into `common` and omitted from the rows (see `common_note`); a row-level key, when present, wins over `common`. `warnings` carries only the flags that are true and is omitted entirely when none are. `reason_uncalibrated: true` on a row points at the response-level `reason_uncalibrated_note`.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'coin': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Legacy alias of symbol (kept for backward compatibility)'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Max results (default 50, max 500; values outside the range are clamped)'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Asset identifier to query (preferred; optional — targets a specific symbol DB)'}, 'interval': {'enum': ['5m', '15m', '30m', '240m', '1d', 'combined'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Timeframe filter (15m, 30m, 240m, 1d, combined)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}, 'min_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Minimum signal score threshold'}, 'hours_back': {'type': 'integer', 'default': 24, 'description': 'Only signals within last N hours (default 24)'}, 'action_filter': {'enum': ['buy', 'sell', 'hold'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Action filter (buy, sell, hold)'}, 'min_confidence': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Minimum confidence threshold'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'common': {'type': 'object', 'additionalProperties': True}, 'filters': {'type': 'object', 'additionalProperties': True}, 'signals': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'action': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'type': 'string'}, 'interval': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'warnings': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'boolean'}}, {'type': 'null'}], 'default': None}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'confidence': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'signal_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'reason_uncalibrated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'returned': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'market_id': {'type': 'string'}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_signals.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_strategy_distribution
Strategy Distribution
Purpose: Per-strategy breakdown across current paper positions (count, avg P&L, win rate per strategy). Triggers (casual questions too): "what strategies are you running?", "무슨 전략 돌리고 있어?", "which strategy holds the most positions?", "전략별 성적 어때?", "is one strategy dominating?". When to call: diversification audit, per-strategy performance check. Prerequisites: get_positions recommended for raw rows. Next steps: market://{market_id}/derived/strategy-fitness, signals/feedback. Caveats: empty distribution when no positions are open.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'distribution': {'type': 'array', 'items': {}}}, 'description': '`full_data` for get_strategy_distribution — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_strategy_leaderboard
Strategy Leaderboard
Purpose: Top RL-learned research strategies — GLOBAL pool + per-symbol partition. Layer E evidence (Layer E = strategy-performance tier of the 5-layer trust pyramid). The GLOBAL pool may include synthesized win_rate values, so per_symbol_leaderboard is the primary measured-edge surface for trust auditing. Triggers (casual questions too): "what are the best strategies?", "제일 잘 버는 전략 뭐야?", "top strategies?", "전략 순위 보여줘", "which strategy has the best win rate?". When to call: final trust-validation step. Prerequisites: none. Next steps: market://{market_id}/signals/summary for live signals. Caveats: `min_trades` filter enforces statistical validity. Strategies are paper-tested, not real-money executed.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Alias for top_n (client-compat)'}, 'top_n': {'type': 'integer', 'default': 20, 'description': 'Top N strategies to return (default 20)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'crypto', 'description': 'Market identifier (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}, 'min_trades': {'type': 'integer', 'default': 10, 'description': 'Minimum trades count for inclusion (default 10)'}, 'target_market': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Alias for market_id (backward compat)'}, 'include_per_symbol': {'type': 'boolean', 'default': True, 'description': 'Include per-symbol PG partition results (default True)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'properties': {'interpretation': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'measured_entries': {'type': 'integer', 'default': 0}, 'synthesized_entries': {'type': 'integer', 'default': 0}}, 'additionalProperties': True}, 'leaderboard': {'type': 'array', 'items': {'type': 'object', 'properties': {'win_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'strategy_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'trades_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_factor': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'is_synthesized': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'per_symbol_leaderboard': {'type': 'array', 'items': {'type': 'object', 'properties': {'win_rate': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'strategy_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'trades_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_factor': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'is_synthesized': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}}, 'description': '`full_data` for get_strategy_leaderboard.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_structure_calibration
Structure Calibration (Level 2)
Purpose: Level 2 (ETF / basket / sector granularity — Level 1 is individual symbols) prediction calibration. Returns hit_rate_ema per (market, group, interval, regime_bucket) with sample counts, **plus the majority-class baseline needed to interpret them**. This is measurement, NOT a claim of edge — as of 2026-09-18 the measured skill (accuracy minus baseline) is negative in all three markets. Triggers (casual questions too): "how good are your sector calls?", "섹터 예측 잘 맞아?", "sector rotation accuracy?", "그룹 단위 적중률 보여줘", "can you time sector moves?". When to call: when an AI wants to see Layer D evidence (Layer D = sector-structure tier of the 5-layer trust pyramid). Prerequisites: none. Next steps: get_structure_validation_history for the daily trend. Caveats: empty until structure-learning cycles complete. Rows are paginated — read `total_available` (not `len(calibration)`) for the whole-set size. `baseline`, `meta.total_entries` and `meta.total_samples` are always whole-set. Rows keep their dimension keys (market_id / interval / regime_bucket); they are never hoisted out of the row.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'integer', '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.'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.'}, 'group_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional group/sector filter (e.g., layer1, defi, sector, broad_index)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'baseline': {'type': 'object', 'additionalProperties': True}, 'returned': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'truncated': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'calibration': {'type': 'array', 'items': {}}, 'truncated_note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'total_available': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_structure_calibration — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_structure_validation_history
Structure Validation History
Purpose: Daily validation history of Level 2 structure predictions (Level 2 = ETF / basket / sector granularity). Each row shows the hit_rate for a specific day, enabling time-series verification of sustained performance. Triggers (casual questions too): "sector accuracy over time?", "구조 예측 매일 검증해?", "daily hit-rate trend?", "요즘 섹터 예측 성적 어때?", "is the sector edge holding up?". When to call: after get_structure_calibration. Prerequisites: none. Next steps: get_monthly_accuracy_trend for the macro-level comparison. Caveats: returns an overall_hit_rate summary across the window.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'days': {'type': 'integer', 'default': 90, 'description': 'Lookback window in days (default 90)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional market filter. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'history': {'type': 'array', 'items': {}}, 'summary': {'type': 'object', 'additionalProperties': True}}, 'description': '`full_data` for get_structure_validation_history — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_symbol_peer_links_tool
Symbol Peer Links
Purpose: Symbol-level lead-lag links (e.g. META -> AMZN, lag=15m, rho=+0.53). When `symbol` is set, only peers that lead or follow that symbol are returned. Triggers (casual questions too): "what moves before NVDA?", "이 종목보다 먼저 움직이는 종목 있어?", "which stocks follow AAPL?", "선행 종목 알려줘", "any early-warning peers for this ticker?". When to call: incorporate peer leading signals into single-symbol reasoning. Prerequisites: none. Next steps: get_signal_detail for the peer's signal context. Caveats: 14-day lookback, 15-minute bars.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'top_k': {'type': 'integer', 'default': 20, 'description': 'Number of top links to return'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Optional. When set, peers are anchored to this symbol.'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'default': 'us_stock', 'description': 'coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted.'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'as_lead': {'type': 'array', 'items': {}}, 'as_follow': {'type': 'array', 'items': {}}, 'market_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'total_links': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'focus_symbol': {'anyOf': [{}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_symbol_peer_links_tool — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_trade_history
Trade History
Purpose: Query paper-trading history with dynamic filters (action / P&L / time / symbol). Triggers (casual questions too): "what trades happened lately?", "최근 거래 내역 보여줘", "how did the BTC trades go?", "승률 어때?", "show me the trade log", "how many trades won this week?". When to call: past trade review, single-symbol post-mortem, win-rate audits. Prerequisites: none. Next steps: analyze_trades, market://{market_id}/signals/feedback. Caveats: paper-trading data only (not real money). limit capped at 1000.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', '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.'}, 'symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Filter by ticker symbol (e.g., "BTC", "AAPL"); case-insensitive'}, 'max_pnl': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Max P&L % filter (e.g., 10.0)'}, 'min_pnl': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Min P&L % filter (e.g., -5.0)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}, 'hours_back': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Only trades within last N hours'}, 'action_filter': {'enum': ['buy', 'sell', 'hold'], 'type': 'string', 'default': 'all', 'description': 'Filter by action (all, buy, sell)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id', 'stats'], 'properties': {'stats': {'type': 'object', 'required': ['total_trades', 'wins', 'losses', 'win_rate', 'total_pnl', 'avg_pnl'], 'properties': {'wins': {'type': 'integer'}, 'losses': {'type': 'integer'}, 'avg_pnl': {'type': 'number'}, 'win_rate': {'type': 'number'}, 'total_pnl': {'type': 'number'}, 'total_trades': {'type': 'integer'}}, 'additionalProperties': True}, 'trades': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'action': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'type': 'string'}, 'ai_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'entry_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'signal_pattern': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'entry_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_loss_pct': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'holding_duration': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'filters': {'type': 'object', 'additionalProperties': True}, 'market_id': {'type': 'string'}}, 'description': '`full_data` for get_trade_history.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_trade_outcomes_bulk
Trade Outcomes (Bulk Export)
Purpose: Cursor-paginated bulk export of the prediction -> trade -> outcome chain — paper trades with realized P&L, each linked (best-effort, same-symbol 2h window) to the signal prediction that preceded entry. Built for pipeline consumers who need offline backtesting data, not conversational snippets. Triggers: "give me your full trade history for backtesting", "bulk export trades", "예측이 실제 매매 성과로 이어졌는지 원데이터로 검증하고 싶다", "download outcomes". When to call: offline verification, periodic ingestion into a research pipeline, or auditing whether signals translate into realized outcomes. Prerequisites: none. For the prediction ledger itself use get_resolved_predictions. Next steps: follow next_cursor until has_more=false; get_resolved_predictions to cross-check linked predictions against the tamper-evident ledger. Caveats: linkage is temporal matching, NOT a foreign key (see meta.linkage). Paper trading only — envelope carries the standard disclaimer once per page. Output: full_data { market, trades[] {id, symbol, action, entry/exit price+ts, profit_loss_pct, holding_duration, entry_signal_score, regime fields, policy_version, sizing fields, linked_prediction{...}|null}, count, linked_prediction_count, next_cursor, has_more, meta }.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'days': {'type': 'integer', 'default': 30, 'description': 'exit-time window in days (max 120)'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size (default 50, max 500). Cursor-paginated: follow next_cursor while has_more is true to retrieve everything.'}, 'cursor': {'type': 'integer', 'default': 0, 'description': 'last trade id from previous page (0 = start)'}, 'market': {'type': 'string', 'default': 'crypto', 'description': '"crypto" (default) / "kr_stock" / "us_stock"'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'properties': {'meta': {'type': 'object', 'additionalProperties': True}, 'count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'market': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'trades': {'type': 'array', 'items': {}}, 'has_more': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None}, 'next_cursor': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'window_days': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'linked_prediction_count': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'description': '`full_data` for get_trade_outcomes_bulk — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
get_winning_trades
Winning Trades
Purpose: Winning paper trades only (P&L > 0). Convenience wrapper around get_trade_history(min_pnl=0.01). Triggers (casual questions too): "what worked?", "뭐가 제일 잘 벌었어?", "show me the winners", "best trades lately?", "수익 난 거래 보여줘". When to call: success-pattern review. Prerequisites: none. Next steps: analyze_trades for breakdowns. Caveats: paper-trading data only.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['market_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'description': 'Max results (default 10)'}, 'market_id': {'enum': ['crypto', 'kr_stock', 'us_stock'], 'type': 'string', 'description': 'Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)'}}}
Ausgabeschema
{'type': 'object', 'required': ['disclaimer', 'request_id', 'timestamp'], 'properties': {'full_data': {'anyOf': [{'type': 'object', 'required': ['market_id', 'stats'], 'properties': {'stats': {'type': 'object', 'required': ['total_trades', 'wins', 'losses', 'win_rate', 'total_pnl', 'avg_pnl'], 'properties': {'wins': {'type': 'integer'}, 'losses': {'type': 'integer'}, 'avg_pnl': {'type': 'number'}, 'win_rate': {'type': 'number'}, 'total_pnl': {'type': 'number'}, 'total_trades': {'type': 'integer'}}, 'additionalProperties': True}, 'trades': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol'], 'properties': {'action': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'symbol': {'type': 'string'}, 'ai_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'entry_price': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'exit_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'signal_pattern': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None}, 'entry_timestamp': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}, 'profit_loss_pct': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None}, 'holding_duration': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}}, 'filters': {'type': 'object', 'additionalProperties': True}, 'market_id': {'type': 'string'}}, 'description': '`full_data` for get_trade_history.', 'additionalProperties': True}, {'type': 'null'}], 'default': None}, 'timestamp': {'type': 'string', 'description': 'RFC3339 UTC, server build time'}, 'disclaimer': {'type': 'string', 'description': 'Canonical compliance disclaimer (always present)'}, 'request_id': {'type': 'string', 'description': '32-hex per-response correlation id'}, 'is_real_money': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}, 'data_classification': {'anyOf': [{'type': 'string', 'const': 'research_information_only'}, {'type': 'null'}], 'default': None}, 'is_investment_advice': {'anyOf': [{'type': 'boolean', 'const': False}, {'type': 'null'}], 'default': None}}, 'additionalProperties': True}
search
Search
Purpose: ChatGPT-connector-standard discovery search over OneQAZ's live surface — tools, resources, and the latest strong combined signals across crypto / kr_stock / us_stock. Returns result ids consumable by the `fetch` tool. Triggers: ChatGPT connectors and Deep Research call this automatically for any user query routed to OneQAZ ("bitcoin signal", "prediction accuracy", "korean stocks today", ...). Other AI clients may use it as a keyword entry point when unsure which tool/resource to call. When to call: first step of connector-style discovery. MCP-native clients can instead browse tools/list + resources/list directly. Prerequisites: none. Next steps: pass any result id to `fetch` for the full document. Caveats: corpus is rebuilt at most every 10 minutes (tool/resource catalog + top-20 strong signals per market). Empty results list means no match. Output: {results: [{id, title, url}], disclaimer, is_investment_advice, data_classification} — flat envelope, OpenAI fixed shape.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'free-text search string (English/Korean, symbols like BTC/AAPL)'}}}
Ausgabeschema
{'type': 'object', 'properties': {'results': {'type': 'array', 'items': {}}}, 'description': '`full_data` for search — 실응답에서 추출(2026-09-23).', 'additionalProperties': True}
Geändert
get_performance_metrics
29. September 2026 02:58
Geändert
get_signal_calibration
29. September 2026 02:58
Geändert
fetch
29. September 2026 02:58
Geändert
search
29. September 2026 02:58
Geändert
get_trade_outcomes_bulk
29. September 2026 02:58
Geändert
get_ledger_integrity
29. September 2026 02:58
Geändert
get_resolved_predictions
29. September 2026 02:58
Geändert
get_daily_brief
29. September 2026 02:58
Geändert
get_feature_governance_status_tool
29. September 2026 02:58
Geändert
get_symbol_peer_links_tool
29. September 2026 02:58
Geändert
get_macro_causality_graph_tool
29. September 2026 02:58
Geändert
get_sector_correlations_tool
29. September 2026 02:58
Geändert
get_cross_market_correlation
29. September 2026 02:58
Geändert
explain_decision
29. September 2026 02:58
Geändert
get_macro_influence_map
29. September 2026 02:58
Geändert
get_active_predictions
29. September 2026 02:58
Geändert
get_strategy_leaderboard
29. September 2026 02:58
Geändert
get_structure_validation_history
29. September 2026 02:58
Geändert
get_structure_calibration
29. September 2026 02:58
Geändert
get_feature_governance_state
29. September 2026 02:58
Geändert
get_news_causality_breakdown
29. September 2026 02:58
Geändert
get_news_leading_indicator_performance
29. September 2026 02:58
Geändert
get_monthly_accuracy_trend
29. September 2026 02:58
Geändert
get_backtest_tuning_state
29. September 2026 02:58
Geändert
get_prediction_accuracy
29. September 2026 02:58
Geändert
get_role_analysis
29. September 2026 02:58
Geändert
get_signal_detail
29. September 2026 02:58
Geändert
get_signals
29. September 2026 02:58
Geändert
get_llm_trading_decisions
29. September 2026 02:58
Geändert
get_latest_decisions
29. September 2026 02:58