Skip to main content
Glama

decker.get_market_state

PER-TIMEFRAME judgment state of a symbol, structured (consumer contract CR1) — the evidence behind decker.get_assembly's single verdict. For 'what is the situation and what do I do' call decker.get_assembly first; use this when you need one timeframe's exact state. Per timeframe (top→short): stage = target_selected (대상선정) | pending (판정보류: the close is still inside the signal bar) | confirmed (확인) | failed (실패) | none; side = buy/sell (a failed signal asserts nothing about the opposite side); signal_time; signal_bar {time, low, high} (its edges decide confirm/fail); entry (= close at the signal); stop; target (take-profit: opposite-side confirmed-signal edge at least 2% from entry, else null + target_reason); unit_target (the price this timeframe is judging now — NOT the take-profit); units (the targets judged together, max 6, primary first); reverse_pending (a reversal on hold: the first reversing key appeared, the next judgment bar has not closed beyond the target); standing (the last confirmed signal's entry/stop/target while a new target is being selected); prev_signal; turn (reverse|same|null); levels (nearby prices). state_text = ready-to-show Korean lines (🟢▲ buy confirmed · 🔴▼ sell confirmed · ⚪ pending · 🟡 target selected / reversal on hold · ✖️ failed). timeframe_summary lists timeframes by (stage, side) — a listing, not a verdict; no scores, weights or probabilities anywhere. events = recent target_selected / signal / signal_resolved / reverse_failed / reverse_tested / conn_arrival, newest first, always including each timeframe's own latest 2 (pass timeframe for one timeframe's full history). as_of = the latest closed bar among the returned timeframes (it can be earlier than get_assembly.as_of, which is the 30m bar). Read as persisted (no recompute). A state reading, NOT a trade instruction. Crypto and Hyperliquid synthetics only (KRX: decker.get_reading). Before placing any order, check the intent with decker.validate_intent.

Input Schema

NameRequiredDescriptionDefault
symbolYese.g. BTCUSDT, XYZ_GOLDUSD
timeframeNoAlias for a single-element `timeframes` (backward compatible).
timeframesNoSubset to return. Omit for all timeframes.
events_limitNo

Output Schema

NameRequiredDescriptionDefault
as_ofYes가장 최근 평가 봉의 마감 시각
priceYes가장 최근 평가 봉의 종가
eventsYes최근 사건(새것 먼저). 대상선정·신호·신호 결말·추세 변경 안 됨(reverse_failed: 1순위 대상의 반전이 실패한 판정 결과, side = 유지되는 추세 쪽 — 신호 아님)·반전 테스트(reverse_tested: 1순위 대상의 반전 첫 키 결과, status beyond|short — 신호 아님)·이전 판정 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님).
ladderNo현재가 위·아래 가까운 순서로 각 8개. 같은 가격은 한 점이고 at 에 그 가격이 어느 시간대에서 어떤 역할인지(kind) 모두 나열된다 — 하위 시간대가 닿는 가격이 상위 시간대의 대상·후보·신호봉 경계이면 그 한 사건이 두 시간대의 사건이다(상위는 하위의 조각이 모여 만들어진다). signal_edge.edge: confirm=그 방향 확인 경계 · fail=반대(실패) 경계. reads=그 칸의 사건 문장(역할→사건 표) + 그 시간대의 다음 마감 시각(판정은 종가). 우세·점수 없음
symbolYes
state_textNo사용자에게 그대로 보여 줄 수 있는 현재 상태 문면 — 상위·중간·단기로 묶어 시간대마다 방향+단계, 마지막에 주목 가격. 해석·전망 문장은 없다(그건 호출자 몫). 시간대 행이 없으면 null
timeframesYes상위→단기 순. 각 시간대가 낸 상태를 나란히 — 시간대 간 종합 판정은 없다(종합은 호출자 몫).
timeframe_summaryNo시간대 행을 단계(confirmed 확인·pending 판정보류·failed 실패)와 방향(buy·sell)별로 나열만 한다. 우세·점수·투표 없음 — 실패는 반대 방향을 뜻하지 않는다. target_selected = 대상선정 중인 시간대 목록
missing_timeframesYes아직 평가값이 없는 시간대

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / timeframes / items / properties / edge_break_at
      Added value: +{
      +  "description": "근거 붕괴 시각 — 확인된 신호의 종가가 신호봉 반대 경계를 처음 이탈한 봉(그 봉의 행동 = 청산). 이 값이 있으면 다음 봉부터 이 신호의 입장은 없다(입장 종료, 용어 대장 §근거 붕괴·입장 종료). 가격이 경계 안으로 돌아와도 되살아나지 않는다. 없으면 null",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / timeframes / items / properties / units / description
      Previous value: -"이 시간대가 **함께 보고 있는 대상 목록**(최대 6, 1순위 먼저). 한 시간대에서 대상은 하나가 아니다 — 1순위가 판정 중이어도 이전부터 있던 다른 대상이 터치되면 보조 유닛으로 각자 판정한다(수평·수직). unit_target = 그 대상 가격 · zone = 대상 자리(buy = 아래서 산 자리 · sell = 위에서 판 자리) · stage = target_selected 대상선정 | reverse_pending 반전 보류(테스트·보류 포함) | confirmed 확정 | reverse_failed 추세 변경 안 됨 · primary = 1순위 여부 · touch_kind = 터치 종류(break 종가로 돌파 · inside 꼬리만) · touched_at = 터치 봉 시각 · holds = 보류 이월 횟수 · reverse_side = 반전 측. 신호·결말(stage 최상위)과 별개 층이고 신호 아님."New value: +"이 시간대가 **함께 보고 있는 대상 목록**(1순위 먼저, 보조는 현재가 가까운 순 — 후입(late) 유닛 포함·자르지 않는다). 한 시간대에서 대상은 하나가 아니다 — 1순위가 판정 중이어도 이전부터 있던 다른 대상이 터치되면 보조 유닛으로 각자 판정한다(수평·수직). unit_target = 그 대상 가격 · zone = 대상 자리(buy = 아래서 산 자리 · sell = 위에서 판 자리) · stage = target_selected 대상선정 | reverse_pending 반전 보류(테스트·보류 포함) | confirmed 확정 | reverse_failed 추세 변경 안 됨 · primary = 1순위 여부 · touch_kind = 터치 종류(break 종가로 돌파 · inside 꼬리만) · touched_at = 터치 봉 시각 · holds = 보류 이월 횟수 · reverse_side = 반전 측. 신호·결말(stage 최상위)과 별개 층이고 신호 아님."
    • addedOutput schema / properties / timeframes / items / properties / units / items / properties / late
      Added value: +{
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • addedOutput schema / properties / timeframes / items / properties / label_next
      Added value: +{
      +  "description": "1순위 대상의 라벨이 **다음 한 봉**에 어떻게 되는지의 읽기. state = 지금 라벨 위치 · hi/lo = 직전 봉의 고가·저가(다음 봉이 이 두 가격에 대해 고가 갱신 F · 저가 갱신 B · 둘 다 아님 I · 둘 다 W 로 갈린다 — 종가가 아니다) · next = 움직임별 다음 라벨. 판정 입력이 아니라 읽기. 엔진이 아직 내지 않은 세대는 null.",
      +  "properties": {
      +    "hi": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "lo": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "next": {
      +      "properties": {
      +        "B": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "F": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "I": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "W": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "state": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / timeframes / items / properties / missed
      Added value: +{
      +  "description": "판정 없이 지나간 break(미싱)의 최근 몇 건(최신 먼저). 판정 중인 1순위가 있는 동안 태어난 대상이 터치브레이크되면 판정 대상이 아니라 미싱으로 남는다 — **상태**일 뿐 스윙 반전이 아니다. time = 그 봉 시각 · price = 그 대상 가격 · sign = 대상 부호 · position = 그 봉 종가가 대상의 위(above)/아래(below) · judging = 그때 판정 중이던 1순위 대상 가격.",
      +  "items": {
      +    "properties": {
      +      "judging": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "position": {
      +        "enum": [
      +          "above",
      +          "below",
      +          "at",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "price": {
      +        "type": "number"
      +      },
      +      "sign": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "time": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed2 schema fields changed
    • changedOutput schema / properties / timeframes / items / properties / action_switch / description
      Previous value: -"이 시간대 루프의 현재 위치가 사용자에게 주는 **행동전환 결정**(저자 10-11 교정 #9·#10: 런타임은 스냅샷이라 모든 상태가 결정을 낸다). need = required 전환 필요(이 봉에서 신호 확정, side 로 진입·반대 측이면 청산 후 리버스) · exit 청산(이 봉에서 직전 신호 실패 — stance 측 판단 근거 붕괴) · pending 전환 대기(확정 전, 반전 가설이 시험 중 — side = 후보 방향, 가설이 양방향이면 null) · not_required 전환 불필요(stance = 직전 신호 측 유지, 없으면 행동 없음). reversal_tests = 살아 있는 반전 가설 수(1순위+보조 유닛, 방향별 — 순위·승격 없음) · mismatch = 최근 키와 종가 위상이 엇갈림(양방향 동시 테스트) · close_vs_target = 1순위 대상 가격 대비 종가 위치. 신호(stage)·반전 보류와 별개 층이고 엔진 한 곳에서만 나온다. 가설도 신호도 없으면 null."New value: +"이 시간대 루프의 현재 위치가 사용자에게 주는 **행동전환 결정**(저자 10-11 교정 #9·#10: 런타임은 스냅샷이라 모든 상태가 결정을 낸다). need = required 전환 필요(이 봉에서 신호 확정, side 로 진입·반대 측이면 청산 후 리버스) · exit 청산(이 봉에서 직전 신호 실패 — stance 측 판단 근거 붕괴) · pending 전환 대기(확정 전, 반전 가설이 시험 중 — side = 후보 방향, 가설이 양방향이면 null) · not_required 전환 불필요(stance = 직전 신호 측 유지, 없으면 행동 없음). exit_edge = need=exit 를 정한 사건이 '확인된 신호의 신호봉 반대 경계 종가 이탈'일 때 그 경계 가격(매수=저가·매도=고가) — 표면이 경계를 추정하지 않도록 엔진이 싣는다, 다른 사건이 정한 행동이면 null · reversal_tests = 살아 있는 반전 가설 수(1순위+보조 유닛, 방향별 — 순위·승격 없음) · mismatch = 최근 키와 종가 위상이 엇갈림(양방향 동시 테스트) · close_vs_target = 1순위 대상 가격 대비 종가 위치. 신호(stage)·반전 보류와 별개 층이고 엔진 한 곳에서만 나온다. 가설도 신호도 없으면 null."
    • addedOutput schema / properties / timeframes / items / properties / action_switch / properties / exit_edge
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / ladder
      Added value: +{
      +  "description": "현재가 위·아래 가까운 순서로 각 8개. 같은 가격은 한 점이고 at 에 그 가격이 어느 시간대에서 어떤 역할인지(kind) 모두 나열된다 — 하위 시간대가 닿는 가격이 상위 시간대의 대상·후보·신호봉 경계이면 그 한 사건이 두 시간대의 사건이다(상위는 하위의 조각이 모여 만들어진다). signal_edge.edge: confirm=그 방향 확인 경계 · fail=반대(실패) 경계. reads=그 칸의 사건 문장(역할→사건 표) + 그 시간대의 다음 마감 시각(판정은 종가). 우세·점수 없음",
      +  "properties": {
      +    "down": {
      +      "items": {
      +        "properties": {
      +          "at": {
      +            "items": {
      +              "properties": {
      +                "edge": {
      +                  "enum": [
      +                    "confirm",
      +                    "fail",
      +                    null
      +                  ],
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kind": {
      +                  "enum": [
      +                    "unit_target",
      +                    "next_unit_target",
      +                    "connection",
      +                    "candidate",
      +                    "signal_edge",
      +                    "decision"
      +                  ],
      +                  "type": "string"
      +                },
      +                "reads": {
      +                  "type": "string"
      +                },
      +                "timeframe": {
      +                  "enum": [
      +                    "1w",
      +                    "1d",
      +                    "8h",
      +                    "4h",
      +                    "1h",
      +                    "30m"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "distance_pct": {
      +            "type": "number"
      +          },
      +          "price": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "up": {
      +      "items": {
      +        "properties": {
      +          "at": {
      +            "items": {
      +              "properties": {
      +                "edge": {
      +                  "enum": [
      +                    "confirm",
      +                    "fail",
      +                    null
      +                  ],
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kind": {
      +                  "enum": [
      +                    "unit_target",
      +                    "next_unit_target",
      +                    "connection",
      +                    "candidate",
      +                    "signal_edge",
      +                    "decision"
      +                  ],
      +                  "type": "string"
      +                },
      +                "reads": {
      +                  "type": "string"
      +                },
      +                "timeframe": {
      +                  "enum": [
      +                    "1w",
      +                    "1d",
      +                    "8h",
      +                    "4h",
      +                    "1h",
      +                    "30m"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "distance_pct": {
      +            "type": "number"
      +          },
      +          "price": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / timeframes / items / properties / closes_with
      Added value: +{
      +  "description": "진행 중인 봉이 이 시간대와 같은 시각에 닫히는 다른 시간대 목록 — 겹치는 하위 봉의 종가가 상위 판정의 결정적 순간이다",
      +  "items": {
      +    "enum": [
      +      "1w",
      +      "1d",
      +      "8h",
      +      "4h",
      +      "1h",
      +      "30m"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / timeframes / items / properties / next_close_time
      Added value: +{
      +  "description": "이 시간대의 진행 중인 봉이 닫히는 시각(마지막 평가 봉 마감 + 시간대 길이). 상위 봉은 하위 봉들이 모여 닫힌다",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / timeframes / items / properties / signal_position
      Added value: +{
      +  "description": "확인·실패 신호의 지금 종가가 신호봉 대비 어디인가(신호 방향 반영) — for=신호 방향 경계 밖 · against=반대 경계 밖(불리; 신호 결과 stage 는 첫 결말로 고정이고 이후 이탈은 위치로만 남는다) · inside=신호봉 안",
      +  "enum": [
      +    "for",
      +    "against",
      +    "inside",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  7. Changed7 schema fields changed
    • changedOutput schema / properties / events / description
      Previous value: -"최근 사건(새것 먼저). 대상선정·신호·신호 결말·이전 판정 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님)."New value: +"최근 사건(새것 먼저). 대상선정·신호·신호 결말·추세 변경 안 됨(reverse_failed: 1순위 대상의 반전이 실패한 판정 결과, side = 유지되는 추세 쪽 — 신호 아님)·반전 테스트(reverse_tested: 1순위 대상의 반전 첫 키 결과, status beyond|short — 신호 아님)·이전 판정 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님)."
    • changedOutput schema / properties / events / items / properties / kind / description
      Previous value: -"conn_arrival(이전 판정 가격 도달) = 가격이 이전에 판정이 끝난 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다."New value: +"conn_arrival(이전 판정 가격 도달) = 가격이 이전에 판정이 끝난 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다. reverse_failed(추세 변경 안 됨, 엔진 `judge_failed`) = 1순위 대상의 판정 결과 중 반전이 실패한 것 — side = 유지되는 추세 쪽, price = 그 대상. 신호가 아니라 판정 결과 사실이며(진입·청산 사용은 진입 모드 층의 몫, 게이트는 WATCH) 텔레그램 채널 없음. reverse_tested(반전 테스트, 엔진 `judge_test`) = 1순위 대상의 B 국면 첫 반대 키 결과 — side = 반전 쪽 키, price = 대상, status = beyond(테스트 S 종가가 대상 너머 = 최소 조건 충족)|short. 신호 아님·텔레그램 없음. 보조 유닛의 결과는 표면에 올리지 않는다."
    • changedOutput schema / properties / events / items / properties / kind / enum
      Previous value: -[
      -  "target_selected",
      -  "signal",
      -  "signal_resolved",
      -  "conn_arrival"
      -]New value: +[
      +  "target_selected",
      +  "signal",
      +  "signal_resolved",
      +  "conn_arrival",
      +  "reverse_failed",
      +  "reverse_tested"
      +]
    • changedOutput schema / properties / events / items / properties / status / description
      Previous value: -"signal_resolved 의 결말"New value: +"signal_resolved 의 결말(confirmed|failed) · reverse_tested 의 최소 조건(beyond = 테스트 S 종가가 대상 너머 마감 · short = 못 넘음)"
    • changedOutput schema / properties / events / items / properties / status / enum
      Previous value: -[
      -  "confirmed",
      -  "failed",
      -  null
      -]New value: +[
      +  "confirmed",
      +  "failed",
      +  "beyond",
      +  "short",
      +  null
      +]
    • addedOutput schema / properties / timeframes / items / properties / standing
      Added value: +{
      +  "description": "**유지 중인 입장의 기준 신호**(단계가 대상선정일 때만, 직전 신호가 확인이고 아직 실패하지 않았을 때). 새 대상이 선정되어도 직전 확인 신호의 입장은 유지된다(action_switch.stance) — 그 입장의 진입가·손절·목표를 신호 단계 필드(entry·stop·target)와 섞지 않고 따로 싣는다. side = 유지되는 입장 · signal_time = 그 신호 시각 · entry = 체결 기준(신호 시점 종가) · stop = 손절 · target = 목표 좌표 · target_rr = 좌표가 없을 때 손익비 기계값. 신호 단계(pending·confirmed·failed)이거나 직전 확인 신호가 없으면 null",
      +  "properties": {
      +    "entry": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "side": {
      +      "enum": [
      +        "buy",
      +        "sell"
      +      ],
      +      "type": "string"
      +    },
      +    "signal_time": {
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "stop": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "target": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "target_rr": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / timeframes / items / properties / units
      Added value: +{
      +  "description": "이 시간대가 **함께 보고 있는 대상 목록**(최대 6, 1순위 먼저). 한 시간대에서 대상은 하나가 아니다 — 1순위가 판정 중이어도 이전부터 있던 다른 대상이 터치되면 보조 유닛으로 각자 판정한다(수평·수직). unit_target = 그 대상 가격 · zone = 대상 자리(buy = 아래서 산 자리 · sell = 위에서 판 자리) · stage = target_selected 대상선정 | reverse_pending 반전 보류(테스트·보류 포함) | confirmed 확정 | reverse_failed 추세 변경 안 됨 · primary = 1순위 여부 · touch_kind = 터치 종류(break 종가로 돌파 · inside 꼬리만) · touched_at = 터치 봉 시각 · holds = 보류 이월 횟수 · reverse_side = 반전 측. 신호·결말(stage 최상위)과 별개 층이고 신호 아님.",
      +  "items": {
      +    "properties": {
      +      "holds": {
      +        "type": "integer"
      +      },
      +      "primary": {
      +        "type": "boolean"
      +      },
      +      "reverse_side": {
      +        "enum": [
      +          "buy",
      +          "sell",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "stage": {
      +        "enum": [
      +          "target_selected",
      +          "reverse_pending",
      +          "confirmed",
      +          "reverse_failed"
      +        ],
      +        "type": "string"
      +      },
      +      "touch_kind": {
      +        "enum": [
      +          "break",
      +          "inside",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "touched_at": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "unit_target": {
      +        "type": "number"
      +      },
      +      "zone": {
      +        "enum": [
      +          "buy",
      +          "sell",
      +          null
      +        ],
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  8. Changed4 schema fields changed
    • changedOutput schema / properties / timeframes / items / properties / action_switch / description
      Previous value: -"이 시간대 판정 유닛이 지금 사용자에게 주는 **행동전환 결정**(저자 10-11 교정 #9: 런타임은 스냅샷이라 모든 상태가 결정을 낸다). need = required 전환 필요(확정) · pending 전환 대기(확정 전, side = 후보 방향) · not_required 전환 불필요(감시·대상 방어). stance = 전환 불필요일 때 유지하는 진행 측(반전 실패 때) · close_vs_target = 종가의 대상 가격 대비 위치 · mismatch = 최근 키와 위상이 엇갈림(양방향 동시 테스트) · exit_reverse_entry = 확인 단계 실패라 반대 방향 진입은 청산. 대상이 없으면 null. 신호(stage)와 별개."New value: +"이 시간대 루프의 현재 위치가 사용자에게 주는 **행동전환 결정**(저자 10-11 교정 #9·#10: 런타임은 스냅샷이라 모든 상태가 결정을 낸다). need = required 전환 필요(이 봉에서 신호 확정, side 로 진입·반대 측이면 청산 후 리버스) · exit 청산(이 봉에서 직전 신호 실패 — stance 측 판단 근거 붕괴) · pending 전환 대기(확정 전, 반전 가설이 시험 중 — side = 후보 방향, 가설이 양방향이면 null) · not_required 전환 불필요(stance = 직전 신호 측 유지, 없으면 행동 없음). reversal_tests = 살아 있는 반전 가설 수(1순위+보조 유닛, 방향별 — 순위·승격 없음) · mismatch = 최근 키와 종가 위상이 엇갈림(양방향 동시 테스트) · close_vs_target = 1순위 대상 가격 대비 종가 위치. 신호(stage)·반전 보류와 별개 층이고 엔진 한 곳에서만 나온다. 가설도 신호도 없으면 null."
    • removedOutput schema / properties / timeframes / items / properties / action_switch / properties / exit_reverse_entry
      Removed value: -{
      -  "type": "boolean"
      -}
    • changedOutput schema / properties / timeframes / items / properties / action_switch / properties / need / enum
      Previous value: -[
      -  "required",
      -  "pending",
      -  "not_required"
      -]New value: +[
      +  "required",
      +  "exit",
      +  "pending",
      +  "not_required"
      +]
    • addedOutput schema / properties / timeframes / items / properties / action_switch / properties / reversal_tests
      Added value: +{
      +  "properties": {
      +    "buy": {
      +      "type": "integer"
      +    },
      +    "sell": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  9. Changed1 schema field changed
    • addedOutput schema / properties / timeframes / items / properties / action_switch
      Added value: +{
      +  "description": "이 시간대 판정 유닛이 지금 사용자에게 주는 **행동전환 결정**(저자 10-11 교정 #9: 런타임은 스냅샷이라 모든 상태가 결정을 낸다). need = required 전환 필요(확정) · pending 전환 대기(확정 전, side = 후보 방향) · not_required 전환 불필요(감시·대상 방어). stance = 전환 불필요일 때 유지하는 진행 측(반전 실패 때) · close_vs_target = 종가의 대상 가격 대비 위치 · mismatch = 최근 키와 위상이 엇갈림(양방향 동시 테스트) · exit_reverse_entry = 확인 단계 실패라 반대 방향 진입은 청산. 대상이 없으면 null. 신호(stage)와 별개.",
      +  "properties": {
      +    "close_vs_target": {
      +      "enum": [
      +        "above",
      +        "below",
      +        "at",
      +        null
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "exit_reverse_entry": {
      +      "type": "boolean"
      +    },
      +    "mismatch": {
      +      "type": "boolean"
      +    },
      +    "need": {
      +      "enum": [
      +        "required",
      +        "pending",
      +        "not_required"
      +      ],
      +      "type": "string"
      +    },
      +    "side": {
      +      "enum": [
      +        "buy",
      +        "sell",
      +        null
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "stance": {
      +      "enum": [
      +        "buy",
      +        "sell",
      +        null
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "unit_target": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  10. Changed6 schema fields changed
    • changedOutput schema / properties / events / description
      Previous value: -"최근 사건(새것 먼저). 대상선정·신호·신호 결말·기준 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님)."New value: +"최근 사건(새것 먼저). 대상선정·신호·신호 결말·이전 판정 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님)."
    • changedOutput schema / properties / events / items / properties / kind / description
      Previous value: -"conn_arrival(기준 가격 도달) = 가격이 이전에 판정이 끝난 기준 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다."New value: +"conn_arrival(이전 판정 가격 도달) = 가격이 이전에 판정이 끝난 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다."
    • changedOutput schema / properties / timeframes / items / properties / levels / description
      Previous value: -"주목 가격 — 종가 위·아래 가까운 가격 3개씩 {price, distance_pct, kind}. kind=target(지금 판정 기준)|next_target|connection|candidate"New value: +"주목 가격 — 종가 위·아래 가까운 가격 3개씩 {price, distance_pct, kind}. kind=unit_target(지금 판정 중인 대상 가격)|next_unit_target(다음 대상)|connection(과거 판정지점)|candidate(아직 닿지 않은 대상 후보). ⚠ 목표가(target)와 다른 말이다"
    • addedOutput schema / properties / timeframes / items / properties / reverse_pending
      Added value: +{
      +  "description": "이 시간대가 지금 판정 중인 **반전**이 보류 상태일 때만 있다(그 외 null). side = 반전 측(대상 쪽의 반대: 대상이 매수 자리면 sell) · unit_target = 그 대상(기준 가격) · holds = 보류를 넘긴 횟수(0 = 첫 시험 직후) · confirm = 반전이 확인되려면 다음 판단봉이 progress_price 보다 side_of_price 쪽으로 진전하고 대상(unit_target_price)을 넘어 마감해야 한다 · fail_side = 이 측의 키가 나오면 반전 실패(대상이 방어됨, 진행 유지). 신호(stage)와 별개 — 직전 신호가 확인이어도 새 대상의 반전이 보류일 수 있다.",
      +  "properties": {
      +    "confirm": {
      +      "properties": {
      +        "progress_price": {
      +          "type": "number"
      +        },
      +        "side_of_price": {
      +          "enum": [
      +            "above",
      +            "below"
      +          ],
      +          "type": "string"
      +        },
      +        "unit_target_price": {
      +          "type": "number"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "fail_side": {
      +      "enum": [
      +        "buy",
      +        "sell",
      +        null
      +      ],
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "holds": {
      +      "description": "보류를 넘긴 횟수(0 = 첫 시험 직후)",
      +      "type": "integer"
      +    },
      +    "side": {
      +      "description": "buy=매수 · sell=매도 (반전 측)",
      +      "enum": [
      +        "buy",
      +        "sell"
      +      ],
      +      "type": "string"
      +    },
      +    "unit_target": {
      +      "type": "number"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / timeframes / items / properties / target / description
      Previous value: -"진입가 대비 2% 이상 거리의 반대 측 확인 신호 경계. 없으면 null"New value: +"**목표가** — 진입가 대비 2% 이상 거리의 반대 측 확인 신호 경계(신호 이후 청산 좌표). 없으면 null. 판정 중인 대상 가격은 unit_target"
    • changedOutput schema / properties / timeframes / items / properties / unit_target / description
      Previous value: -"이 시간대가 지금 판정 중인 대상 가격"New value: +"이 시간대가 지금 판정 중인 **대상**(대상 가격, 앵커 C). 신호 이후 청산 좌표인 **목표가(target)와 다르다**"
  11. Changed1 schema field changed
    • addedOutput schema / properties / timeframes / items / properties / target_rr
      Added value: +{
      +  "description": "확인된 목표 좌표(target)가 없는 자리(신고점·신저점)에서 **손익비 2:1 기계값**. 새 상수 없이 손절 거리의 2배에서 파생되며 자동주문의 목표와 같은 값이다. 좌표가 아니라 계산값이므로 target 과 섞이지 않는다. target 이 있으면 null",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  12. Changed1 schema field changed
    • addedOutput schema / properties / timeframes / items / properties / target_source_tf
      Added value: +{
      +  "description": "목표가 **상위 시간대**의 확인된 반대 신호 경계(연계 좌표, 규칙표 R20.5·C4)일 때 그 시간대(예: '1w'). 자기 시간대 좌표면 null. 거리는 진입가 대비 단계 규칙 그대로이며 상위 시간대 좌표라 멀 수 있다",
      +  "enum": [
      +    "1w",
      +    "1d",
      +    "8h",
      +    "4h",
      +    "1h",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  13. Changed1 schema field changed
    • addedOutput schema / properties / timeframe_summary
      Added value: +{
      +  "description": "시간대 행을 단계(confirmed 확인·pending 판정보류·failed 실패)와 방향(buy·sell)별로 나열만 한다. 우세·점수·투표 없음 — 실패는 반대 방향을 뜻하지 않는다. target_selected = 대상선정 중인 시간대 목록",
      +  "properties": {
      +    "confirmed": {
      +      "properties": {
      +        "buy": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "sell": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "failed": {
      +      "properties": {
      +        "buy": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "sell": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "pending": {
      +      "properties": {
      +        "buy": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "sell": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "target_selected": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  14. Changed2 schema fields changed
    • changedOutput schema / properties / events / description
      Previous value: -"최근 사건(새것 먼저). 대상선정·신호·신호 결말·연결 도착."New value: +"최근 사건(새것 먼저). 대상선정·신호·신호 결말·기준 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님)."
    • addedOutput schema / properties / events / items / properties / kind / description
      Added value: +"conn_arrival(기준 가격 도달) = 가격이 이전에 판정이 끝난 기준 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다."
  15. Changed4 schema fields changed
    • addedOutput schema / properties / state_text
      Added value: +{
      +  "description": "사용자에게 그대로 보여 줄 수 있는 현재 상태 문면 — 상위·중간·단기로 묶어 시간대마다 방향+단계, 마지막에 주목 가격. 해석·전망 문장은 없다(그건 호출자 몫). 시간대 행이 없으면 null",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / timeframes / items / properties / prev_signal / properties / stage / description
      Previous value: -"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음"New value: +"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음. failed = that signal's judgment broke (the close crossed the signal bar's opposite edge) — it does NOT assert the opposite direction; read the timeframe's own fields (signal_bar / resolved_close / confirmed_at) for which price decided it."
    • changedOutput schema / properties / timeframes / items / properties / stage / description
      Previous value: -"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음"New value: +"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음. failed = that signal's judgment broke (the close crossed the signal bar's opposite edge) — it does NOT assert the opposite direction; read the timeframe's own fields (signal_bar / resolved_close / confirmed_at) for which price decided it."
    • addedOutput schema / properties / timeframes / items / properties / turn
      Added value: +{
      +  "description": "신호가 살아 있는 단계(pending·confirmed)에서 직전 신호와 방향이 바뀌면 reverse(기존 행동을 바꾸는 신호), 같으면 same(이어짐). 실패(failed)·신호 없음·직전 신호 없음은 null",
      +  "enum": [
      +    "reverse",
      +    "same",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  16. Changed3 schema fields changed
    • addedOutput schema / properties / timeframes / items / properties / levels
      Added value: +{
      +  "description": "주목 가격 — 종가 위·아래 가까운 가격 3개씩 {price, distance_pct, kind}. kind=target(지금 판정 기준)|next_target|connection|candidate",
      +  "properties": {
      +    "down": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "up": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / timeframes / items / properties / prev_signal / properties / stage / description
      Previous value: -"target_selected=대상선정 · pending=판정보류(종가가 신호봉 안) · confirmed=확인(종가가 신호 방향 경계 밖) · failed=실패(반대 경계 밖) · none=신호 없음"New value: +"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음"
    • changedOutput schema / properties / timeframes / items / properties / stage / description
      Previous value: -"target_selected=대상선정 · pending=판정보류(종가가 신호봉 안) · confirmed=확인(종가가 신호 방향 경계 밖) · failed=실패(반대 경계 밖) · none=신호 없음"New value: +"target_selected=대상선정 · pending=판정보류 · confirmed=확인 · failed=실패 · none=신호 없음"
  17. Changed7 schema fields changed
    • addedInput schema / properties / events_limit
      Added value: +{
      +  "default": 10,
      +  "maximum": 50,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / symbol / description
      Previous value: -"e.g. BTCUSDT"New value: +"e.g. BTCUSDT, XYZ_GOLDUSD"
    • addedInput schema / properties / timeframe / description
      Added value: +"Alias for a single-element `timeframes` (backward compatible)."
    • changedInput schema / properties / timeframe / enum
      Previous value: -[
      -  "30m",
      -  "1h",
      -  "4h",
      -  "8h",
      -  "1d"
      -]New value: +[
      +  "30m",
      +  "1h",
      +  "4h",
      +  "8h",
      +  "1d",
      +  "1w"
      +]
    • addedInput schema / properties / timeframes
      Added value: +{
      +  "description": "Subset to return. Omit for all timeframes.",
      +  "items": {
      +    "enum": [
      +      "30m",
      +      "1h",
      +      "4h",
      +      "8h",
      +      "1d",
      +      "1w"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "symbol",
      -  "timeframe"
      -]New value: +[
      +  "symbol"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "as_of": {
      +      "description": "가장 최근 평가 봉의 마감 시각",
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "events": {
      +      "description": "최근 사건(새것 먼저). 대상선정·신호·신호 결말·연결 도착.",
      +      "items": {
      +        "properties": {
      +          "kind": {
      +            "enum": [
      +              "target_selected",
      +              "signal",
      +              "signal_resolved",
      +              "conn_arrival"
      +            ],
      +            "type": "string"
      +          },
      +          "price": {
      +            "description": "signal/signal_resolved=종가 · 그 외=대상 가격",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "side": {
      +            "description": "buy=매수 · sell=매도",
      +            "enum": [
      +              "buy",
      +              "sell",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "description": "signal_resolved 의 결말",
      +            "enum": [
      +              "confirmed",
      +              "failed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "time": {
      +            "format": "date-time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "timeframe": {
      +            "enum": [
      +              "1w",
      +              "1d",
      +              "8h",
      +              "4h",
      +              "1h",
      +              "30m"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "time",
      +          "timeframe",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "missing_timeframes": {
      +      "description": "아직 평가값이 없는 시간대",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "price": {
      +      "description": "가장 최근 평가 봉의 종가",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "symbol": {
      +      "type": "string"
      +    },
      +    "timeframes": {
      +      "description": "상위→단기 순. 각 시간대가 낸 상태를 나란히 — 시간대 간 종합 판정은 없다(종합은 호출자 몫).",
      +      "items": {
      +        "properties": {
      +          "bar_close_time": {
      +            "description": "이 시간대의 마지막 평가 봉 마감 시각",
      +            "format": "date-time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "close": {
      +            "description": "그 봉 종가",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "confirmed_at": {
      +            "description": "결말(확인/실패)이 난 봉 시각",
      +            "format": "date-time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "entry": {
      +            "description": "체결 기준 가격 = 신호 시점 종가",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "prev_signal": {
      +            "properties": {
      +              "side": {
      +                "description": "buy=매수 · sell=매도",
      +                "enum": [
      +                  "buy",
      +                  "sell",
      +                  null
      +                ],
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "signal_time": {
      +                "format": "date-time",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "stage": {
      +                "description": "target_selected=대상선정 · pending=판정보류(종가가 신호봉 안) · confirmed=확인(종가가 신호 방향 경계 밖) · failed=실패(반대 경계 밖) · none=신호 없음",
      +                "enum": [
      +                  "target_selected",
      +                  "pending",
      +                  "confirmed",
      +                  "failed",
      +                  "none"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "resolved_close": {
      +            "description": "결말을 정한 종가",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "side": {
      +            "description": "buy=매수 · sell=매도",
      +            "enum": [
      +              "buy",
      +              "sell",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "signal_bar": {
      +            "description": "신호봉(판단봉 2) — 종가가 이 범위 밖으로 나가면 확인/실패, 안이면 판정보류",
      +            "properties": {
      +              "high": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "low": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "time": {
      +                "format": "date-time",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "signal_time": {
      +            "description": "신호 시각(판단봉 2를 봉인하는 S 봉)",
      +            "format": "date-time",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "stage": {
      +            "description": "target_selected=대상선정 · pending=판정보류(종가가 신호봉 안) · confirmed=확인(종가가 신호 방향 경계 밖) · failed=실패(반대 경계 밖) · none=신호 없음",
      +            "enum": [
      +              "target_selected",
      +              "pending",
      +              "confirmed",
      +              "failed",
      +              "none"
      +            ],
      +            "type": "string"
      +          },
      +          "stop": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "target": {
      +            "description": "진입가 대비 2% 이상 거리의 반대 측 확인 신호 경계. 없으면 null",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "target_reason": {
      +            "description": "target 이 null 인 이유",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "timeframe": {
      +            "enum": [
      +              "1w",
      +              "1d",
      +              "8h",
      +              "4h",
      +              "1h",
      +              "30m"
      +            ],
      +            "type": "string"
      +          },
      +          "unit_target": {
      +            "description": "이 시간대가 지금 판정 중인 대상 가격",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "unit_target_touch": {
      +            "enum": [
      +              "break",
      +              "inside",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "timeframe",
      +          "stage",
      +          "side"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "symbol",
      +    "as_of",
      +    "price",
      +    "timeframes",
      +    "events",
      +    "missing_timeframes"
      +  ],
      +  "type": "object"
      +}
  18. First observed

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and mostly does: it states data is 'read as persisted (no recompute)', that there are 'no scores, weights or probabilities anywhere', and that timeframe_summary is 'a listing, not a verdict'. It also flags that as_of can precede get_assembly.as_of and that target falls back to null + target_reason. It stops short of stating authorization or rate-limit behavior, so 4 rather than 5.

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

Conciseness3/5

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

The purpose and routing are front-loaded, which is good, but the long parenthetical enumeration of output fields (stage, side, signal_bar, entry, stop, target, unit_target, units, reverse_pending, standing, prev_signal, turn, levels) largely restates what the output schema already declares. Useful vocabulary, but it bloats a single paragraph and hurts scannability.

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?

Given an output schema exists, the description still supplies the semantic caveats an agent needs: state_text legend, target vs unit_target distinction, event inclusion rules, as_of semantics, and the crypto/Hyperliquid-only market scope. Nothing material for correct invocation appears 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 75%, and the description adds meaning the schema doesn't: `timeframe` is explained as the key to one timeframe's full event history, and `timeframes` is framed as a subset selector. events_limit is covered only indirectly via the 'latest 2' default rule.

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?

Opens with a specific verb+resource+scope: 'PER-TIMEFRAME judgment state of a symbol, structured'. It explicitly positions itself relative to siblings, describing itself as 'the evidence behind decker.get_assembly's single verdict', so an agent knows exactly what this returns and what it does not.

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?

Gives explicit routing: call decker.get_assembly first for 'what is the situation and what do I do', use this for one timeframe's exact state. Also names exclusions and alternatives — 'KRX: decker.get_reading' and 'Before placing any order, check the intent with decker.validate_intent'.

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.