Skip to main content
Glama

OneQAZ Trading Intelligence

Structure Calibration (Level 2)

get_structure_calibration
Read-onlyIdempotent

Call this to see how well sector / ETF-basket direction calls held up against a majority-class baseline; include_history=True adds the day-by-day validation trend. 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?", "그룹 단위 적중률 보여줘", "sector accuracy over time?", "요즘 섹터 예측 성적 어때?". 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: include_history=True 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. Output nature: Past calls and their realized outcomes, judged after the fact, with sample sizes and baselines. Past hit rates describe the past, not future outcomes.

Input Schema

NameRequiredDescriptionDefault
daysNoinclude_history: lookback window in days (default 90)
limitNoMax results (default 50, max 500). Rows are truncated; see `total_available` and `truncated` in the response. `baseline` and `meta` counts stay whole-set.
market_idNoOptional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted.
group_nameNoOptional group/sector filter (e.g., layer1, defi, sector, broad_index)
include_historyNoAlso return the daily validation history (hit_rate per day, overall_hit_rate) as `history`. Default false.

Output Schema

NameRequiredDescriptionDefault
full_dataNo
timestampYesRFC3339 UTC, server build time
disclaimerYesCanonical compliance disclaimer (always present)
request_idYes32-hex per-response correlation id
is_real_moneyNo
data_classificationNo
is_investment_adviceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / days
      Added value: +{
      +  "default": 90,
      +  "description": "include_history: lookback window in days (default 90)",
      +  "type": "integer"
      +}
    • addedInput schema / properties / include_history
      Added value: +{
      +  "default": false,
      +  "description": "Also return the daily validation history (hit_rate per day, overall_hit_rate) as `history`. Default false.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  3. Changed2 schema fields changed
    • addedOutput schema / properties
      Added 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"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "disclaimer",
      +  "request_id",
      +  "timestamp"
      +]
  4. Changed7 schema fields changed
    • addedInput schema / properties / group_name / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / group_name / description
      Added value: +"Optional group/sector filter (e.g., layer1, defi, sector, broad_index)"
    • removedInput schema / properties / group_name / type
      Removed value: -"string"
    • addedInput schema / properties / market_id / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / market_id / description
      Added value: +"Optional market filter (crypto, kr_stock, us_stock). Aliases coin/kr/us and any letter case are accepted."
    • addedInput schema / properties / market_id / enum
      Added value: +[
      +  "crypto",
      +  "kr_stock",
      +  "us_stock"
      +]
    • removedInput schema / properties / market_id / type
      Removed value: -"string"
  5. Changed1 schema field changed
    • addedInput schema / properties / limit
      Added 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"
      +}
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, but the description adds substantial context: it may be empty until structure-learning cycles complete, pagination means `total_available` rather than `len(calibration)` gives the whole-set size, `baseline`/`meta` counts are always whole-set, and rows retain their dimension keys. It also honestly discloses that measured skill is currently negative in all three markets — a behaviorally important caveat not in any structured field. It stops short of describing the response envelope in full, but the output schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (Purpose, Triggers, When to call, Prerequisites, Next steps, Caveats, Output nature) front-load the key distinction and are easy to scan. Some waste exists: the include_history tip appears twice (opening line and 'Next steps'), and the six-item bilingual trigger list is heavier than needed for an agent audience.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only calibration query with a full output schema and complete annotations, the description covers the empty-state caveat, pagination traps, baseline interpretation, and the epistemic caveat that past hit rates do not imply future edge. Nothing an agent needs to call this correctly — or to avoid misreading the numbers — is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds interpretation guidance the schema does not: include_history returns a `history` series, `days` scopes the history lookback, and limit truncation must be read via `total_available`/`truncated` because baseline and meta stay whole-set. That is genuine meaning beyond the parameter definitions, though group_name semantics (layer1, defi, broad_index) are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — measuring how well sector/ETF-basket direction calls held up against a majority-class baseline — and explicitly scopes itself as Level 2 (ETF/basket/sector) versus Level 1 (individual symbols). The returned entity (hit_rate_ema per market/group/interval/regime_bucket) is named, so an agent can separate it from sibling calibration tools like get_signal_calibration or get_prediction_accuracy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'When to call' clause ties invocation to Layer D evidence in a named trust pyramid, plus concrete trigger phrasings in two languages, a 'Prerequisites: none' statement, and a 'Next steps' pointer to include_history=True. Alternatives are implicitly routed by the Level 1 vs Level 2 distinction, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.