OneQAZ Trading Intelligence
Server Details
Live market data, signals, positions, and macro analysis for crypto, KR stocks, and US stocks.
- Status
- Healthy
- Uptime
- 98.3% over 39 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- oneqaz-trading/oneqaz-trading-mcp
- GitHub Stars
- 0
- Server Listing
- oneqaz-trading-mcp
TDQS
Scored across 39 tools
Most tools have distinct analytical purposes, and the descriptions are unusually thorough with prerequisites and next steps. However, several near-duplicate pairs exist (get_feature_governance_state vs get_feature_governance_status_tool, get_macro_causality_graph_tool vs get_macro_influence_map, win/loss wrappers) that could cause an agent to select the wrong one without deep reading. The overlap is real but mostly resolvable from the detailed descriptions.
The overwhelming majority follow a clean get_<domain>_<view> pattern, which makes the set feel orderly. The main blemishes are the inconsistent '_tool' suffix on a few tools (get_macro_causality_graph_tool, get_symbol_peer_links_tool, get_feature_governance_status_tool) and the group of verb-named tools (fetch, search, analyze_trades, explain_decision). These are minor deviations rather than chaotic mixing.
39 tools is well past the 25+ threshold for 'too many', and the count is inflated by redundant convenience wrappers (get_winning_trades/get_losing_trades, get_profitable_positions/get_losing_positions) and overlapping governance/correlation views. A leaner set of 25-ish core tools would serve the domain just as well with far less selection burden on agents.
For a read-only trading intelligence server, coverage is remarkably thorough: signals, trades, positions, predictions, performance, calibration, macro relationships, governance, and trust/audit evidence are all represented. The only minor gaps are conveniences like a dedicated market-list/status tool or a direct per-market overview tool, though get_daily_brief and search/fetch mostly cover those cases.
Available Tools
39 toolsanalyze_tradesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Analysis period in days (default 7, max 30) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds behavioral details beyond annotations: the aggregation dimension (day/pattern/symbol), the 30-day limit, and the empty-result behavior when no trades exist. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). It front-loads the purpose and packs useful information without excessive fluff. It is slightly verbose with multiple trigger examples, but each section earns its place. The structure aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (aggregation, multiple grouping dimensions, time window, potential empty results), the description covers purpose, triggers, prerequisites, next steps, and caveats. An output schema exists, so the return format is already documented. This is a complete, self-contained definition that leaves no critical gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (days and market_id) are fully documented in the schema. The description does not add new semantics beyond what the schema already states (e.g., default 7, max 30, enum values). It does mention 'max 30 days' in the caveats, but that duplicates the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (aggregate) and resource (paper trades) with explicit grouping dimensions (day/pattern/symbol). It clearly differentiates from siblings like get_trade_history (raw rows) and get_winning_trades/get_losing_trades (filtered views). No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit triggers (casual questions, pattern audits, period-over-period review), a prerequisite (get_trade_history recommended), and next steps (market:// signals feedback). It also includes caveats (max 30 days, empty result) that guide when to call. This is unusually thorough for usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_decisionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Symbol to explain (e.g., btc, eth, 005930) | |
| market_id | Yes | Market identifier (crypto, kr_stock, us_stock; aliases coin/kr/us) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description correctly does not repeat these. It adds important behavioral context: the output is 'research evidence, NOT a buy or sell recommendation' – a critical caveat for an agent to know. It also discloses the caveat that symbol must match the per-symbol signal store filename (lowercase). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). It is front-loaded with the purpose and includes only relevant information. While it is longer than necessary, every section contributes useful operational detail, so it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-layer explanation combining three sources) and the presence of an output schema (which likely documents the return structure), the description covers all essential aspects: purpose, usage triggers, prerequisites, caveats, and non-recommendation status. An agent has enough information to call it correctly without further research.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented in the schema. The description adds extra value by specifying that the 'symbol' parameter must be lowercase and match the per-symbol signal store filename, which is not in the schema. It also reiterates market_id aliases (coin/kr/us) indirectly through the schema description, but the lowercase requirement is a genuine addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Multi-layer explanation for a single symbol's recent research signal' combining technical score_trace, Thompson/regime scores, and news causality. It distinguishes itself from raw verdict tools by saying 'Use this when an AI must present a structured "why" rather than a raw verdict.' It also provides concrete trigger examples, making it unmistakable when to use this tool versus siblings like get_signals or get_latest_decisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: 'when the user asks "why is this signal bullish/bearish?"' and lists casual trigger phrases in multiple languages. It also gives prerequisites ('identify the symbol via get_signals or get_latest_decisions first'), and notes that this tool completes the explanation chain (next steps: none). This provides a clear decision boundary and alternative tools to use beforehand.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | document id — "tool:{name}", "resource:{uri}", or "signal:{market}:{symbol}" (market: crypto / kr_stock / us_stock) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| text | No | |
| title | No | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description goes beyond them. It discloses that uncovered resource URIs return 'description-only text (no fabricated data)' – a critical honesty guarantee. It also states that `text` is a JSON document for resource/signal ids, and describes the output envelope as 'flat envelope, OpenAI fixed shape.' These details add behavioral context that an agent would otherwise not know and that is not derivable from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than most but is exceptionally well-structured with clear section labels (Purpose, Namespaces, Triggers, When to call, Prerequisites, Next steps, Caveats, Output). Every section earns its place – each addresses a different agent concern. The purpose is front-loaded, and the information density is high. It is not bloated; it is comprehensive for a tool with three distinct resource types. The only reason it doesn't earn a 5 is that a few sentences could be tightened, but the structure is exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (three namespaces, multiple triggers, integration with other tools), the description is remarkably complete. It covers the input format, prerequisites, caveats, and even next steps for follow-up actions. It references the output envelope but does not duplicate the output schema since that exists separately. For an agent to call this tool correctly, everything needed – from valid id construction to error handling (description-only text) – is present. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the id parameter 100% and gives a succinct description with namespace patterns. The tool description enriches this substantially by explaining each namespace in depth: `tool:{name}` returns the tool's full documentation and how to call it; `resource:{uri}` returns live data and serves as a bridge for clients without MCP support; `signal:{market}:{symbol}` returns the latest combined research signal. It also gives concrete examples like 'fetch("resource:market://global/summary")'. This goes well beyond the schema and fully compensates for any ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise purpose: 'ChatGPT-connector-standard document fetch by id from `search` results.' It specifies the verb (fetch), the resource (document by id), and the source (search results). It also clearly enumerates the three supported namespaces (tool, resource, signal), which distinguishes it from the many sibling get_* tools that are single-purpose. An agent can immediately understand what this tool does and how it differs from a search or a detail tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and prescriptive. It states that ChatGPT connectors/Deep Research call this after search, that clients without MCP resource support can call it directly with a known resource id, and 'When to call: whenever the full content behind a search result id is needed.' It also provides 'Next steps' that route the agent to alternative tools (get_signal_detail / explain_decision) when deeper evidence is required, effectively telling the agent when NOT to use this tool. This is a model of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_predictionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max active predictions to return (default 20) | |
| target_market | No | Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate safety behavior. It adds useful behavioral detail with the caveat 'returns most recent first' and clarifies the pending-prediction filter 'outcome IS NULL'. This goes beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into small labeled sections and front-loads purpose before usage triggers. The trigger list is somewhat long, but it supports the stated goal of catching casual questions. Overall it is structured and compact enough to be useful without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional parameters, a fully described schema, complete annotations, and an output schema present, the description provides everything needed for correct invocation: purpose, state filter, usage context, a next-step suggestion, and the ordering caveat. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, including defaults, enums, and accepted alias values for target_market. The tool description itself does not add parameter-level semantics, but the schema fully carries that burden, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Purpose: Currently pending predictions (outcome IS NULL)' which precisely identifies the resource and its state filter. It also distinguishes the tool from related prediction tools by emphasizing 'before outcomes are known' and referencing get_prediction_accuracy. This is a specific, non-tautological statement of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'When to call: to verify ongoing prediction activity' and provides concrete trigger phrases. It does not explicitly state when not to call or point to alternatives like get_resolved_predictions as the exclusion case, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backtest_tuning_stateARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter | |
| target_market | No | Optional target market filter. Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by explaining the data source (real backtest outcomes) and a caveat that last_backtest timestamp indicates tuning freshness. However, it does not disclose further behavioral details like error conditions or rate limits. Annotations already cover read-only, open-world, and idempotent hints, so the description enriches but does not fully carry the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and front-loads the purpose. It is slightly verbose with multiple trigger examples, but each section adds functional value for an agent's decision-making, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema and annotations covering read-only, open-world, and idempotent behavior, the description provides complete usage context: explicit triggers, a recommended call sequence, prerequisites, next steps, and a caveat about timestamp freshness. Nothing an agent needs to decide whether and when to call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both optional parameters (category and target_market), each with descriptive text about filtering and accepted aliases. The description does not elaborate on how parameters affect results, but since the schema already documents them fully, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: returning continuous self-calibration evidence with auto-tuned lag_hours and sensitivity per cell, derived from real backtest outcomes. It clearly differentiates itself from sibling tools by focusing on tuning state and proving adaptation, so an agent can tell it apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit triggers (e.g., 'does the system self-correct?'), a recommended call order ('after get_prediction_accuracy'), a prerequisite, and a next step (get_monthly_accuracy_trend). This provides clear when-to-use context and names related alternatives, leaving no ambiguity about invocation timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cross_market_correlationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source_market | No | Optional source market filter. Aliases coin/kr/us and any letter case are accepted. | |
| target_market | No | Optional target market filter. Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds a meaningful caveat about potentially empty data until enough regime changes accumulate, which goes beyond annotations and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections and front-loaded purpose. Trigger examples add some redundancy with the 'when to call' line, but they are useful for natural-language matching.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two optional parameters and an output schema, the description covers prerequisites, caveats, next steps, and usage context. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters are already well-documented with enums, defaults, and alias examples. The description adds no new parameter-level details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific function: showing cross-market correlations and decoupling events, with a concrete example. It distinguishes itself from related tools by naming the next-step tool and focusing on lead-lag/divergence analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit trigger phrases, casual question examples, and a 'when to call' condition. It lacks direct exclusions or sibling comparisons, but the context is strong enough for an agent to route appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_briefARead-onlyIdempotentInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | "all" (default, blends 3 markets), "crypto", "kr_stock", or "us_stock". Aliases coin/kr/us and any letter case are accepted. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint, openWorldHint, and idempotentHint, which the description aligns with. It adds critical context that the data is paper-trading only (not real money) and that the data is a 24-hour window, which is not in the annotations. It also discloses the output structure, adding behavioral transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats, Output). It is longer than ideal but every section earns its place, and the critical purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema, the description is quite complete. It covers output fields, caveats (paper-trading), and next steps. Minor omission: no explicit mention of error conditions or data freshness beyond the 24-hour window, but this is sufficient given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the default behavior ('all' default) and providing aliases (coin/kr/us) and case-insensitivity that are not in the schema. This enhances parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a single-call market overview, specifying the exact data it returns (macro regime, top signals, paper-trading results, forecast count, narrative). It is distinguishable from siblings like get_latest_decisions or get_performance_metrics by its aggregated briefing nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit trigger phrases, when to call (morning briefings, market queries), and when to prefer it over training data. It also lists next-step tools for deep dives, which helps the agent understand when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feature_governance_stateARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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 | No | Optional market filter (defaults to coin). Aliases coin/kr/us and any letter case are accepted. | |
| status_filter | No | Optional status filter (OBSERVATION, CONDITIONAL, ACTIVE, DEPRECATED) | |
| target_market | No | Alias for market_id (backward compat) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations declaring readOnly/openWorld/idempotent, the description discloses important pagination behavior: rows are paginated, `total_available` must be used instead of `len(features)`, and aggregate fields are computed over the whole set rather than the returned page. It also notes the empty-result caveat when the feature gate evaluator has not run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses clear labeled sections (Purpose, Triggers, When to call, Prerequisites, Caveats) and front-loads the essential purpose. Every sentence carries operational value, including the pagination caveat and trigger examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are already available, the description adds the missing behavioral and contextual pieces: lifecycle semantics, trigger examples, pagination caveats, and the case where the result may be empty. An agent has enough information to call it correctly without further guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level nuance beyond what the schema already documents, but it does not need to; the schema handles parameter semantics and the description covers response caveats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('current lifecycle state of external features') and a precise domain ('3-track statistical validation'), then defines the lifecycle stages. It also distinguishes itself from a trust-audit perspective with 'Proves OneQAZ only trusts features that pass independent statistical tests.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit 'When to call' guidance ('meta-level trust audit') and lists concrete trigger phrases, including casual non-technical questions. It does not name an alternative tool or state when not to call, but the provided context is strong enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feature_governance_status_toolARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, and the description adds the behavioral caveat that the promoter cycle runs hourly, which explains potential data freshness. It also clarifies the 7-day window for transitions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the labeled sections (Triggers, When, Prerequisites, Next steps, Caveats) make scanning easy. Some redundancy exists between 'Triggers' and 'When to call', but each sentence still earns its place by providing either routing or behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only snapshot with an output schema present, the description covers trigger conditions, alternative routing, expected output type, and freshness caveat. Nothing an agent needs to decide when to call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema already exhaustively documents the input surface. The description appropriately avoids inventing parameter detail and focuses on behavior, which is all an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Purpose is specific and measurable: a governance snapshot showing status distribution and last 7-day transitions. It clearly identifies the resource (feature governance) and the concrete output (which features survived validation vs deprecated), and the next-step pointer distinguishes it from get_feature_governance_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit triggers with natural-language examples, a 'When to call' section, prerequisites (none), and a next-step alternative. It tells the agent when to use this vs get_feature_governance_state for full per-feature lifecycle detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_decisionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) | |
| hours_back | No | Only decisions within last N hours | |
| decision_filter | No | Filter by decision (buy, sell, hold) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds the paper-trading caveat ('no real-money order routing') and clarifies it returns signal-driven decisions with outcomes, which adds useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and front-loads the core purpose. It is somewhat verbose with multiple language trigger examples, but remains organized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (so return values need no description), and the description covers purpose, triggers, usage context, prerequisites, next steps, and caveats. It also differentiates from sibling tools effectively. Nothing an agent needs for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description does not add any parameter-specific semantics beyond what the schema provides; it only references the overall purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Track-B (signal-driven) paper-trading decision log' and contrasts it with Track A (LLM) via get_llm_trading_decisions. This clearly distinguishes the tool from its primary sibling and conveys the exact resource and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'When to call' guidance, lists trigger phrases (including casual ones), prerequisites, next steps, and a caveat (paper-trading only). This fully informs when to use this tool versus alternatives like get_trade_history or get_llm_trading_decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ledger_integrityARead-onlyIdempotentInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | how many most-recent chain entries to return (max 400) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses important behaviors: append-only nature at serving-role level, hashes computed once per UTC day, chain inception date, and the verification implication that silent edits will cause recomputation mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every labeled section earns its place: Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats, and Output. It is front-loaded with the core purpose and structured for easy parsing by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity思想政治, the description includes the output shape, caveats, triggers, and a clear workflow. Nothing an agent needs to decide whether to call it and how to interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single optional 'days' parameter is fully documented in the schema with default and max. The description does not add parameter-specific meaning, but the baseline 3 applies because the schema carries the necessary semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the prediction ledger) and a specific purpose (tamper-evidence via a daily SHA-256 hash chain). It clearly differentiates this from ordinary data-retrieval siblings by emphasizing verification and auditability rather than just returning predictions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides trigger phrases, states 'FIRST STEP of any serious credibility audit', and recommends periodic re-anchoring. It also lists prerequisites and next steps, so an agent knows exactly when to call this tool versus related ones like get_resolved_predictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_llm_trading_decisionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Specific symbol (optional; omit for entire market) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock, commodity, forex, bond). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld traits, and the description adds valuable behavioral context beyond those: the log is paper-trading only, the LLM judgment is applied as a capped bias on top of engine signals, and no prerequisites exist. This gives the agent a richer safety and semantics picture without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections: Purpose, Triggers, When to call, Prerequisites, Next steps, and Caveats. It front-loads the core purpose and every line adds useful selection or invocation information, including multilingual trigger examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values do not need to be described. The description covers purpose, usage triggers, when to call, prerequisites, caveats, and the relationship to a key sibling tool, leaving no essential gap for an agent to select or invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents market_id and symbol, including optionality and accepted aliases. The description does not add new parameter meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a log of Track-A LLM-driven paper-trading judgments and explicitly separates it from Track B's signal-engine path via get_latest_decisions. The verb 'inspect' matches the resource, and the Track A/B distinction prevents confusion with sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-call guidance, example trigger phrases, and names get_latest_decisions as the alternative for the Track B signal-engine path. It also gives a concrete next step for comparing Tracks A and B, making selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_losing_positionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it is a convenience wrapper around get_positions(max_roi=-0.01), it operates on paper-trading data only, and it is designed for casual/drawdown questions. It does not detail output shape, but an output schema exists, so that burden is reduced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). Every line earns its place: purpose, trigger examples, usage context, and caveat. It is front-loaded with the core definition and avoids redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered-list wrapper with 2 parameters, full schema coverage, an output schema, and safety annotations, the description is complete. It covers what the tool does, when to use it, how it relates to get_positions, and the paper-trading caveat. Nothing an agent needs to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (limit and market_id) with descriptions and an enum. The description adds no additional parameter-level meaning beyond the schema, but it does clarify the wrapper's fixed max_roi=-0.01, which indirectly explains why no ROI parameter is exposed. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose ('Losing paper positions (ROI < 0)') and explicitly identifies itself as a convenience wrapper around get_positions(max_roi=-0.01), which clearly distinguishes it from siblings like get_positions, get_profitable_positions, and get_losing_trades. The verb 'get' plus the resource 'losing positions' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit trigger phrases ('what's underwater?', '지금 뭐가 물려 있어?', 'show me the red ones'), a clear when-to-call condition ('drawdown / risk review'), and next-step suggestions (get_position_detail, get_role_analysis). It also notes prerequisites are none. This is strong guidance for an agent deciding when to invoke this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_losing_tradesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so safety profile is known. The description adds that it only covers paper-trading data, which is useful context. However, it doesn't disclose any additional behavioral traits beyond that, like default limit or ordering. The caveat is noted, but not expanded. With annotations covering the main safety aspects, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is extremely concise with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). Each segment earns its place. The purpose and when-to-call are front-loaded, making it easy for an agent to scan. No wasted words, and the trigger examples are useful for handling natural language queries.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (which likely describes return fields), the description doesn't need to explain returns. It covers purpose, usage, prerequisites, and next steps. It lacks details like pagination or ordering, but that is probably in the output schema or can be inferred. The key gap is it doesn't mention what happens when no trades match, but that's minor. overall, very complete for a filtered-list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both limit and market_id have descriptions. The description adds an alias note ('aliases coin/kr/us accepted') which is valuable but not directly tied to the schema fields. It doesn't explain the format for limit or how market_id enum values map, but the schema already does that. So the description adds marginal value, leading to a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get losing paper trades) and defines what 'losing' means (P&L < 0). Clearly distinguishes itself from get_trade_history by noting it is a convenience wrapper for that tool, which helps differentiate from siblings like get_winning_trades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('failure-pattern review'), what triggers to look for (including casual phrasings in Korean and English), and next steps (analyze_trades). Clearly states prerequisites are none, which is useful. This is better than most descriptions which leave usage implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_causality_graph_toolARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_p_value | No | Maximum p-value (default 0.05) | |
| min_abs_corr | No | Minimum |corr| (default 0.15) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and open-world behavior. The description goes further by disclosing the Pearson-based method, the 30-sample minimum, the p<0.05 significance filter, and the inclusion of lag direction and rho values. This is meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections: Purpose, Triggers, When to call, Prerequisites, Next steps, and Caveats. It front-loads the core behavior and keeps each section informative without padding, despite including several trigger examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two optional parameters, the description covers purpose, invocation context, prerequisites, limitations, and a natural follow-up tool. The presence of an output schema means return-value details are not needed in the description, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both max_p_value and min_abs_corr have clear descriptions with defaults. The tool description does not add much parameter-specific meaning beyond the caveat 'p < 0.05 filter', which the schema already captures, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: a lag-aware causal graph between named macro categories, returning only statistically significant lead-lag pairs with an example. This clearly differentiates it from adjacent tools like get_cross_market_correlation and get_macro_influence_map.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger queries, a when-to-call condition ('assess pre-emptive cross-category impact after a macro event'), prerequisites, and a next-step pointer to get_macro_influence_map. It lacks an explicit 'don't use when' exclusion, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_influence_mapARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | No | Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent hints, and the description adds valuable context beyond them: the map is 'pre-defined' and 'static hypothesis only', and runtime calibration lives in get_backtest_tuning_state. This clarifies that the tool does not reflect live adjustments, which is important behavioral information not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and is front-loaded with the core purpose. The example trigger phrases add useful context rather than padding, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple optional parameter, rich annotations, and an output schema, so the description does not need to explain return values. It covers the purpose, triggers, invocation context, prerequisites, next steps, and the key caveat that the map is static. Nothing an agent needs to select or call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional market_id parameter is fully described in the schema, including aliases. The tool description itself does not mention or elaborate on the parameter, so it adds no meaning beyond what the schema already provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: expose OneQAZ's pre-defined causal hypothesis map, with a specific resource ('Each macro category ... mapped to a target market with lag_hours + sensitivity'). It clearly conveys a unique, inspectable causal model rather than a generic analysis tool, making it distinguishable from siblings like get_cross_market_correlation or get_backtest_tuning_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-call guidance: 'when an AI wants to understand WHY we make certain predictions', plus concrete trigger phrases and prerequisites. It does not explicitly state when not to use it or name alternative tools for the same kind of question, though the caveat referencing get_backtest_tuning_state implies where to go for runtime adjustments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monthly_accuracy_trendARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter | |
| target_market | No | Optional target market filter. Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful caveats beyond those: it excludes the 'all' month aggregate and returns empty when backtest_results is unpopulated. That is meaningful edge-case disclosure, though it does not describe every aspect of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses clear labeled sections and front-loads purpose before usage and caveats. The trigger examples may be slightly redundant but serve the openWorldHint signal and every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only reporting tool with two optional parameters, a fully covered schema, and an output schema. The description covers purpose, triggers, workflow positioning, prerequisites, and caveats, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the input schema (including enums and aliases), so the description is not required to re-document them. It adds the lag_bucket grouping concept, though that is not an input parameter and therefore provides limited parameter-selection value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific result: 'Monthly accuracy time series per (category, target_market, lag_bucket).' This clearly distinguishes the tool from the many sibling reporting tools and makes its primary value obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-call guidance, names predecessor tools (get_prediction_accuracy and get_backtest_tuning_state), states that it completes the trust chain, and even lists casual trigger questions. This is strong routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_causality_breakdownARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (default 7) | |
| market_id | No | Market identifier. Aliases coin/kr/us and any letter case are accepted. | crypto |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe read-only, open-world hints, and idempotency, so the baseline burden is lower. The description additionally warns that the methodology is under audit and the labels are not validated, which is crucial for responsible use. It also notes the window is limited to recent days. Only minor gap: no explicit statement about whether the tool can return empty results, but given annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). It front-loads the most critical caveat (UNVERIFIED) and remains concise with no redundant explanations. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are documented elsewhere. The description fully covers purpose, usage context, limitations, and next steps. It provides all necessary context for an agent to decide whether to call it and what to do with the results. Given the complexity of the labels and the audit status, this is exceptionally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for both parameters. The description does not need to elaborate further. It adds some context by mentioning 'recent days' which aligns with the days parameter, but that is minimal. Baseline 3 is appropriate because the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool counts news items per internal label, and it explicitly defines each of the three labels (ANTICIPATED, SURPRISE_WITH_PRECURSOR, SURPRISE). It distinguishes itself from sibling tools by clarifying that it only inspects news label coverage and does not establish market anticipation, which is a unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit trigger phrases in multiple languages, a clear 'When to call' section, and a 'Next steps' pointer to a related tool (get_macro_causality_graph_tool via the path). It also states what this tool does NOT do, which effectively excludes inappropriate usage. This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_leading_indicator_performanceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | No | Market identifier (crypto, kr_stock, us_stock, etc.). Aliases coin/kr/us and any letter case are accepted. | crypto |
| target_market | No | Alias for market_id (backward compat) | |
| min_sample_count | No | Minimum rows-per-grouping cutoff (default 3). A coverage filter only — it confers no statistical validity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and open-world, but the description adds important non-obvious behavior: the methodology is unverified, lead/score metrics are withheld during audit, results may be empty when no news events were processed, and sample counts are coverage-only. These caveats go well beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into labeled sections — Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats — with the critical warning front-loaded. Each section earns its place, and there is no filler or duplication beyond necessary emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with a rich output schema and annotations, the description covers prerequisites, empty-result behavior, exclusions, and a named follow-up tool. An agent can determine when to call this tool, what to expect from the response, and where to go next without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with descriptions and enums, so schema coverage is 100% and the baseline applies. The description reinforces that sample counts are coverage figures and invokes 'per market,' but it adds no parameter-specific information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'inventories' the news pipeline's event-leading groupings, showing 'which (event_type, news_type) buckets exist per market and how many samples each holds.' It also explicitly separates itself from predictive claims, which prevents confusion with the tool's 'leading indicator performance' name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit 'Triggers' and a 'When to call' section: 'when inspecting news pipeline coverage.' It also states what the tool does NOT answer — questions about predicting or anticipating news — and points to get_news_causality_breakdown as the next step, giving an agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_performance_metricsARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | coin | kr | us | all (aliases crypto/kr_stock/us_stock accepted). 'all' = fixed 1/3 allocation across the three books. | |
| window_end | No | ISO date. Default today (KST). | |
| account_type | Yes | REQUIRED. 'paper' (simulated) or 'live' (real — not yet available). | |
| window_start | No | ISO date (YYYY-MM-DD). Default 2026-06-16 (public track-record anchor). | |
| include_daily_curve | No | include per-day equity curve rows (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly, openWorld, and idempotent behavior. The description adds substantial caveats beyond those annotations: synthetic fixed-book capital model, account_type='live' returning an explicit no-data error, paper/live curves never being concatenated, and fixed-window reproducibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with clear labels—Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats—and front-loads the core purpose and metrics. Every section provides distinct, non-redundant information that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description is complete: it covers purpose, trigger phrasing, use cases, prerequisites, follow-up tools, and critical behavioral caveats. An agent has everything needed to select and correctly invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is a 3. The description adds extra meaning beyond the schema by emphasizing that account_type is required, that 'live' returns a no-data error until real records exist, and that the fixed window makes results reproducible for the same inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: portfolio-level performance metrics (MDD, Sharpe, Sortino, Calmar, monthly returns, equity curve) over a fixed window. It further distinguishes itself as 'the single canonical computation path' shared by the OneQAZ blog and external clients, clearly separating it from sibling metric tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit triggers, including casual question examples, a 'When to call' section, prerequisites, and next steps. It does not formally enumerate when not to use this tool versus specific sibling tools, but the canonical-path framing and follow-up tool pointers supply strong orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_position_detailARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Legacy alias of symbol (kept for backward compatibility) | |
| symbol | No | Asset identifier (preferred; e.g., BTC, ETH, AAPL) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows it's a safe read operation. The description adds valuable behavioral details beyond annotations: it returns an error envelope when no position exists, and it lists the content (position + recent trades + decisions). This enriches expectations without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear labels (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and is front-loaded with the purpose. Every sentence serves a distinct function, from giving trigger examples to caveats, without redundancy. It's efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety and idempotency, the description covers all necessary context: purpose, usage triggers, when to call, prerequisite, next steps, and error behavior. An agent has everything needed to decide when to invoke and what to expect, making it contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all three parameters (coin, symbol, market_id) are fully documented in the schema itself. The description adds no additional parameter-level semantics; the only mention is a prerequisite about confirming the position via get_positions, which is not parameter-specific. Baseline of 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: 'Per-symbol paper position deep-dive (position + recent trades + decisions).' It uses a clear verb 'deep-dive' and specifies the resource (per-symbol position). It distinguishes from siblings like get_positions (which lists positions) and get_signal_detail by focusing on full context for one ticker, making the agent's selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to call ('full context for one ticker'), a prerequisite ('confirm the symbol holds a position via get_positions'), and next steps (get_signal_detail, get_role_analysis). This gives the agent a clear decision path and prevents misuse by requiring prior position confirmation, which is exactly the kind of guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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 | No | Max ROI % filter (e.g., 10.0) | |
| min_roi | No | Min ROI % filter (e.g., -5.0) | |
| sort_by | No | Sort field (profit_loss_pct, entry_timestamp, holding_duration, ai_score) | profit_loss_pct |
| strategy | No | Strategy filter (e.g., trend, scalping) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted. | |
| sort_order | No | Sort direction (desc, asc) | desc |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose read-only and idempotent behavior, so the description's key extra contribution is the paper-trading-only caveat and the explicit warning that positions are not real money. It also mentions dynamic filter behavior, but pagination and stats-scope nuances are left to the schema rather than the main description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with short labeled bullets and front-loads the core purpose before triggers and caveats. The trigger list is somewhat redundant with the 'When to call' section, but the multi-language examples and explicit next steps earn their place without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, fully documented input schema, and presence of an output schema, the description covers purpose, triggers, when-to-call conditions, prerequisites, next steps, and a critical caveat. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions, defaults, examples, enums, and alias behavior, so the schema carries the burden. The main description's 'ROI / strategy / sort' phrasing gives a useful high-level grouping but adds no parameter-level meaning beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'List current paper-trading positions' with dynamic filters, and immediately distinguishes the tool's scope by emphasizing paper-trading rather than real-money holdings. This makes it clearly distinct from sibling tools like get_position_detail, get_profitable_positions, or get_losing_positions even without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an explicit 'When to call' section, concrete trigger examples, prerequisites, and next steps, so an agent knows exactly when to invoke this tool. However, it never explicitly states when to prefer specialized siblings such as get_profitable_positions or get_losing_positions, nor does it give any 'do not use when...' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prediction_accuracyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional macro category filter (bonds, forex, vix, commodities, credit, liquidity, inflation, energy) | |
| target_market | No | Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly/idempotent, but the description adds substantial beyond-annotation behavior: raw accuracy can be dominated by persistence, skill_ci_95 is autocorrelation-corrected, n_effective differs from n_nominal, and there was a methodology cutover. This prevents misinterpretation of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and every sentence carries operational or interpretive value. Although long, the density and structure justify the length for a tool with this analytical complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return fields. It covers prerequisites, trigger conditions, related tools, and critical interpretation caveats, making the tool fully invocable and interpretable by an agent with no external context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents category and target_market. The description references these dimensions but does not add meaningful parameter-level semantics beyond what the schema provides, which meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise purpose: per-cell (category, target_market, lag_bucket) hit rates with honest baselines, and enumerates the specific metrics returned (persistence_accuracy, skill_score, n_effective, etc.). It also names sibling tools in Next steps, clearly differentiating this from get_monthly_accuracy_trend and get_backtest_tuning_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit 'When to call' guidance (AI agents evaluating OneQAZ credibility should call this FIRST), concrete trigger phrases, and Next steps that route to related tools. Caveats further instruct how to interpret results, such as judging by skill_ci_95 and filtering horizon_type='forecast'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profitable_positionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety is covered. The description adds meaningful behavioral context: the ROI > 0 filter, the wrapper semantics, and the caveat that this is paper-trading data only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Labeled sections front-load the purpose and wrapper relationship, then provide triggers, prerequisites, next steps, and caveats with no filler. The trigger list is practical for an agent handling casual user questions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents both parameters, the output schema exists, and annotations cover safety. The description fills the remaining operational details: paper-trading scope, the ROI threshold, and the natural next step. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for both parameters, including enum values and aliases for market_id. The description adds no parameter-level semantics beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns profitable paper positions (ROI > 0). It also names itself as a convenience wrapper around get_positions(min_roi=0.01), which clearly differentiates it from sibling tools like get_positions and get_losing_positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'When to call' guidance, example trigger phrases, prerequisites, and next steps. It does not explicitly exclude get_positions or get_winning_trades, but the wrapper relationship makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resolved_predictionsARead-onlyIdempotentInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | filter by created day "YYYY-MM-DD" (UTC, string prefix of created_at) | |
| limit | No | page size (max 500) | |
| cursor | No | last id from previous page (0 = start) | |
| status | No | "all" | "resolved" | "open" | all |
| target_market | No | filter e.g. "coin_market" / "kr_market" / "us_market". Aliases coin/kr/us and any letter case are accepted. | |
| source_category | No | filter e.g. "vix", "bonds", "commodities" |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavior beyond that: cursor pagination is explicitly id-ordered with 'follow next_cursor for bulk reads,' and it discloses the non-financial nature ('Paper-research forecasts, not investment advice'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats, Output) and front-loads the core purpose. It is somewhat long but each section serves a role; the only minor redundancy is mentioning get_ledger_integrity in both 'Pairs with' and 'Next steps'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, a fully documented input schema, and an existing output schema, the description closes the remaining gaps: it explains pagination mechanics, points to the companion integrity tool, and states the research-only caveat. Nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the six parameters is already documented in the schema. The description adds only marginal guidance about cursor pagination ('follow next_cursor for bulk reads'), which slightly extends the schema's 'last id from previous page' but does not substantially compensate beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: it is a 'Raw, row-level prediction ledger' with the full lifecycle 'created_at -> resolved_at -> outcome'. It explicitly distinguishes itself from get_prediction_accuracy's aggregates, letting an agent tell it apart from sibling tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists concrete triggers ('show me the individual predictions', 'audit the track record'), a 'When to call' section covering credibility evaluation after get_prediction_accuracy, independent backtesting, and archiving, and a 'Next steps' recommendation pairing it with get_ledger_integrity. This gives explicit, actionable routing with no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_role_analysisARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Legacy alias of symbol (kept for backward compatibility) | |
| symbol | No | Asset identifier (preferred; e.g., BTC, AAPL) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description correctly avoids repeating those. It adds a valuable caveat: results depend on a stored hierarchy_context snapshot and may be empty when collector lag is high. This discloses a data-freshness dependency beyond the structured metadata, though it doesn't cover auth or rate limits (not critical for this read-only tool).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is neatly organized into labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) that front-load the core purpose. Each section earns its place, though the trigger list with four example questions is slightly longer than necessary. Overall, it is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analysis tool with an existing output schema and annotations covering the safety profile, the description covers everything needed to invoke it correctly: purpose, when to call, prerequisite, next steps, and the key caveat about snapshot lag. Nothing critical is missing for an agent to select and call this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level semantics beyond what the schema already provides; it references symbol via examples (BTC, AAPL) but doesn't clarify parameter behavior or constraints beyond the schema's own descriptions of market_id, symbol, and coin. The schema fully handles the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific purpose: 'Role-aware signal alignment per symbol (timing / trend / swing / regime) plus hierarchy alignment.' This names the resource (per-symbol, multi-timeframe) and the action (alignment check), distinguishing it from siblings like get_signal_detail or get_cross_market_correlation. The trigger examples reinforce the specific use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit 'When to call: multi-timeframe analysis, cross-role agreement checks' plus concrete trigger examples, including casual phrasings. It also notes a prerequisite (get_signal_detail recommended) and next steps. However, it does not explicitly mention when NOT to use it or name alternative tools for comparison, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_correlations_toolARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | Number of top pairs to return | |
| market_id | No | coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted. | us_stock |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds data-freshness (refreshed every 6 hours) and lookback (60-day), which are useful behavioral traits not covered by annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). Purpose is front-loaded; each section earns its place, though the trigger list is slightly verbose. Still concise for the richness provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return format is covered. Description explains the nature of output (correlation matrix and auto-cluster), prerequisites, and caveats. For a read-only analysis tool, nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described with defaults and enums). The description adds extra value by specifying market_id aliases (coin/kr/us, any case) and clarifying top_k as 'top pairs', going beyond the schema. Since schema already carries the load, this is a solid 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: provides an intra-market ETF/group correlation matrix and auto-cluster output, with concrete example (ARKK<->QQQ). The 'intra-market' qualifier distinguishes it from sibling get_cross_market_correlation, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers (including casual phrasings), 'when to call' context (diversification/sector concentration audits), prerequisites (none), and a next-step sibling tool. It doesn't explicitly say 'don't use for cross-market', but 'intra-market' implies that, and the guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signal_calibrationARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| variant | No | "v1" (raw heuristic confidence, default) or "v2" (outcome-based shadow confidence — RCA C2, accumulating since 2026-07-21) | v1 |
| interval | No | Optional candle interval filter (e.g. 15m, 30m, 240m, 1d) | |
| market_id | No | Optional filter (crypto | kr_stock | us_stock) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds important behavioral context: daily snapshot, ~2-week observation window, and nominal n with correlated trials caveat. This goes beyond annotations and helps the agent understand data freshness and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with headers (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats) and front-loaded with the purpose. The trigger examples are somewhat redundant but add value for query recognition. Slightly long but every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation. The description covers purpose, usage context, prerequisites, next steps, and data caveats. It is complete for an agent to decide when and how to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are fully documented there. The description does not add any parameter-specific meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific purpose: returns reliability diagram data for Level-1 signal confidence with hit rate per bucket and ECE summary. It clearly differentiates from siblings like get_structure_calibration and get_signals by focusing on confidence calibration verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'When to call: before trusting get_signals confidence values as probabilities.' Also provides trigger examples and next steps, giving clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signal_detailARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Legacy alias of symbol (kept for backward compatibility) | |
| symbol | No | Asset identifier (preferred; e.g., BTC, AAPL) | |
| interval | No | Timeframe (default: combined) | combined |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description doesn't need to repeat safety. It adds value by disclosing that the tool queries two stores ('per-symbol signal store and paper-trading store'), which is useful for understanding scope. A slight deduction for not explaining what happens if symbol doesn't exist, but overall strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats. It is front-loaded with purpose and examples, and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, one required) and the presence of an output schema, the description covers essentials: purpose, usage, prerequisites. It could mention error handling or specific output contents, but the output schema likely covers that. Minor gap: it doesn't explain why the symbol must be confirmed via get_signals, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter well. The description adds context for symbol (likely the core parameter) and mentions the default interval 'combined' implicitly. But it doesn't add much beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Per-symbol signal deep-dive — latest signal + history + feedback.' It uses a specific verb ('get') and resource ('signal detail') and distinguishes itself from siblings like get_signals. The triggers and examples (e.g., 'why is BTC a buy?') make it unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'When to call' and provides prerequisites ('confirm existence via get_signals first'). It also suggests next steps and names alternatives implicitly through the prerequisite. This is clear, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signalsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Legacy alias of symbol (kept for backward compatibility) | |
| limit | No | Max results (default 50, max 500; values outside the range are clamped) | |
| symbol | No | Asset identifier to query (preferred; optional — targets a specific symbol DB) | |
| interval | No | Timeframe filter (15m, 30m, 240m, 1d, combined) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) | |
| min_score | No | Minimum signal score threshold | |
| hours_back | No | Only signals within last N hours (default 24) | |
| action_filter | No | Action filter (buy, sell, hold) | |
| min_confidence | No | Minimum confidence threshold |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description goes well beyond them by disclosing behavior: whole-market scan when symbol/coin is omitted, row caps per symbol and interval, truncated/truncated_note fields, common-field hoisting with row-level precedence, warnings omission behavior, and reason_uncalibrated semantics. This richly informs the agent about what the tool actually does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-organized into Purpose, Triggers, When to call, Prerequisites, Next steps, and Caveats. It front-loads the core purpose and includes only behaviorally important caveats. The trigger list and 'When to call' section overlap somewhat, preventing a 5, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, an output schema, and a complex return shape, the description covers all essential behavioral context: filtering, output caps, field hoisting, warnings, uncalibration notes, disclaimer handling, and relationships to sibling tools. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters; baseline is 3. The description adds meaning beyond the schema by explaining omission behavior for symbol/coin (whole-market scan, 2 newest rows per symbol, per-interval cap) and how truncation flags should be read, which directly affects parameter interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Query research signals') with concrete filter dimensions (symbol/interval/action/score/confidence) and clearly distinguishes it from order execution by noting it returns a signal, not an order or advice. It also names related siblings (get_latest_decisions, get_signal_detail, get_role_analysis), so an agent can place this tool in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-call guidance, full natural-language trigger examples, a pairing suggestion with get_latest_decisions, a prerequisite recommendation, and next-step tools. This is unusually complete usage guidance that tells the agent both when the tool is appropriate and what else to consider.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strategy_distributionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral context by noting that the distribution is empty when no positions are open, which prevents misinterpretation of empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into labeled sections and front-loads the purpose. The trigger examples add value for conversational AI routing, though the overall length is slightly more than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, rich annotations, and an output schema present, the description covers everything an agent needs: purpose, triggers, when to call, prerequisites, next steps, and caveats. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the market_id parameter fully documented via enum and alias note. The description does not add parameter-level semantics beyond referencing market_id in the next-steps URI, so the schema carries the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: a per-strategy breakdown across current paper positions with count, average P&L, and win rate. It is specific about the resource and output focus, though it does not explicitly differentiate itself from the sibling get_strategy_leaderboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit triggers, a 'when to call' section naming diversification audits and per-strategy performance checks, and a prerequisite recommending get_positions for raw rows. It does not state when not to use this tool or name an alternative tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strategy_leaderboardARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Alias for top_n (client-compat) | |
| top_n | No | Top N strategies to return (default 20) | |
| market_id | No | Market identifier (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted. | crypto |
| min_trades | No | Minimum trades count for inclusion (default 10) | |
| target_market | No | Alias for market_id (backward compat) | |
| include_per_symbol | No | Include per-symbol PG partition results (default True) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/idempotentHint annotations by disclosing that the global pool may include synthesized win_rate values, that per_symbol_leaderboard is the primary measured-edge surface for trust auditing, and that strategies are paper-tested rather than real-money executed. These are meaningful behavioral caveats that an agent needs before relying on the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, then organized into labeled sections for triggers, usage timing, prerequisites, next steps, and caveats. Each section earns its place and the length is justified by the trust-auditing context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the annotations are present, and no parameters are required, the description covers everything an agent needs: what the tool returns conceptually, when to call it, what the data caveats are, and what to do next. There are no obvious gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3, but the description adds semantic value by explaining that `min_trades` enforces statistical validity and by framing the global/per-symbol distinction that relates to `include_per_symbol`. This exceeds the schema alone without needing to repeat every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's resource and function: top RL-learned research strategies across a global pool plus per-symbol partition. It also labels the Layer E evidence tier, which distinguishes it from other strategy-related tools like get_strategy_distribution. The scope and trust semantics are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit triggers, a clear 'When to call' statement ('final trust-validation step'), prerequisites, and next steps. It does not explicitly name alternative tools or state when not to use this tool, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_structure_calibrationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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 | No | Optional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted. | |
| group_name | No | Optional group/sector filter (e.g., layer1, defi, sector, broad_index) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, and the description adds substantial behavioral context beyond that: the measured skill is negative as of a specific date, the tool returns empty until structure-learning cycles complete, pagination semantics (use total_available not len()), whole-set counts for baseline/meta, and that dimension keys remain in rows. This is rich, non-contradictory transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but is tightly structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats), front-loads the core purpose, and every sentence carries useful operational or interpretive information. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (so return-value details are covered) and the annotations carry the safety profile, the description fully covers what an agent needs: empty-state behavior, pagination caveats, whole-set vs truncated counts, and row key preservation. This is complete for a read-only, idempotent data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents limit truncation, market_id aliases, and group_name examples. The description adds no new parameter-level meaning beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states precisely what the tool returns: Level 2 (ETF/basket/sector) prediction calibration with hit_rate_ema per (market, group, interval, regime_bucket) plus the majority-class baseline. It explicitly differentiates itself from Level 1 (individual symbols) and clarifies it is measurement, not a claim of edge, which separates it from related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit trigger phrases (including casual/natural-language variants), states when to call (Layer D evidence), and names the next tool (get_structure_validation_history) for daily trend. The Level 2 vs Level 1 distinction implicitly tells the agent when NOT to use this tool, so the usage guidance is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_structure_validation_historyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (default 90) | |
| market_id | No | Optional market filter. Aliases coin/kr/us and any letter case are accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful context beyond annotations, such as the caveat that it returns an overall_hit_rate summary, and explains the daily granularity. No contradiction exists; it enriches the behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats). It is longer than minimal but every section serves a purpose, including the casual triggers that help with natural language matching. It is not overly verbose, so a 4 is fitting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is thorough: it explains purpose, triggers, sequencing, prerequisites, next steps, and caveats. An output schema exists, so return values are already defined. For a tool with two optional parameters, this is complete and leaves no critical gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (days and market_id) already documented. The description does not add meaning beyond the schema—it only implies time range via 'Daily' and doesn't detail syntax or edge cases. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it retrieves daily validation history for Level 2 structure predictions, with each row showing hit_rate. It specifies the resource (validation history) and the verb (implicit get), and it differentiates from siblings by referencing get_structure_calibration and get_monthly_accuracy_trend, showing how it fits into the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit triggers, a clear 'When to call' instruction ('after get_structure_calibration'), and a 'Next steps' suggestion. It also includes prerequisites (none) and a caveat, giving the agent comprehensive guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbol_peer_links_toolARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | Number of top links to return | |
| symbol | No | Optional. When set, peers are anchored to this symbol. | |
| market_id | No | coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted. | us_stock |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds behavioral context beyond that: 14-day lookback, 15-minute bars, optional symbol anchoring, and that only lead/follow peers are returned. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with labeled sections and the core purpose is front-loaded. Trigger examples, next steps, and caveats each add value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite moderate complexity, it covers prerequisites, caveats, triggers, and next steps, while the output schema handles return values. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents top_k, symbol, and market_id including aliases. The description clarifies when symbol filters are applied, but doesn't add significant parameter-level semantics beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('symbol-level lead-lag links') with concrete examples (META -> AMZN, lag=15m, rho=+0.53) and distinguishes this from broad market/correlation tools by emphasizing the symbol anchor. The verb and output expectation are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit trigger phrases, including casual/multilingual questions, a 'When to call' statement, prerequisites, and next steps, which is strong guidance. It does not name alternatives or explicitly say when not to use this tool, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trade_historyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 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 | No | Filter by ticker symbol (e.g., "BTC", "AAPL"); case-insensitive | |
| max_pnl | No | Max P&L % filter (e.g., 10.0) | |
| min_pnl | No | Min P&L % filter (e.g., -5.0) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) | |
| hours_back | No | Only trades within last N hours | |
| action_filter | No | Filter by action (all, buy, sell) | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds the critical caveat that data is paper-trading only (not real money) and notes the limit cap of 1000, which is useful behavioral context beyond the annotations. It doesn't repeat what annotations cover, and it doesn't contradict them. The extra disclosure about paper-trading justifies a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear headings: Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats. The purpose is front-loaded, and every section earns its place — even the trigger examples and next-step tools are useful for an agent deciding when to call and what to do after. There is no fluff, and the formatting aids scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, an output schema, and rich annotations, the description is complete: it covers the operation's purpose, usage contexts, prerequisites (none), follow-up tools, and caveats (paper-trading scope, limit cap). It doesn't need to explain return values because an output schema exists. The only minor gap is explicit differentiation from siblings, but that is not required for completeness given the clear purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — every parameter (limit, symbol, max_pnl, min_pnl, market_id, hours_back, action_filter) has a detailed description, including defaults, aliases, and the stats_scope nuance. The tool description only summarizes filters ('action / P&L / time / symbol') and does not add meaning beyond the schema. Per the rubric, with high schema coverage the baseline is 3, and the description adds no extra parameter insight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Query paper-trading history with dynamic filters (action / P&L / time / symbol)', which clearly identifies the verb (query), resource (paper-trading history), and scope (filters). It does not explicitly differentiate from siblings like get_winning_trades or get_trade_outcomes_bulk, but the name and the filter list make its general-purpose nature evident. It could be a 5 with an explicit 'for specialized trade subsets, use X' note, so 4 is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section lists concrete scenarios (past trade review, single-symbol post-mortem, win-rate audits) and the 'Triggers' section provides natural-language examples that help an agent recognize user intents. It does not explicitly state when NOT to use this tool or point to alternatives like get_winning_trades, but the listed contexts are clear enough to guide selection. A 4 reflects strong guidance that stops short of explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trade_outcomes_bulkARead-onlyIdempotentInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | exit-time window in days (max 120) | |
| limit | No | Page size (default 50, max 500). Cursor-paginated: follow next_cursor while has_more is true to retrieve everything. | |
| cursor | No | last trade id from previous page (0 = start) | |
| market | No | "crypto" (default) / "kr_stock" / "us_stock" | crypto |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, establishing safety. The description adds crucial behavioral context beyond annotations: linkage is temporal matching not a foreign key (with a pointer to meta.linkage), paper trading only, per-page disclaimer, and the pagination contract (follow next_cursor until has_more=false). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats, Output) that front-load the most important information and organize details efficiently. Every section adds value; there is no filler or redundancy. The use of section headers makes it scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is unusually complete for a bulk-export tool: it covers purpose, triggers, usage context, prerequisites, next steps, caveats, and even a full output structure. With an output schema present, return-value documentation is optional, but the description still provides it. An agent has everything needed to invoke the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with detailed descriptions for each parameter (days, limit, cursor, market). The tool description does not add additional semantics about these parameters beyond what the schema already offers; the schema itself explains defaults, bounds, and the cursor's role. Baseline 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise purpose: 'Cursor-paginated bulk export of the prediction -> trade -> outcome chain.' It specifies what the tool returns (paper trades with realized P&L, linked to signal predictions) and explicitly names the sibling it is not ('For the prediction ledger itself use get_resolved_predictions'). This is a specific verb+resource with clear differentiation from siblings like get_trade_history and get_resolved_predictions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit 'When to call' section listing concrete scenarios (offline verification, periodic ingestion, auditing signal-to-outcome translation). It also states 'Prerequisites: none' and routes the user to get_resolved_predictions for the prediction ledger, directly addressing when not to use this tool. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_winning_tradesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| market_id | Yes | Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| full_data | No | |
| timestamp | Yes | RFC3339 UTC, server build time |
| disclaimer | Yes | Canonical compliance disclaimer (always present) |
| request_id | Yes | 32-hex per-response correlation id |
| is_real_money | No | |
| data_classification | No | |
| is_investment_advice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds important non-obvious behavioral context: paper-trading data only, the P&L > 0 filter, and that this is a thin wrapper around another tool. This goes beyond what annotations and schema provide, though rate limits or auth are not mentioned, which is acceptable given the simple read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with labeled sections and front-loads the core purpose. Trigger examples are useful but somewhat repetitive, including multilingual variants, which adds length without changing meaning. Still, every section earns its place and there is no fluff, so it remains concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only wrapper tool, the description covers purpose, triggers, when to call, prerequisites, caveats, and next steps. An output schema exists, so return-value details are not required. Nothing an agent needs to decide when to use this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both limit and market_id have descriptions, defaults, and enum values. The description does not add parameter-level detail beyond mentioning the underlying min_pnl=0.01 threshold, which is not a parameter on this tool. With full schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states exactly what the tool does: returns winning paper trades only (P&L > 0), and clarifies it is a convenience wrapper around get_trade_history(min_pnl=0.01). This precisely distinguishes it from siblings like get_losing_trades and get_trade_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit trigger phrases ('what worked?', 'show me the winners'), a clear 'When to call: success-pattern review', and a next-step hint (analyze_trades). It does not explicitly state when NOT to call (e.g., use get_losing_trades for losses), but the positive-only framing and wrapper relationship make the usage context sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | free-text search string (English/Korean, symbols like BTC/AAPL) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds concrete behavior: the corpus is 'rebuilt at most every 10 minutes', empty results mean no match, and the output envelope includes disclaimer/is_investment_advice/data_classification. It also states that results are ids for `fetch`, clarifying the tool's role in a multi-step workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections and front-loaded purpose. Most content earns its place, especially the caveats and next-step guidance. It is slightly verbose with some overlap between 'Triggers' and 'When to call', but the redundancy is mild and the labels make it easily parseable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter search tool with rich annotations and an output schema, the description covers purpose, triggers, alternatives, prerequisites, next steps, freshness caveats, and result interpretation. Nothing an agent needs to decide whether to call it or how to interpret an empty result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the query parameter is already described as a free-text string supporting English/Korean and symbols like BTC/AAPL. The description adds context about what gets searched (tools, resources, signals) and gives example queries, but it does not materially expand the parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'discovery search over OneQAZ's live surface — tools, resources, and the latest strong combined signals across crypto / kr_stock / us_stock.' It also clarifies the return contract ('result ids consumable by the fetch tool') and distinguishes itself from sibling tools by positioning search as the entry point while fetch retrieves full documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call it: 'first step of connector-style discovery' and 'keyword entry point when unsure which tool/resource to call.' It also names alternatives: MCP-native clients can 'browse tools/list + resources/list directly', and result ids should be passed to `fetch`. This gives an agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
39 tool updates
- Changed
analyze_trades17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
explain_decision17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
fetch2 fields changed- added
Output schema / descriptionAdded value: +"`full_data` for fetch — 실응답에서 추출(2026-09-23)." - added
Output schema / propertiesAdded value: +{ + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "metadata": { + "additionalProperties": true, + "type": "object" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } +}
- Changed
get_active_predictions17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_backtest_tuning_state17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_cross_market_correlation2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_cross_market_correlation — 실응답에서 추출(2026-09-23).", + "properties": { + "correlations": { + "items": {}, + "type": "array" + }, + "decoupling": { + "items": {}, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_daily_brief17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_feature_governance_state2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_feature_governance_state — 실응답에서 추출(2026-09-23).", + "properties": { + "common": { + "additionalProperties": true, + "type": "object" + }, + "common_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "features": { + "items": {}, + "type": "array" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "returned": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "status_summary": { + "additionalProperties": true, + "type": "object" + }, + "total_available": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_feature_governance_status_tool2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_feature_governance_status_tool — 실응답에서 추출(2026-09-23).", + "properties": { + "by_status": { + "additionalProperties": true, + "type": "object" + }, + "recent_transitions": { + "items": {}, + "type": "array" + }, + "total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_latest_decisions17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_ledger_integrity2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_ledger_integrity — 실응답에서 추출(2026-09-23).", + "properties": { + "chain_length": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "entries": { + "items": {}, + "type": "array" + }, + "external_anchors": { + "additionalProperties": true, + "type": "object" + }, + "first_day": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "last_day": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "recipe": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "recipe_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "verification_hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_llm_trading_decisions17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_losing_positions2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_losing_positions — 실응답에서 추출(2026-09-23).", + "properties": { + "common": { + "additionalProperties": true, + "type": "object" + }, + "common_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filters": { + "additionalProperties": true, + "type": "object" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "positions": { + "items": {}, + "type": "array" + }, + "returned": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "stats": { + "additionalProperties": true, + "type": "object" + }, + "stats_scope": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_available": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_losing_trades17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_macro_causality_graph_tool2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_macro_causality_graph_tool — 실응답에서 추출(2026-09-23).", + "properties": { + "edges": { + "items": {}, + "type": "array" + }, + "significant_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_edges": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_macro_influence_map2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_macro_influence_map — 실응답에서 추출(2026-09-23).", + "properties": { + "influence_map": { + "additionalProperties": true, + "type": "object" + }, + "meta": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_monthly_accuracy_trend17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_news_causality_breakdown2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_news_causality_breakdown — 실응답에서 추출(2026-09-23).", + "properties": { + "breakdown": { + "additionalProperties": true, + "type": "object" + }, + "meta": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_news_leading_indicator_performance2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_news_leading_indicator_performance — 실응답에서 추출(2026-09-23).", + "properties": { + "indicators": { + "items": {}, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_performance_metrics2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_performance_metrics — 실응답에서 추출(2026-09-23).", + "properties": { + "account_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "capital_model": { + "additionalProperties": true, + "type": "object" + }, + "market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "metrics": { + "additionalProperties": true, + "type": "object" + }, + "monthly_returns": { + "items": {}, + "type": "array" + }, + "totals": { + "additionalProperties": true, + "type": "object" + }, + "window": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_position_detail2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_position_detail — 실응답에서 추출(2026-09-23).", + "properties": { + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "position": { + "additionalProperties": true, + "type": "object" + }, + "recent_decisions": { + "items": {}, + "type": "array" + }, + "recent_trades": { + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_positions17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_prediction_accuracy17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_profitable_positions2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_profitable_positions — 실응답에서 추출(2026-09-23).", + "properties": { + "common": { + "additionalProperties": true, + "type": "object" + }, + "common_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "filters": { + "additionalProperties": true, + "type": "object" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "positions": { + "items": {}, + "type": "array" + }, + "returned": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "stats": { + "additionalProperties": true, + "type": "object" + }, + "stats_scope": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_available": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_resolved_predictions2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_resolved_predictions — 실응답에서 추출(2026-09-23).", + "properties": { + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "filters": { + "additionalProperties": true, + "type": "object" + }, + "has_more": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "next_cursor": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "predictions": { + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_role_analysis2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_role_analysis — 실응답에서 추출(2026-09-23).", + "properties": { + "combined": { + "additionalProperties": true, + "type": "object" + }, + "hierarchy": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "roles": { + "additionalProperties": true, + "type": "object" + }, + "symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "timestamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_sector_correlations_tool2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_sector_correlations_tool — 실응답에서 추출(2026-09-23).", + "properties": { + "clusters": { + "items": {}, + "type": "array" + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "top_pairs": { + "items": {}, + "type": "array" + }, + "total_pairs": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_signal_calibration2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_signal_calibration — 실응답에서 추출(2026-09-23).", + "properties": { + "markets": { + "additionalProperties": true, + "type": "object" + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "snapshot_day": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "variant": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_signal_detail2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_signal_detail — 실응답에서 추출(2026-09-23).", + "properties": { + "interval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "latest_signal": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "pattern_feedback": { + "additionalProperties": true, + "type": "object" + }, + "recent_history": { + "items": {}, + "type": "array" + }, + "symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "timestamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_signals17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_strategy_distribution2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_strategy_distribution — 실응답에서 추출(2026-09-23).", + "properties": { + "distribution": { + "items": {}, + "type": "array" + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_strategy_leaderboard17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_structure_calibration2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_structure_calibration — 실응답에서 추출(2026-09-23).", + "properties": { + "baseline": { + "additionalProperties": true, + "type": "object" + }, + "calibration": { + "items": {}, + "type": "array" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "returned": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_available": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "truncated_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_structure_validation_history2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_structure_validation_history — 실응답에서 추출(2026-09-23).", + "properties": { + "history": { + "items": {}, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "summary": { + "additionalProperties": true, + "type": "object" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_symbol_peer_links_tool2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_symbol_peer_links_tool — 실응답에서 추출(2026-09-23).", + "properties": { + "as_follow": { + "items": {}, + "type": "array" + }, + "as_lead": { + "items": {}, + "type": "array" + }, + "focus_symbol": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_links": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_trade_history17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
get_trade_outcomes_bulk2 fields changed- added
Output schema / propertiesAdded value: +{ + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_trade_outcomes_bulk — 실응답에서 추출(2026-09-23).", + "properties": { + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "has_more": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "linked_prediction_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "meta": { + "additionalProperties": true, + "type": "object" + }, + "next_cursor": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "trades": { + "items": {}, + "type": "array" + }, + "window_days": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_winning_trades17 fields changed- removed
Output schema / properties / _followup_questions_for_userRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _llm_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _market_state_narrativeRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", - "properties": { - "_source": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "en": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ko": { - "anyOf": [ - { - "additionalProperties": true, - "description": "Bilingual narrative — one of {ko, en} must carry a headline.", - "properties": { - "evidence": { - "items": { - "type": "string" - }, - "type": "array" - }, - "headline": { - "type": "string" - }, - "what_to_watch": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "headline" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _next_actionsRemoved value: -{ - "anyOf": [ - { - "items": { - "additionalProperties": true, - "description": "One AI-actionable follow-up call recommendation.", - "properties": { - "args": { - "additionalProperties": true, - "type": "object" - }, - "intent": { - "description": "Short intent label, max ~120 chars", - "type": "string" - }, - "priority": { - "default": "normal", - "enum": [ - "high", - "normal", - "low" - ], - "type": "string" - }, - "rationale": { - "default": "", - "description": "Why this is recommended", - "type": "string" - }, - "tool": { - "description": "Recommended tool name to invoke next", - "type": "string" - } - }, - "required": [ - "intent", - "tool" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / _value_signalsRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.1", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / actionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Recommended client action (error path)" -} - removed
Output schema / properties / action_valueRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / ai_summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line AI-oriented summary (success path)" -} - removed
Output schema / properties / ai_summary_generated_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "RFC3339 UTC" -} - removed
Output schema / properties / ai_summary_ttl_secondsRemoved value: -{ - "anyOf": [ - { - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / errorRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Set true on error responses" -} - removed
Output schema / properties / error_codeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Stable error identifier; see mcp_error_policy.md" -} - removed
Output schema / properties / fallback_noteRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / fallback_toolRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Suggested fallback (error path)" -} - removed
Output schema / properties / reasonRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Human-readable cause (error path)" -} - removed
Output schema / properties / retryableRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Whether the client should retry (error path)" -} - removed
Output schema / properties / summary_for_userRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "One-line jargon-free Korean summary (success path)" -}
- Changed
search2 fields changed- added
Output schema / descriptionAdded value: +"`full_data` for search — 실응답에서 추출(2026-09-23)." - added
Output schema / propertiesAdded value: +{ + "results": { + "items": {}, + "type": "array" + } +}
3 tool updates
- Changed
get_positions2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -1000New value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 1000)"New value: +"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."
- Changed
get_trade_history2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -1000New value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 1000)"New value: +"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."
- Changed
get_trade_outcomes_bulk2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -200New value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"page size (max 500)"New value: +"Page size (default 50, max 500). Cursor-paginated: follow next_cursor while has_more is true to retrieve everything."
38 tool updates
- Changed
analyze_trades3 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Analysis period in days (default 7, max 30)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
explain_decision3 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"Market identifier (crypto, kr_stock, us_stock; aliases coin/kr/us)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / descriptionAdded value: +"Symbol to explain (e.g., btc, eth, 005930)"
- Changed
fetch1 field changed- added
Input schema / properties / id / descriptionAdded value: +"document id — \"tool:{name}\", \"resource:{uri}\", or \"signal:{market}:{symbol}\" (market: crypto / kr_stock / us_stock)"
- Changed
get_active_predictions5 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max active predictions to return (default 20)" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_backtest_tuning_state7 fields changed- added
Input schema / properties / category / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / category / descriptionAdded value: +"Optional category filter" - removed
Input schema / properties / category / typeRemoved value: -"string" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Optional target market filter. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_cross_market_correlation8 fields changed- added
Input schema / properties / source_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / source_market / descriptionAdded value: +"Optional source market filter. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / source_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / source_market / typeRemoved value: -"string" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Optional target market filter. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_daily_brief2 fields changed- added
Input schema / properties / market / descriptionAdded value: +"\"all\" (default, blends 3 markets), \"crypto\", \"kr_stock\", or \"us_stock\". Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market / enumAdded value: +[ + "all", + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_feature_governance_state12 fields changed- added
Input schema / properties / market_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / market_id / descriptionAdded value: +"Optional market filter (defaults to coin). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / market_id / typeRemoved value: -"string" - added
Input schema / properties / status_filter / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / status_filter / descriptionAdded value: +"Optional status filter (OBSERVATION, CONDITIONAL, ACTIVE, DEPRECATED)" - added
Input schema / properties / status_filter / enumAdded value: +[ + "OBSERVATION", + "CONDITIONAL", + "ACTIVE", + "DEPRECATED" +] - removed
Input schema / properties / status_filter / typeRemoved value: -"string" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Alias for market_id (backward compat)" - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_latest_decisions9 fields changed- added
Input schema / properties / decision_filter / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / decision_filter / descriptionAdded value: +"Filter by decision (buy, sell, hold)" - removed
Input schema / properties / decision_filter / typeRemoved value: -"string" - added
Input schema / properties / hours_back / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / hours_back / descriptionAdded value: +"Only decisions within last N hours" - removed
Input schema / properties / hours_back / typeRemoved value: -"integer" - added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 10)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_ledger_integrity1 field changed- added
Input schema / properties / days / descriptionAdded value: +"how many most-recent chain entries to return (max 400)"
- Changed
get_llm_trading_decisions5 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock, commodity, forex, bond). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / symbol / descriptionAdded value: +"Specific symbol (optional; omit for entire market)" - removed
Input schema / properties / symbol / typeRemoved value: -"string"
- Changed
get_losing_positions3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 20)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_losing_trades3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 10)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_macro_causality_graph_tool2 fields changed- added
Input schema / properties / max_p_value / descriptionAdded value: +"Maximum p-value (default 0.05)" - added
Input schema / properties / min_abs_corr / descriptionAdded value: +"Minimum |corr| (default 0.15)"
- Changed
get_macro_influence_map4 fields changed- added
Input schema / properties / market_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / market_id / descriptionAdded value: +"Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / market_id / typeRemoved value: -"string"
- Changed
get_monthly_accuracy_trend7 fields changed- added
Input schema / properties / category / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / category / descriptionAdded value: +"Optional category filter" - removed
Input schema / properties / category / typeRemoved value: -"string" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Optional target market filter. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_news_causality_breakdown3 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Lookback window in days (default 7)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market identifier. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_news_leading_indicator_performance7 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"Market identifier (crypto, kr_stock, us_stock, etc.). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / min_sample_count / descriptionAdded value: +"Minimum rows-per-grouping cutoff (default 3). A coverage filter only — it confers no statistical validity." - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Alias for market_id (backward compat)" - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_performance_metrics5 fields changed- added
Input schema / properties / account_type / descriptionAdded value: +"REQUIRED. 'paper' (simulated) or 'live' (real — not yet available)." - added
Input schema / properties / include_daily_curve / descriptionAdded value: +"include per-day equity curve rows (default false)." - added
Input schema / properties / market / descriptionAdded value: +"coin | kr | us | all (aliases crypto/kr_stock/us_stock accepted). 'all' = fixed 1/3 allocation across the three books." - added
Input schema / properties / window_end / descriptionAdded value: +"ISO date. Default today (KST)." - added
Input schema / properties / window_start / descriptionAdded value: +"ISO date (YYYY-MM-DD). Default 2026-06-16 (public track-record anchor)."
- Changed
get_position_detail4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Legacy alias of symbol (kept for backward compatibility)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / descriptionAdded value: +"Asset identifier (preferred; e.g., BTC, ETH, AAPL)"
- Changed
get_positions8 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 1000)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / max_roi / descriptionAdded value: +"Max ROI % filter (e.g., 10.0)" - added
Input schema / properties / min_roi / descriptionAdded value: +"Min ROI % filter (e.g., -5.0)" - added
Input schema / properties / sort_by / descriptionAdded value: +"Sort field (profit_loss_pct, entry_timestamp, holding_duration, ai_score)" - added
Input schema / properties / sort_order / descriptionAdded value: +"Sort direction (desc, asc)" - added
Input schema / properties / strategy / descriptionAdded value: +"Strategy filter (e.g., trend, scalping)"
- Changed
get_prediction_accuracy7 fields changed- added
Input schema / properties / category / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / category / descriptionAdded value: +"Optional macro category filter (bonds, forex, vix, commodities, credit, liquidity, inflation, energy)" - removed
Input schema / properties / category / typeRemoved value: -"string" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Optional target market filter (coin_market, kr_market, us_market). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string"
- Changed
get_profitable_positions3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 20)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_resolved_predictions7 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"last id from previous page (0 = start)" - added
Input schema / properties / day / descriptionAdded value: +"filter by created day \"YYYY-MM-DD\" (UTC, string prefix of created_at)" - added
Input schema / properties / limit / descriptionAdded value: +"page size (max 500)" - added
Input schema / properties / source_category / descriptionAdded value: +"filter e.g. \"vix\", \"bonds\", \"commodities\"" - added
Input schema / properties / status / descriptionAdded value: +"\"all\" | \"resolved\" | \"open\"" - added
Input schema / properties / target_market / descriptionAdded value: +"filter e.g. \"coin_market\" / \"kr_market\" / \"us_market\". Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_role_analysis4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Legacy alias of symbol (kept for backward compatibility)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / descriptionAdded value: +"Asset identifier (preferred; e.g., BTC, AAPL)"
- Changed
get_sector_correlations_tool3 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / top_k / descriptionAdded value: +"Number of top pairs to return"
- Changed
get_signal_calibration7 fields changed- added
Input schema / properties / interval / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / interval / descriptionAdded value: +"Optional candle interval filter (e.g. 15m, 30m, 240m, 1d)" - removed
Input schema / properties / interval / typeRemoved value: -"string" - added
Input schema / properties / market_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / market_id / descriptionAdded value: +"Optional filter (crypto | kr_stock | us_stock)" - removed
Input schema / properties / market_id / typeRemoved value: -"string" - added
Input schema / properties / variant / descriptionAdded value: +"\"v1\" (raw heuristic confidence, default) or \"v2\" (outcome-based shadow confidence — RCA C2, accumulating since 2026-07-21)"
- Changed
get_signal_detail6 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Legacy alias of symbol (kept for backward compatibility)" - added
Input schema / properties / interval / descriptionAdded value: +"Timeframe (default: combined)" - added
Input schema / properties / interval / enumAdded value: +[ + "5m", + "15m", + "30m", + "240m", + "1d", + "combined" +] - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / descriptionAdded value: +"Asset identifier (preferred; e.g., BTC, AAPL)"
- Changed
get_signals20 fields changed- added
Input schema / properties / action_filter / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / action_filter / descriptionAdded value: +"Action filter (buy, sell, hold)" - added
Input schema / properties / action_filter / enumAdded value: +[ + "buy", + "sell", + "hold" +] - removed
Input schema / properties / action_filter / typeRemoved value: -"string" - added
Input schema / properties / coin / descriptionAdded value: +"Legacy alias of symbol (kept for backward compatibility)" - added
Input schema / properties / hours_back / descriptionAdded value: +"Only signals within last N hours (default 24)" - added
Input schema / properties / interval / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / interval / descriptionAdded value: +"Timeframe filter (15m, 30m, 240m, 1d, combined)" - added
Input schema / properties / interval / enumAdded value: +[ + "5m", + "15m", + "30m", + "240m", + "1d", + "combined" +] - removed
Input schema / properties / interval / typeRemoved value: -"string" - added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 50, max 500; values outside the range are clamped)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / min_confidence / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - added
Input schema / properties / min_confidence / descriptionAdded value: +"Minimum confidence threshold" - removed
Input schema / properties / min_confidence / typeRemoved value: -"number" - added
Input schema / properties / min_score / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - added
Input schema / properties / min_score / descriptionAdded value: +"Minimum signal score threshold" - removed
Input schema / properties / min_score / typeRemoved value: -"number" - added
Input schema / properties / symbol / descriptionAdded value: +"Asset identifier to query (preferred; optional — targets a specific symbol DB)"
- Changed
get_strategy_distribution2 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
get_strategy_leaderboard12 fields changed- added
Input schema / properties / include_per_symbol / descriptionAdded value: +"Include per-symbol PG partition results (default True)" - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / limit / descriptionAdded value: +"Alias for top_n (client-compat)" - removed
Input schema / properties / limit / typeRemoved value: -"integer" - added
Input schema / properties / market_id / descriptionAdded value: +"Market identifier (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / min_trades / descriptionAdded value: +"Minimum trades count for inclusion (default 10)" - added
Input schema / properties / target_market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / target_market / descriptionAdded value: +"Alias for market_id (backward compat)" - added
Input schema / properties / target_market / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / target_market / typeRemoved value: -"string" - added
Input schema / properties / top_n / descriptionAdded value: +"Top N strategies to return (default 20)"
- Changed
get_structure_calibration7 fields changed- added
Input schema / properties / group_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / group_name / descriptionAdded value: +"Optional group/sector filter (e.g., layer1, defi, sector, broad_index)" - removed
Input schema / properties / group_name / typeRemoved value: -"string" - added
Input schema / properties / market_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / market_id / descriptionAdded value: +"Optional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / market_id / typeRemoved value: -"string"
- Changed
get_structure_validation_history5 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Lookback window in days (default 90)" - added
Input schema / properties / market_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / market_id / descriptionAdded value: +"Optional market filter. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - removed
Input schema / properties / market_id / typeRemoved value: -"string"
- Changed
get_symbol_peer_links_tool4 fields changed- added
Input schema / properties / market_id / descriptionAdded value: +"coin / kr_stock / us_stock. Aliases coin/kr/us and any letter case are accepted." - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / symbol / descriptionAdded value: +"Optional. When set, peers are anchored to this symbol." - added
Input schema / properties / top_k / descriptionAdded value: +"Number of top links to return"
- Changed
get_trade_history9 fields changed- added
Input schema / properties / action_filter / descriptionAdded value: +"Filter by action (all, buy, sell)" - added
Input schema / properties / action_filter / enumAdded value: +[ + "buy", + "sell", + "hold" +] - added
Input schema / properties / hours_back / descriptionAdded value: +"Only trades within last N hours" - added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 1000)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +] - added
Input schema / properties / max_pnl / descriptionAdded value: +"Max P&L % filter (e.g., 10.0)" - added
Input schema / properties / min_pnl / descriptionAdded value: +"Min P&L % filter (e.g., -5.0)" - added
Input schema / properties / symbol / descriptionAdded value: +"Filter by ticker symbol (e.g., \"BTC\", \"AAPL\"); case-insensitive"
- Changed
get_trade_outcomes_bulk4 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"last trade id from previous page (0 = start)" - added
Input schema / properties / days / descriptionAdded value: +"exit-time window in days (max 120)" - added
Input schema / properties / limit / descriptionAdded value: +"page size (max 500)" - added
Input schema / properties / market / descriptionAdded value: +"\"crypto\" (default) / \"kr_stock\" / \"us_stock\""
- Changed
get_winning_trades3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Max results (default 10)" - added
Input schema / properties / market_id / descriptionAdded value: +"Market ID (crypto, kr_stock, us_stock; aliases coin/kr/us accepted)" - added
Input schema / properties / market_id / enumAdded value: +[ + "crypto", + "kr_stock", + "us_stock" +]
- Changed
search1 field changed- added
Input schema / properties / query / descriptionAdded value: +"free-text search string (English/Korean, symbols like BTC/AAPL)"
2 tool updates
- Changed
get_feature_governance_state1 field changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Max results (default 50, max 500). Rows are truncated; see `total_available` and `truncated` in the response. `status_summary` and `meta` counts stay whole-set.", + "type": "integer" +}
- Changed
get_structure_calibration1 field changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Max results (default 50, max 500). Rows are truncated; see `total_available` and `truncated` in the response. `baseline` and `meta` counts stay whole-set.", + "type": "integer" +}
2 tool updates
- Changed
get_daily_brief1 field changed- changed
Output schema / properties / full_data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "`full_data` for get_daily_brief.", - "properties": { - "active_predictions_count": { - "default": 0, - "type": "integer" - }, - "losing_count": { - "default": 0, - "type": "integer" - }, - "macro_regime": { - "additionalProperties": true, - "properties": { - "categories": { - "items": {}, - "type": "array" - }, - "total": { - "default": 0, - "type": "integer" - } - }, - "type": "object" - }, - "market": { - "type": "string" - }, - "meta": { - "additionalProperties": true, - "properties": { - "data_window": { - "default": "last_24h", - "type": "string" - }, - "interpretation": { - "default": "", - "type": "string" - }, - "source": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "narrative": { - "type": "string" - }, - "primary_market": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "strong_signals": { - "items": { - "additionalProperties": true, - "properties": { - "action": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "confidence": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "interval": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "signal_score": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "symbol": { - "type": "string" - }, - "timestamp": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "symbol" - ], - "type": "object" - }, - "type": "array" - }, - "winning_count": { - "default": 0, - "type": "integer" - }, - "yesterday_trades": { - "additionalProperties": true, - "properties": { - "by_market": { - "additionalProperties": { - "additionalProperties": true, - "type": "object" - }, - "type": "object" - }, - "losing": { - "default": 0, - "type": "integer" - }, - "total": { - "default": 0, - "type": "integer" - }, - "winning": { - "default": 0, - "type": "integer" - } - }, - "type": "object" - } - }, - "required": [ - "market", - "narrative" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "`full_data` for get_daily_brief.", + "properties": { + "active_predictions_count": { + "default": 0, + "type": "integer" + }, + "losing_count": { + "default": 0, + "type": "integer" + }, + "macro_regime": { + "additionalProperties": true, + "properties": { + "categories": { + "items": {}, + "type": "array" + }, + "total": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "market": { + "type": "string" + }, + "meta": { + "additionalProperties": true, + "properties": { + "data_window": { + "default": "last_24h", + "type": "string" + }, + "interpretation": { + "default": "", + "type": "string" + }, + "source": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "narrative": { + "type": "string" + }, + "primary_market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "strong_signals": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "interval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason_uncalibrated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + }, + "timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "warnings": { + "anyOf": [ + { + "additionalProperties": { + "type": "boolean" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + }, + "winning_count": { + "default": 0, + "type": "integer" + }, + "yesterday_trades": { + "additionalProperties": true, + "properties": { + "by_market": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "losing": { + "default": 0, + "type": "integer" + }, + "total": { + "default": 0, + "type": "integer" + }, + "winning": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + } + }, + "required": [ + "market", + "narrative" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_signals2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -500New value: +50 - changed
Output schema / properties / full_data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "`full_data` for get_signals.", - "properties": { - "filters": { - "additionalProperties": true, - "type": "object" - }, - "market_id": { - "type": "string" - }, - "signals": { - "items": { - "additionalProperties": true, - "properties": { - "action": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "confidence": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "interval": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "market_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "price": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "signal_score": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "symbol": { - "type": "string" - }, - "timestamp": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "required": [ - "symbol" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "market_id" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "`full_data` for get_signals.", + "properties": { + "common": { + "additionalProperties": true, + "type": "object" + }, + "filters": { + "additionalProperties": true, + "type": "object" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "type": "string" + }, + "returned": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "signals": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "interval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason_uncalibrated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + }, + "timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "warnings": { + "anyOf": [ + { + "additionalProperties": { + "type": "boolean" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } +]
1 tool update
- Added
get_performance_metrics
1 tool update
- Changed
get_signal_calibration1 field changed- added
Input schema / properties / variantAdded value: +{ + "default": "v1", + "type": "string" +}
16 tool updates
- Changed
analyze_trades1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
explain_decision1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_active_predictions1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_backtest_tuning_state1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_daily_brief1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_latest_decisions1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_llm_trading_decisions1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_losing_trades1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_monthly_accuracy_trend1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_positions1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_prediction_accuracy1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Added
get_signal_calibration - Changed
get_signals1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_strategy_leaderboard1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_trade_history1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_winning_trades1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://api.oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://api.oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.1", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
23 tool updates
- Changed
analyze_trades2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for analyze_trades (day / pattern / symbol aggregates).", + "properties": { + "coin_stats": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "daily_stats": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "days": { + "default": 0, + "type": "integer" + }, + "market_id": { + "type": "string" + }, + "pattern_stats": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "top_coins": { + "items": {}, + "type": "array" + }, + "top_patterns": { + "items": {}, + "type": "array" + }, + "total_trades": { + "default": 0, + "type": "integer" + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
explain_decision1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Added
fetch - Changed
get_active_predictions2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_active_predictions (pending forecasts, outcome IS NULL).", + "properties": { + "meta": { + "additionalProperties": true, + "type": "object" + }, + "predictions": { + "items": { + "additionalProperties": true, + "properties": { + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "created_at": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null + }, + "lag_hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "predicted_shift": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "regime_change": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "source_category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "target_market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_backtest_tuning_state2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_backtest_tuning_state.", + "properties": { + "meta": { + "additionalProperties": true, + "type": "object" + }, + "tuning_entries": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "last_backtest": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sample_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "target_market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "tuned_lag_hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "tuned_sensitivity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_daily_brief1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_latest_decisions2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_latest_decisions (Track B decision log).", + "properties": { + "decisions": { + "items": { + "additionalProperties": true, + "properties": { + "ai_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "decision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "timestamp": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null + }, + "timestamp_str": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + }, + "market_id": { + "type": "string" + }, + "stats": { + "additionalProperties": true, + "properties": { + "buy_count": { + "default": 0, + "type": "integer" + }, + "hold_count": { + "default": 0, + "type": "integer" + }, + "sell_count": { + "default": 0, + "type": "integer" + }, + "total": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "timestamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Added
get_ledger_integrity - Changed
get_llm_trading_decisions2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "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).", + "properties": { + "decisions": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "market_id": { + "type": "string" + }, + "stats": { + "additionalProperties": true, + "properties": { + "buy_count": { + "default": 0, + "type": "integer" + }, + "hold_count": { + "default": 0, + "type": "integer" + }, + "sell_count": { + "default": 0, + "type": "integer" + }, + "total": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "timestamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_losing_trades2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_trade_history.", + "properties": { + "filters": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "type": "string" + }, + "stats": { + "additionalProperties": true, + "properties": { + "avg_pnl": { + "type": "number" + }, + "losses": { + "type": "integer" + }, + "total_pnl": { + "type": "number" + }, + "total_trades": { + "type": "integer" + }, + "win_rate": { + "type": "number" + }, + "wins": { + "type": "integer" + } + }, + "required": [ + "total_trades", + "wins", + "losses", + "win_rate", + "total_pnl", + "avg_pnl" + ], + "type": "object" + }, + "trades": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "holding_duration": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_loss_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_pattern": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "market_id", + "stats" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_monthly_accuracy_trend2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_monthly_accuracy_trend.", + "properties": { + "meta": { + "additionalProperties": true, + "type": "object" + }, + "trend": { + "items": { + "additionalProperties": true, + "properties": { + "accuracy": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "lag_bucket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "month": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sample_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "target_market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_position_detail5 fields changed- added
Input schema / properties / coin / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / coin / defaultAdded value: +null - removed
Input schema / properties / coin / typeRemoved value: -"string" - added
Input schema / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "market_id", - "coin" -]New value: +[ + "market_id" +]
- Changed
get_positions1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_prediction_accuracy1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Added
get_resolved_predictions - Changed
get_role_analysis5 fields changed- added
Input schema / properties / coin / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / coin / defaultAdded value: +null - removed
Input schema / properties / coin / typeRemoved value: -"string" - added
Input schema / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "market_id", - "coin" -]New value: +[ + "market_id" +]
- Changed
get_signal_detail5 fields changed- added
Input schema / properties / coin / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / coin / defaultAdded value: +null - removed
Input schema / properties / coin / typeRemoved value: -"string" - added
Input schema / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "market_id", - "coin" -]New value: +[ + "market_id" +]
- Changed
get_signals4 fields changed- added
Input schema / properties / coin / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / coin / typeRemoved value: -"string" - added
Input schema / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_strategy_leaderboard1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_trade_history1 field changed- changed
Output schema / properties / _value_signals / anyOfPrevious value: -[ - { - "additionalProperties": true, - "description": "Static product/value metadata — same for every response of a tool type.", - "properties": { - "data_freshness_seconds": { - "default": 120, - "type": "integer" - }, - "key_signup_url": { - "default": "https://oneqaz.com/keys", - "type": "string" - }, - "pricing_url": { - "default": "https://oneqaz.com/pricing", - "type": "string" - }, - "schema_version": { - "default": "1.0", - "type": "string" - }, - "self_correcting": { - "default": true, - "type": "boolean" - }, - "tier_default": { - "default": "free", - "enum": [ - "free", - "pro", - "internal" - ], - "type": "string" - }, - "tier_default_limits": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "what_pro_unlocks": { - "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Added
get_trade_outcomes_bulk - Changed
get_winning_trades2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://api.oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://api.oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_trade_history.", + "properties": { + "filters": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "type": "string" + }, + "stats": { + "additionalProperties": true, + "properties": { + "avg_pnl": { + "type": "number" + }, + "losses": { + "type": "integer" + }, + "total_pnl": { + "type": "number" + }, + "total_trades": { + "type": "integer" + }, + "win_rate": { + "type": "number" + }, + "wins": { + "type": "integer" + } + }, + "required": [ + "total_trades", + "wins", + "losses", + "win_rate", + "total_pnl", + "avg_pnl" + ], + "type": "object" + }, + "trades": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "holding_duration": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_loss_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_pattern": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "market_id", + "stats" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Added
search
7 tool updates
- Changed
explain_decision2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for explain_decision.", + "properties": { + "layers": { + "additionalProperties": true, + "type": "object" + }, + "overall_recommendation": { + "additionalProperties": true, + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "verdict": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_daily_brief2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_daily_brief.", + "properties": { + "active_predictions_count": { + "default": 0, + "type": "integer" + }, + "losing_count": { + "default": 0, + "type": "integer" + }, + "macro_regime": { + "additionalProperties": true, + "properties": { + "categories": { + "items": {}, + "type": "array" + }, + "total": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "market": { + "type": "string" + }, + "meta": { + "additionalProperties": true, + "properties": { + "data_window": { + "default": "last_24h", + "type": "string" + }, + "interpretation": { + "default": "", + "type": "string" + }, + "source": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "narrative": { + "type": "string" + }, + "primary_market": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "strong_signals": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "interval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + }, + "timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + }, + "winning_count": { + "default": 0, + "type": "integer" + }, + "yesterday_trades": { + "additionalProperties": true, + "properties": { + "by_market": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "losing": { + "default": 0, + "type": "integer" + }, + "total": { + "default": 0, + "type": "integer" + }, + "winning": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + } + }, + "required": [ + "market", + "narrative" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_positions2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_positions.", + "properties": { + "market_id": { + "type": "string" + }, + "positions": { + "items": { + "additionalProperties": true, + "properties": { + "ai_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "current_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "current_strategy": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "holding_duration": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_loss_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "quantity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + }, + "stats": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "avg_pnl": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "losing": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "profitable": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "total_positions": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_prediction_accuracy2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_prediction_accuracy.", + "properties": { + "meta": { + "additionalProperties": true, + "properties": { + "baseline_accuracy": { + "type": "number" + }, + "interpretation": { + "type": "string" + }, + "sample_count_filter": { + "type": "string" + }, + "source": { + "type": "string" + }, + "total_category_target_lag_cells": { + "type": "integer" + }, + "total_samples": { + "type": "integer" + } + }, + "required": [ + "total_category_target_lag_cells", + "total_samples", + "sample_count_filter", + "source", + "baseline_accuracy", + "interpretation" + ], + "type": "object" + }, + "summary": { + "additionalProperties": { + "additionalProperties": { + "additionalProperties": { + "additionalProperties": true, + "type": "object" + }, + "type": "object" + }, + "type": "object" + }, + "type": "object" + } + }, + "required": [ + "summary", + "meta" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_signals2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_signals.", + "properties": { + "filters": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "type": "string" + }, + "signals": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "interval": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "market_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + }, + "timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "market_id" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_strategy_leaderboard2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_strategy_leaderboard.", + "properties": { + "leaderboard": { + "items": { + "additionalProperties": true, + "properties": { + "is_synthesized": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "strategy_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "trades_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "win_rate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "interpretation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "measured_entries": { + "default": 0, + "type": "integer" + }, + "synthesized_entries": { + "default": 0, + "type": "integer" + } + }, + "type": "object" + }, + "per_symbol_leaderboard": { + "items": { + "additionalProperties": true, + "properties": { + "is_synthesized": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_factor": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "strategy_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "trades_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "win_rate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
- Changed
get_trade_history2 fields changed- added
Output schema / propertiesAdded value: +{ + "_followup_questions_for_user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_llm_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "_market_state_narrative": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Wrapper for `_market_state_narrative` — bilingual + provenance.", + "properties": { + "_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "en": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ko": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Bilingual narrative — one of {ko, en} must carry a headline.", + "properties": { + "evidence": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headline": { + "type": "string" + }, + "what_to_watch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "headline" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "_next_actions": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "description": "One AI-actionable follow-up call recommendation.", + "properties": { + "args": { + "additionalProperties": true, + "type": "object" + }, + "intent": { + "description": "Short intent label, max ~120 chars", + "type": "string" + }, + "priority": { + "default": "normal", + "enum": [ + "high", + "normal", + "low" + ], + "type": "string" + }, + "rationale": { + "default": "", + "description": "Why this is recommended", + "type": "string" + }, + "tool": { + "description": "Recommended tool name to invoke next", + "type": "string" + } + }, + "required": [ + "intent", + "tool" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null + }, + "_value_signals": { + "anyOf": [ + { + "additionalProperties": true, + "description": "Static product/value metadata — same for every response of a tool type.", + "properties": { + "data_freshness_seconds": { + "default": 120, + "type": "integer" + }, + "key_signup_url": { + "default": "https://oneqaz.com/keys", + "type": "string" + }, + "pricing_url": { + "default": "https://oneqaz.com/pricing", + "type": "string" + }, + "schema_version": { + "default": "1.0", + "type": "string" + }, + "self_correcting": { + "default": true, + "type": "boolean" + }, + "tier_default": { + "default": "free", + "enum": [ + "free", + "pro", + "internal" + ], + "type": "string" + }, + "tier_default_limits": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "what_pro_unlocks": { + "default": "33x daily quota (50K), 3.3x burst (200/min) — same tools, higher volume", + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Recommended client action (error path)" + }, + "action_value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line AI-oriented summary (success path)" + }, + "ai_summary_generated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "RFC3339 UTC" + }, + "ai_summary_ttl_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "data_classification": { + "anyOf": [ + { + "const": "research_information_only", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "disclaimer": { + "description": "Canonical compliance disclaimer (always present)", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Set true on error responses" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Stable error identifier; see mcp_error_policy.md" + }, + "fallback_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fallback_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Suggested fallback (error path)" + }, + "full_data": { + "anyOf": [ + { + "additionalProperties": true, + "description": "`full_data` for get_trade_history.", + "properties": { + "filters": { + "additionalProperties": true, + "type": "object" + }, + "market_id": { + "type": "string" + }, + "stats": { + "additionalProperties": true, + "properties": { + "avg_pnl": { + "type": "number" + }, + "losses": { + "type": "integer" + }, + "total_pnl": { + "type": "number" + }, + "total_trades": { + "type": "integer" + }, + "win_rate": { + "type": "number" + }, + "wins": { + "type": "integer" + } + }, + "required": [ + "total_trades", + "wins", + "losses", + "win_rate", + "total_pnl", + "avg_pnl" + ], + "type": "object" + }, + "trades": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "ai_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "entry_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "exit_timestamp": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "holding_duration": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "profit_loss_pct": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "signal_pattern": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "symbol" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "market_id", + "stats" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_investment_advice": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "is_real_money": { + "anyOf": [ + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Human-readable cause (error path)" + }, + "request_id": { + "description": "32-hex per-response correlation id", + "type": "string" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Whether the client should retry (error path)" + }, + "summary_for_user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "One-line jargon-free Korean summary (success path)" + }, + "timestamp": { + "description": "RFC3339 UTC, server build time", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[ + "disclaimer", + "request_id", + "timestamp" +]
1 tool update
- Added
get_daily_brief
Related MCP Connectors
Market analyst tools + AI agent: crypto, US equities, options, Korea, fundamentals, macro, backtests
Live crypto market data: prices, funding, OI, liquidations, regimes, GEX, whales, sentiment, macro.
Live market data & technical analysis for US stocks, ETFs and crypto. Read-only, no signup.
Live crypto data: why a coin or the market is moving (funding, OI, positioning, flow).
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides real-time cryptocurrency market signals including RSI, top gainers, price action, kimchi premium, market prices, and derivatives data from multiple exchanges.MIT
- AlicenseAqualityBmaintenanceProvides live cryptocurrency market data including spot prices, OHLCV candles, order books, funding rates, and technical indicators via public exchange APIs.8MIT
- AlicenseNot gradedqualityCmaintenanceDelivers real-time crypto market microstructure, derivatives, order flow CVD/OI regime classification, fear & greed sentiment, and whale tracking context, enabling traders to assess market regimes and complement charting tools.28 npmMIT
- AlicenseAqualityDmaintenanceNarrative & signal intelligence for AI agents: crypto/AI/macro convergence & divergence.21MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.