Skip to main content
Glama

decker.get_market_state

Current swing-judgment state of a symbol across timeframes, as structured data (consumer contract CR1). Per timeframe (top→short): stage = target_selected (대상선정) | pending (판정보류: the close is still inside the signal bar) | confirmed (확인) | failed (실패) | none; side = buy/sell; signal_time; signal_bar {time, low, high} (the bar whose edges decide confirm/fail); confirmed_at / resolved_close; entry (= close at the signal, the fill basis); stop; target (opposite-side confirmed-signal edge at least 2% from entry, else null + target_reason); unit_target (the price this timeframe is judging now); prev_signal; turn = reverse (the signal flips the previous signal's direction = it changes the standing action) | same (continues it) | null; levels = nearby prices above/below the close. state_text = ready-to-show Korean status (title with price, then two compact lines: 상위·중간 / 단기, timeframes without a signal omitted, a failed row carries the price that decided it, plus nearby prices; no interpretation). Marks in state_text: color = state, shape = direction — 🟢▲ buy confirmed · 🔴▼ sell confirmed (action-worthy) · ⚪▲/⚪▼ pending (signal exists, unconfirmed) · 🟡 target selected / judging · ✖️ failed (void signal, NOT the opposite side). timeframe_summary = the same rows merely listed by (stage, side), e.g. confirmed.buy = ['1d','4h'] — a listing, not a verdict: no weights, scores or votes, and failed is NOT counted as the opposite side. events = recent target_selected / signal / signal_resolved / conn_arrival, newest first. Each timeframe reports its own state side by side — there is NO cross-timeframe verdict, no probability/confidence/bias fields; combining timeframes into a view is the caller's job. HOW TO ANSWER: this tool is the source of truth for direction. Show state_text, then explain in your own words using only these values (what each timeframe confirmed/failed/is waiting on, and which prices to watch); do not invent probabilities or targets. decker.get_view shows the same values as ready-made text. Read as persisted (no recompute). layer=STATE: a market-state reading, NOT a trade instruction. Crypto and Hyperliquid synthetics only (KRX: use decker.get_reading). Before placing any order through any execution tool, check the intent with decker.validate_intent.

Input Schema

TableJSON 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

TableJSON Schema
NameRequiredDescriptionDefault
as_ofYes가장 최근 평가 봉의 마감 시각
priceYes가장 최근 평가 봉의 종가
eventsYes최근 사건(새것 먼저). 대상선정·신호·신호 결말·기준 가격 도달(conn_arrival: 가격이 이전에 판정이 끝난 기준 가격에 닿음 — 방향·결말 판정 아님).
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. 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"
      +  ]
      +}
  2. 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"
      +  ]
      +}
  3. 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"
      +}
  4. 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(기준 가격 도달) = 가격이 이전에 판정이 끝난 기준 가격에 닿았다는 사실. 방향·결말 판정이 아니며 텔레그램으로는 보내지 않는다."
  5. 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"
      +  ]
      +}
  6. 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=신호 없음"
  7. 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"
      +}
  8. First observed

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and mostly delivers: it declares 'Read as persisted (no recompute)', layer=STATE (not a trade instruction), no cross-timeframe verdict, and explicitly denies probability/confidence/bias fields. It omits auth/permission and rate-limit behavior, but for a read-only state snapshot the coverage is strong.

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?

Front-loaded with purpose, but the body is a very long semicolon-chained run-on that is hard to parse and spends many clauses detailing return fields that a present output schema already covers. Density is justified by complexity, yet it is over-sized relative to what an agent needs to select and call it.

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 complex state-reading tool with a sibling ecosystem and an existing output schema, the description covers scope, domain limits, behavioral guarantees, interpretation rules, and routing. An agent has everything required to call it correctly and use the result without hallucinating probabilities.

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

Parameters3/5

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

Schema coverage is 75%, so most parameters are documented in the schema itself (symbol examples, timeframe alias, timeframes subset, events_limit default/range). The description adds no per-parameter meaning or format detail beyond what the schema already supplies, so it sits at the baseline.

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+resource ('Current swing-judgment state of a symbol across timeframes, as structured data') and explicitly frames it as 'the source of truth for direction'. It differentiates itself from siblings by name: get_view (same values as ready-made text), get_reading (KRX), and validate_intent (before orders).

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?

Provides an explicit 'HOW TO ANSWER' section plus routing rules: use this for direction, get_view for ready-made text, get_reading for KRX, and validate_intent before any order. The domain restriction ('Crypto and Hyperliquid synthetics only') is stated as an exclusion, which is exactly what a routing agent needs.

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.